mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-07 21:34:32 +08:00
Fix diff parser: Avoid indentation issues
This commit is contained in:
@@ -564,6 +564,10 @@ class _NodesTree(object):
|
||||
|
||||
Returns the number of tree nodes that were copied.
|
||||
"""
|
||||
if tree_nodes[0].type == 'error_leaf' and tree_nodes[0].token_type == 'INDENT':
|
||||
# Avoid copying error indents. Just parse them again.
|
||||
return []
|
||||
|
||||
self._get_insertion_node(tree_nodes[0])
|
||||
|
||||
new_nodes, self._working_stack = self._copy_nodes(
|
||||
|
||||
@@ -774,3 +774,47 @@ def test_parentheses_before_method(differ):
|
||||
differ.initialize(code1)
|
||||
differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)
|
||||
differ.parse(code1, parsers=1, copies=1)
|
||||
|
||||
|
||||
def test_indentation_issues(differ):
|
||||
code1 = dedent('''\
|
||||
class C:
|
||||
def f():
|
||||
1
|
||||
if 2:
|
||||
return 3
|
||||
|
||||
def g():
|
||||
to_be_removed
|
||||
pass
|
||||
''')
|
||||
|
||||
code2 = dedent('''\
|
||||
class C:
|
||||
def f():
|
||||
1
|
||||
``something``, very ``weird``).
|
||||
if 2:
|
||||
return 3
|
||||
|
||||
def g():
|
||||
to_be_removed
|
||||
pass
|
||||
''')
|
||||
|
||||
code3 = dedent('''\
|
||||
class C:
|
||||
def f():
|
||||
1
|
||||
if 2:
|
||||
return 3
|
||||
|
||||
def g():
|
||||
pass
|
||||
''')
|
||||
|
||||
differ.initialize(code1)
|
||||
differ.parse(code2, parsers=1, copies=2, expect_error_leaves=True)
|
||||
differ.parse(code1, parsers=2, copies=1)
|
||||
differ.parse(code3, parsers=1, copies=1)
|
||||
differ.parse(code1, parsers=1, copies=2)
|
||||
|
||||
Reference in New Issue
Block a user