mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-07 21:34:32 +08:00
Fix an issue with unfinished f string literals
This commit is contained in:
@@ -649,6 +649,17 @@ def tokenize_lines(lines, version_info, start_pos=(1, 0)):
|
||||
if contstr.endswith('\n') or contstr.endswith('\r'):
|
||||
new_line = True
|
||||
|
||||
if fstring_stack:
|
||||
tos = fstring_stack[-1]
|
||||
if tos.previous_lines:
|
||||
yield PythonToken(
|
||||
FSTRING_STRING, tos.previous_lines,
|
||||
tos.last_string_start_pos,
|
||||
# Never has a prefix because it can start anywhere and
|
||||
# include whitespace.
|
||||
prefix=''
|
||||
)
|
||||
|
||||
end_pos = lnum, max
|
||||
# As the last position we just take the maximally possible position. We
|
||||
# remove -1 for the last new line.
|
||||
|
||||
@@ -118,3 +118,16 @@ def test_carriage_return_at_end(code, types):
|
||||
assert tree.get_code() == code
|
||||
assert [c.type for c in tree.children] == types
|
||||
assert tree.end_pos == (len(code) + 1, 0)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('code', [
|
||||
' ',
|
||||
' F"""',
|
||||
' F"""\n',
|
||||
' F""" \n',
|
||||
' F""" \n3',
|
||||
' f"""\n"""',
|
||||
' f"""\n"""\n',
|
||||
])
|
||||
def test_full_code_round_trip(code):
|
||||
assert parse(code).get_code() == code
|
||||
|
||||
Reference in New Issue
Block a user