Move INDENT value to the postponed prefix

This makes blib2to3's tree output valid again (which was broken by the previous
fiddling with INDENT and DEDENT nodes).

Fixes #334
This commit is contained in:
Łukasz Langa 2018-06-19 20:44:47 -07:00
parent df2ae3bbe6
commit e1ef57a29e
4 changed files with 32 additions and 19 deletions

View File

@ -830,6 +830,9 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
* they now correctly work across function/class boundaries (#335)
* they now work when an indentation block starts with empty lines or misaligned
comments (#334)
* fixed improper formatting of f-strings with quotes inside interpolated
expressions (#322)

View File

@ -70,24 +70,19 @@ def parse_tokens(self, tokens, debug=False):
if debug:
self.logger.debug("%s %r (prefix=%r)",
token.tok_name[type], value, prefix)
if type in {token.INDENT, token.DEDENT}:
_prefix = prefix
if type == token.INDENT:
indent_columns.append(len(value))
_prefix = prefix + value
prefix = ""
if type == token.DEDENT:
value = ""
elif type == token.DEDENT:
_indent_col = indent_columns.pop()
prefix, _prefix = self._partially_consume_prefix(_prefix, _indent_col)
prefix, _prefix = self._partially_consume_prefix(prefix, _indent_col)
if p.addtoken(type, value, (prefix, start)):
if debug:
self.logger.debug("Stop.")
break
prefix = ""
if type == token.INDENT:
indent_columns.append(len(value))
if _prefix.startswith(value):
# Don't double-indent. Since we're delaying the prefix that
# would normally belong to INDENT, we need to put the value
# at the end versus at the beginning.
_prefix = _prefix[len(value):] + value
if type in {token.INDENT, token.DEDENT}:
prefix = _prefix
lineno, column = end

View File

@ -36,10 +36,11 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
expr_stmt
NAME
' '
'tree_depth'
annassign
COLON
@ -109,10 +110,11 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
expr_stmt
NAME
' '
'indent'
EQUAL
' '
@ -184,10 +186,11 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
expr_stmt
NAME
' '
'_type'
EQUAL
' '
@ -297,10 +300,11 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
yield_expr
NAME
' '
'yield'
yield_arg
NAME
@ -410,10 +414,11 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
expr_stmt
NAME
' '
'_type'
EQUAL
' '
@ -542,11 +547,11 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
power
NAME
"# We don't have to handle prefixes for `Node` objects since\n # that delegates to the first child anyway.\n "
" # We don't have to handle prefixes for `Node` objects since\n # that delegates to the first child anyway.\n "
'out'
trailer
LPAR
@ -699,9 +704,10 @@ file_input
NEWLINE
'\n'
INDENT
' '
''
simple_stmt
STRING
' '
'"""Pretty-prints a given string of `code`.\n\n Convenience method for debugging.\n """'
NEWLINE
'\n'

View File

@ -19,8 +19,17 @@ def test_fader(test):
pass
def check_fader(test):
pass
def verify_fader(test):
# misaligned comment
pass
def verify_fader(test):
"""Hey, ho."""
assert test.passed()
def test_calculate_fades():
calcs = [
# one is zero/none