mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-08 05:34:51 +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'):
|
if contstr.endswith('\n') or contstr.endswith('\r'):
|
||||||
new_line = True
|
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
|
end_pos = lnum, max
|
||||||
# As the last position we just take the maximally possible position. We
|
# As the last position we just take the maximally possible position. We
|
||||||
# remove -1 for the last new line.
|
# 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 tree.get_code() == code
|
||||||
assert [c.type for c in tree.children] == types
|
assert [c.type for c in tree.children] == types
|
||||||
assert tree.end_pos == (len(code) + 1, 0)
|
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