8000 gh-133541: Handle SyntaxError raised by the tokenizer on user input (… · python/cpython@b2fabce · GitHub
[go: up one dir, main page]

Skip to content

Commit b2fabce

Browse files
authored
gh-133541: Handle SyntaxError raised by the tokenizer on user input (#133606)
1 parent 6ce469d commit b2fabce

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

Lib/_pyrepl/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ def gen_colors(buffer: str) -> Iterator[ColorSpan]:
102102
for color in gen_colors_from_token_stream(gen, line_lengths):
103103
yield color
104104
last_emitted = color
105+
except SyntaxError:
106+
return
105107
except tokenize.TokenError as te:
106108
yield from recover_unterminated_string(
107109
te, line_lengths, last_emitted, buffer

Lib/test/test_pyrepl/test_reader.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,26 @@ def unfinished_function():
497497
self.assert_screen_equal(reader, code, clean=True)
498498
self.assert_screen_equal(reader, expected)
499499

500+
def test_syntax_highlighting_indentation_error(self):
501+
code = dedent(
502+
"""\
503+
def unfinished_function():
504+
var = 1
505+
oops
506+
"""
507+
)
508+
expected = dedent(
509+
"""\
510+
{k}def{z} {d}unfinished_function{z}{o}({z}{o}){z}{o}:{z}
511+
var {o}={z} {n}1{z}
512+
oops
513+
"""
514+
).format(**colors)
515+
events = code_to_events(code)
516+
reader, _ = handle_all_events(events)
517+
self.assert_screen_equal(reader, code, clean=True)
518+
self.assert_screen_equal(reader, expected)
519+
500520
def test_control_characters(self):
501521
code = 'flag = "🏳️‍🌈"'
502522
events = code_to_events(code)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Inconsistent indentation in user input crashed the new REPL when syntax
2+
highlighting was active. This is now fixed.

0 commit comments

Comments
 (0)
0