Skip to content

Commit

Permalink
Fix SyntaxError indicator printing too many spaces for multi-line s…
Browse files Browse the repository at this point in the history
…trings (pythonGH-14433)
  • Loading branch information
asottile authored and pablogsal committed Jul 29, 2019
1 parent e1b9002 commit 5b94f35
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
14 changes: 14 additions & 0 deletions Lib/test/test_cmd_line_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,20 @@ def test_syntaxerror_indented_caret_position(self):
self.assertNotIn("\f", text)
self.assertIn("\n 1 + 1 = 2\n ^", text)

def test_syntaxerror_multi_line_fstring(self):
script = 'foo = f"""{}\nfoo"""\n'
with support.temp_dir() as script_dir:
script_name = _make_test_script(script_dir, 'script', script)
exitcode, stdout, stderr = assert_python_failure(script_name)
self.assertEqual(
stderr.splitlines()[-3:],
[
b' foo = f"""{}',
b' ^',
b'SyntaxError: f-string: empty expression not allowed',
],
)

def test_consistent_sys_path_for_direct_execution(self):
# This test case ensures that the following all give the same
# sys.path configuration:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix ``SyntaxError`` indicator printing too many spaces for multi-line strings - by Anthony Sottile.
2 changes: 2 additions & 0 deletions Parser/tokenizer.c
Original file line number Diff line number Diff line change
Expand Up @@ -956,6 +956,7 @@ tok_nextc(struct tok_state *tok)
while (!done) {
Py_ssize_t curstart = tok->start == NULL ? -1 :
tok->start - tok->buf;
Py_ssize_t cur_multi_line_start = tok->multi_line_start - tok->buf;
Py_ssize_t curvalid = tok->inp - tok->buf;
Py_ssize_t newsize = curvalid + BUFSIZ;
char *newbuf = tok->buf;
Expand All @@ -968,6 +969,7 @@ tok_nextc(struct tok_state *tok)
}
tok->buf = newbuf;
tok->cur = tok->buf + cur;
tok->multi_line_start = tok->buf + cur_multi_line_start;
tok->line_start = tok->cur;
tok->inp = tok->buf + curvalid;
tok->end = tok->buf + newsize;
Expand Down

0 comments on commit 5b94f35

Please sign in to comment.