mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-21 11:51:28 +08:00
Fix diff parser: Don't copy DEDENT tokens at the beginning
This commit is contained in:
@@ -622,6 +622,10 @@ class _NodesTree(object):
|
|||||||
|
|
||||||
new_nodes.append(node)
|
new_nodes.append(node)
|
||||||
|
|
||||||
|
while new_nodes and new_nodes[0].type == 'error_leaf' \
|
||||||
|
and new_nodes[0].token_type in _INDENTATION_TOKENS:
|
||||||
|
new_nodes.pop(0)
|
||||||
|
|
||||||
if not new_nodes:
|
if not new_nodes:
|
||||||
return [], working_stack, prefix
|
return [], working_stack, prefix
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ from parso import load_grammar
|
|||||||
from parso.python.diff import DiffParser, _assert_valid_graph
|
from parso.python.diff import DiffParser, _assert_valid_graph
|
||||||
from parso import parse
|
from parso import parse
|
||||||
|
|
||||||
|
ANY = object()
|
||||||
|
|
||||||
|
|
||||||
def test_simple():
|
def test_simple():
|
||||||
"""
|
"""
|
||||||
@@ -69,7 +71,9 @@ class Differ(object):
|
|||||||
|
|
||||||
error_node = _check_error_leaves_nodes(new_module)
|
error_node = _check_error_leaves_nodes(new_module)
|
||||||
assert expect_error_leaves == (error_node is not None), error_node
|
assert expect_error_leaves == (error_node is not None), error_node
|
||||||
|
if parsers is not ANY:
|
||||||
assert diff_parser._parser_count == parsers
|
assert diff_parser._parser_count == parsers
|
||||||
|
if copies is not ANY:
|
||||||
assert diff_parser._copy_count == copies
|
assert diff_parser._copy_count == copies
|
||||||
return new_module
|
return new_module
|
||||||
|
|
||||||
@@ -1108,3 +1112,19 @@ def test_all_sorts_of_indentation(differ):
|
|||||||
''')
|
''')
|
||||||
differ.parse(code3, parsers=2, expect_error_leaves=True)
|
differ.parse(code3, parsers=2, expect_error_leaves=True)
|
||||||
differ.parse('')
|
differ.parse('')
|
||||||
|
|
||||||
|
|
||||||
|
def test_dont_copy_dedents_in_beginning(differ):
|
||||||
|
code1 = dedent('''\
|
||||||
|
a
|
||||||
|
4
|
||||||
|
''')
|
||||||
|
code2 = dedent('''\
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
''')
|
||||||
|
differ.initialize(code1)
|
||||||
|
differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True)
|
||||||
|
differ.parse(code1, copies=1, parsers=1)
|
||||||
|
|||||||
Reference in New Issue
Block a user