From f3b1b44bf3d2d5927004fa1c2fcf1ab2def816b9 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 20 May 2021 07:23:19 -0700 Subject: [PATCH] fix syntax error offsets for python 3.10 (#635) --- .github/workflows/test.yml | 2 +- pyflakes/test/test_api.py | 43 +++++++++++++++++++++++++------------- tox.ini | 2 +- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/pyflakes/test/test_api.py b/pyflakes/test/test_api.py index d379b3b7..2c1cf19d 100644 --- a/pyflakes/test/test_api.py +++ b/pyflakes/test/test_api.py @@ -441,7 +441,7 @@ def evaluate(source): evaluate(source) except SyntaxError: e = sys.exc_info()[1] - if not PYPY: + if not PYPY and sys.version_info < (3, 10): self.assertTrue(e.text.count('\n') > 1) else: self.fail() @@ -449,10 +449,17 @@ def evaluate(source): with self.makeTempFile(source) as sourcePath: if PYPY: message = 'end of file (EOF) while scanning triple-quoted string literal' + elif sys.version_info >= (3, 10): + message = 'unterminated triple-quoted string literal (detected at line 8)' # noqa: E501 else: message = 'invalid syntax' - column = 8 if sys.version_info >= (3, 8) else 11 + if sys.version_info >= (3, 10): + column = 12 + elif sys.version_info >= (3, 8): + column = 8 + else: + column = 11 self.assertHasErrors( sourcePath, ["""\ @@ -468,21 +475,25 @@ def test_eofSyntaxError(self): """ with self.makeTempFile("def foo(") as sourcePath: if PYPY: - result = """\ -%s:1:7: parenthesis is never closed -def foo( - ^ -""" % (sourcePath,) + msg = 'parenthesis is never closed' + elif sys.version_info >= (3, 10): + msg = "'(' was never closed" else: - result = """\ -%s:1:9: unexpected EOF while parsing -def foo( - ^ -""" % (sourcePath,) + msg = 'unexpected EOF while parsing' - self.assertHasErrors( - sourcePath, - [result]) + if PYPY: + column = 7 + elif sys.version_info >= (3, 10): + column = 8 + else: + column = 9 + + spaces = ' ' * (column - 1) + expected = '{}:1:{}: {}\ndef foo(\n{}^\n'.format( + sourcePath, column, msg, spaces + ) + + self.assertHasErrors(sourcePath, [expected]) def test_eofSyntaxErrorWithTab(self): """ @@ -515,6 +526,8 @@ def foo(bar=baz, bax): if ERROR_HAS_LAST_LINE: if PYPY: column = 7 + elif sys.version_info >= (3, 10): + column = 18 elif sys.version_info >= (3, 9): column = 21 elif sys.version_info >= (3, 8):