Retain spacing between disabled and enabled lines.
diff --git a/ChangeLog b/ChangeLog
index 082eeb2..09394c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-09-10 Bill Wendling <[email protected]>
+
+ * yapf/yapflib/reformatter.py: Retain spacing between disabled and
+ enabled lines.
+ * yapftests/yapf_test.py: Add testcase.
+
2015-09-09 Bill Wendling <[email protected]>
* yapf/yapflib/format_decision_style.py: Split only at start of named
diff --git a/yapf/yapflib/reformatter.py b/yapf/yapflib/reformatter.py
index c9b13b4..d106c70 100644
--- a/yapf/yapflib/reformatter.py
+++ b/yapf/yapflib/reformatter.py
@@ -64,7 +64,7 @@
if prev_uwline and prev_uwline.disable:
# Keep the vertical spacing between a disabled and enabled formatting
# region.
- _RetainVerticalSpacing(uwline, prev_uwline)
+ _RetainVerticalSpacingBetweenTokens(uwline.first, prev_uwline.last)
if (_LineContainsI18n(uwline) or uwline.disable or
_LineHasContinuationMarkers(uwline)):
@@ -115,22 +115,27 @@
cur_lineno = 0
prev_lineno = 0
for cur_tok in cur_uwline.tokens:
- if prev_tok is not None:
- if prev_tok.is_string:
- prev_lineno = prev_tok.lineno + prev_tok.value.count('\n')
- else:
- prev_lineno = prev_tok.lineno
-
- if cur_tok.is_comment:
- cur_lineno = cur_tok.lineno - cur_tok.value.count('\n')
- else:
- cur_lineno = cur_tok.lineno
-
- num_newlines = cur_lineno - prev_lineno
- cur_tok.AdjustNewlinesBefore(num_newlines)
+ _RetainVerticalSpacingBetweenTokens(cur_tok, prev_tok)
prev_tok = cur_tok
+def _RetainVerticalSpacingBetweenTokens(cur_tok, prev_tok):
+ if prev_tok is None:
+ return
+
+ if prev_tok.is_string:
+ prev_lineno = prev_tok.lineno + prev_tok.value.count('\n')
+ else:
+ prev_lineno = prev_tok.lineno
+
+ if cur_tok.is_comment:
+ cur_lineno = cur_tok.lineno - cur_tok.value.count('\n')
+ else:
+ cur_lineno = cur_tok.lineno
+
+ cur_tok.AdjustNewlinesBefore(cur_lineno - prev_lineno)
+
+
def _EmitLineUnformatted(state):
"""Emit the line without formatting.
diff --git a/yapftests/yapf_test.py b/yapftests/yapf_test.py
index a14f10b..c53449d 100644
--- a/yapftests/yapf_test.py
+++ b/yapftests/yapf_test.py
@@ -756,6 +756,30 @@
self.assertYapfReformats(unformatted_code, expected_formatted_code,
extra_options=['--lines', '10-18'])
+ def testRetainVerticalFormattingBetweenDisabledAndEnabledLines(self):
+ unformatted_code = textwrap.dedent(u"""\
+ class A(object):
+ def aaaaaaaaaaaaa(self):
+ c = bbbbbbbbb.ccccccccc('challenge', 0, 1, 10)
+ self.assertEqual(
+ ('ddddddddddddddddddddddddd',
+ 'eeeeeeeeeeeeeeeeeeeeeeeee.%s' %
+ c.ffffffffffff),
+ gggggggggggg.hhhhhhhhh(c, c.ffffffffffff))
+ iiiii = jjjjjjjjjjjjjj.iiiii
+ """)
+ expected_formatted_code = textwrap.dedent(u"""\
+ class A(object):
+ def aaaaaaaaaaaaa(self):
+ c = bbbbbbbbb.ccccccccc('challenge', 0, 1, 10)
+ self.assertEqual(
+ ('ddddddddddddddddddddddddd', 'eeeeeeeeeeeeeeeeeeeeeeeee.%s' %
+ c.ffffffffffff), gggggggggggg.hhhhhhhhh(c, c.ffffffffffff))
+ iiiii = jjjjjjjjjjjjjj.iiiii
+ """)
+ self.assertYapfReformats(unformatted_code, expected_formatted_code,
+ extra_options=['--lines', '4-7'])
+
class BadInputTest(unittest.TestCase):
"""Test yapf's behaviour when passed bad input."""