https://github.com/python/cpython/commit/e5c7543f121ad970da46fab3e8e0b4f93e253aa2 commit: e5c7543f121ad970da46fab3e8e0b4f93e253aa2 branch: 3.12 author: Brian Schubert <brianm.schub...@gmail.com> committer: iritkatriel <1055913+iritkatr...@users.noreply.github.com> date: 2024-10-30T00:54:32Z summary:
[3.12] gh-126139: Improve error message location for future statement with unknown feature (GH-126140) (#126160) (cherry picked from commit 224c370a3680132997f1e43d20a3b4ca95a060ab) files: A Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst M Lib/test/test_exceptions.py M Lib/test/test_future_stmt/test_future.py M Python/future.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index c5f4b892efb50f..72c86eecae2539 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -316,8 +316,8 @@ def baz(): check('def f():\n global x\n nonlocal x', 2, 3) # Errors thrown by future.c - check('from __future__ import doesnt_exist', 1, 1) - check('from __future__ import braces', 1, 1) + check('from __future__ import doesnt_exist', 1, 24) + check('from __future__ import braces', 1, 24) check('x=1\nfrom __future__ import division', 2, 1) check('foo(1=2)', 1, 5) check('def f():\n x, y: int', 2, 3) diff --git a/Lib/test/test_future_stmt/test_future.py b/Lib/test/test_future_stmt/test_future.py index 5a85e08e19b7b6..a06e0510f12dde 100644 --- a/Lib/test/test_future_stmt/test_future.py +++ b/Lib/test/test_future_stmt/test_future.py @@ -55,7 +55,7 @@ def test_future_multiple_features(self): def test_badfuture3(self): with self.assertRaises(SyntaxError) as cm: from test.test_future_stmt import badsyntax_future3 - self.check_syntax_error(cm.exception, "badsyntax_future3", 3) + self.check_syntax_error(cm.exception, "badsyntax_future3", 3, 24) def test_badfuture4(self): with self.assertRaises(SyntaxError) as cm: @@ -80,12 +80,12 @@ def test_badfuture7(self): def test_badfuture8(self): with self.assertRaises(SyntaxError) as cm: from test.test_future_stmt import badsyntax_future8 - self.check_syntax_error(cm.exception, "badsyntax_future8", 3) + self.check_syntax_error(cm.exception, "badsyntax_future8", 3, 24) def test_badfuture9(self): with self.assertRaises(SyntaxError) as cm: from test.test_future_stmt import badsyntax_future9 - self.check_syntax_error(cm.exception, "badsyntax_future9", 3) + self.check_syntax_error(cm.exception, "badsyntax_future9", 3, 39) def test_badfuture10(self): with self.assertRaises(SyntaxError) as cm: diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst new file mode 100644 index 00000000000000..278971b46d18ab --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst @@ -0,0 +1,2 @@ +Provide better error location when attempting to use a :term:`future +statement <__future__>` with an unknown future feature. diff --git a/Python/future.c b/Python/future.c index d56f7330964684..998a7f740eac01 100644 --- a/Python/future.c +++ b/Python/future.c @@ -39,12 +39,20 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); - PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(filename, + name->lineno, + name->col_offset + 1, + name->end_lineno, + name->end_col_offset + 1); return 0; } else { PyErr_Format(PyExc_SyntaxError, UNDEFINED_FUTURE_FEATURE, feature); - PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(filename, + name->lineno, + name->col_offset + 1, + name->end_lineno, + name->end_col_offset + 1); return 0; } } _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com