Fix diff parser: The prefix was wrong in some copy cases

This commit is contained in:
Dave Halter
2019-01-05 18:33:38 +01:00
parent deaf1f310b
commit a8ec75fedd
2 changed files with 21 additions and 28 deletions

View File

@@ -659,6 +659,10 @@ class _NodesTree(object):
tos.add_tree_nodes(prefix, new_nodes, line_offset, last_line_offset_leaf) tos.add_tree_nodes(prefix, new_nodes, line_offset, last_line_offset_leaf)
self.prefix = new_prefix self.prefix = new_prefix
self._prefix_remainder = '' self._prefix_remainder = ''
else:
# Need to reset the prefix, because it might have been reset higher
# up in the stack.
self.prefix = prefix
return new_nodes, working_stack return new_nodes, working_stack

View File

@@ -748,40 +748,29 @@ def test_paren_before_docstring(differ):
differ.parse(code1, parsers=2, copies=1) differ.parse(code1, parsers=2, copies=1)
def test_x(differ): def test_parentheses_before_method(differ):
code1 = dedent('''\ code1 = dedent('''\
class StackNode(object): class A:
def __init__(self, dfa): def a(self):
self.dfa = dfa pass
self.nodes = []
@property class B:
def nonterminal(self): def b(self):
return self.dfa.from_rule if 1:
pass
def __repr__(self):
return '%s(%s, %s)' % (self.__class__.__name__, self.dfa, self.nodes)
def x():
pass
''') ''')
code2 = dedent('''\ code2 = dedent('''\
class StackNode(object): class A:
def __init__(self, dfa): def a(self):
self.dfa = dfa pass
self.nodes = [] Exception.__init__(self, "x" %
(msg, type_.name, value, start_pos))
@property def b(self):
def nonterminal(self): if 1:
pass
def __repr__(self):
def x():
pass
''') ''')
differ.initialize(code1) differ.initialize(code1)
differ.parse(code2, parsers=3, copies=1, expect_error_leaves=True) differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)
differ.parse(code1, parsers=2, copies=2) differ.parse(code1, parsers=1, copies=1)