Fix diff parser: positioning of functions if decorators were removed

This commit is contained in:
Dave Halter
2019-01-02 13:16:22 +01:00
parent a9f58b7c45
commit 96ae6a078b
2 changed files with 41 additions and 1 deletions

View File

@@ -638,7 +638,11 @@ class _NodesTree(object):
if new_nodes:
if had_valid_suite_last:
last_line_offset_leaf = new_nodes[-1].children[-2].get_last_leaf()
last = new_nodes[-1]
if last.type == 'decorated':
last = last.children[-1]
last_line_offset_leaf = last.children[-2].get_last_leaf()
assert last_line_offset_leaf == ':'
else:
last_line_offset_leaf = new_nodes[-1].get_last_leaf()
tos.add_tree_nodes(new_nodes, line_offset, last_line_offset_leaf)

View File

@@ -665,3 +665,39 @@ def test_function_deletion(differ):
differ.initialize(code1)
differ.parse(code2, parsers=1, copies=0, expect_error_leaves=True)
differ.parse(code1, parsers=1, copies=0)
def test_docstring_removal(differ):
code1 = dedent('''\
class E(Exception):
"""
1
2
3
"""
class S(object):
@property
def f(self):
return cmd
def __repr__(self):
return cmd2
''')
code2 = dedent('''\
class E(Exception):
"""
1
3
"""
class S(object):
@property
def f(self):
return cmd
return cmd2
''')
differ.initialize(code1)
differ.parse(code2, parsers=1, copies=2)
differ.parse(code1, parsers=2, copies=1)