mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-06 12:54:29 +08:00
Fix fstring issues when error leaves are involved
This commit is contained in:
@@ -12,10 +12,9 @@ import logging
|
||||
|
||||
from parso.utils import split_lines
|
||||
from parso.python.parser import Parser
|
||||
from parso.python.tree import EndMarker, PythonErrorLeaf
|
||||
from parso.python.tree import EndMarker
|
||||
from parso.python.tokenize import PythonToken
|
||||
from parso.python.token import PythonTokenTypes
|
||||
from parso.tree import search_ancestor
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
DEBUG_DIFF_PARSER = False
|
||||
@@ -432,9 +431,9 @@ class DiffParser(object):
|
||||
)
|
||||
stack = self._active_parser.stack
|
||||
self._replace_tos_indent = None
|
||||
#print('start', line_offset + 1, indents)
|
||||
# print('start', line_offset + 1, indents)
|
||||
for token in tokens:
|
||||
#print(token, indents)
|
||||
# print(token, indents)
|
||||
typ = token.type
|
||||
if typ == DEDENT:
|
||||
if len(indents) < initial_indentation_count:
|
||||
|
||||
@@ -532,7 +532,7 @@ def tokenize_lines(lines, version_info, start_pos=(1, 0), indents=None, is_first
|
||||
|
||||
if not pseudomatch: # scan for tokens
|
||||
match = whitespace.match(line, pos)
|
||||
if pos == 0 and paren_level == 0:
|
||||
if pos == 0 and paren_level == 0 and not fstring_stack:
|
||||
for t in dedent_if_necessary(match.end()):
|
||||
yield t
|
||||
pos = match.end()
|
||||
|
||||
@@ -1609,3 +1609,24 @@ def test_backslash_insertion(differ):
|
||||
differ.initialize(code1)
|
||||
differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)
|
||||
differ.parse(code1, parsers=2, copies=1)
|
||||
|
||||
|
||||
def test_fstring_with_error_leaf(differ):
|
||||
code1 = dedent("""\
|
||||
def f():
|
||||
x
|
||||
def g():
|
||||
y
|
||||
""")
|
||||
code2 = dedent("""\
|
||||
def f():
|
||||
x
|
||||
F'''
|
||||
def g():
|
||||
y
|
||||
{a
|
||||
\x01
|
||||
""")
|
||||
|
||||
differ.initialize(code1)
|
||||
differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True)
|
||||
|
||||
Reference in New Issue
Block a user