mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
[3.12] gh-126139: Improve error message location for future statement with unknown feature (GH-126140) (#126160)
(cherry picked from commit 224c370a36
)
This commit is contained in:
parent
7812dc37ab
commit
e5c7543f12
4 changed files with 17 additions and 7 deletions
|
@ -316,8 +316,8 @@ class ExceptionTests(unittest.TestCase):
|
||||||
check('def f():\n global x\n nonlocal x', 2, 3)
|
check('def f():\n global x\n nonlocal x', 2, 3)
|
||||||
|
|
||||||
# Errors thrown by future.c
|
# Errors thrown by future.c
|
||||||
check('from __future__ import doesnt_exist', 1, 1)
|
check('from __future__ import doesnt_exist', 1, 24)
|
||||||
check('from __future__ import braces', 1, 1)
|
check('from __future__ import braces', 1, 24)
|
||||||
check('x=1\nfrom __future__ import division', 2, 1)
|
check('x=1\nfrom __future__ import division', 2, 1)
|
||||||
check('foo(1=2)', 1, 5)
|
check('foo(1=2)', 1, 5)
|
||||||
check('def f():\n x, y: int', 2, 3)
|
check('def f():\n x, y: int', 2, 3)
|
||||||
|
|
|
@ -55,7 +55,7 @@ class FutureTest(unittest.TestCase):
|
||||||
def test_badfuture3(self):
|
def test_badfuture3(self):
|
||||||
with self.assertRaises(SyntaxError) as cm:
|
with self.assertRaises(SyntaxError) as cm:
|
||||||
from test.test_future_stmt import badsyntax_future3
|
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):
|
def test_badfuture4(self):
|
||||||
with self.assertRaises(SyntaxError) as cm:
|
with self.assertRaises(SyntaxError) as cm:
|
||||||
|
@ -80,12 +80,12 @@ class FutureTest(unittest.TestCase):
|
||||||
def test_badfuture8(self):
|
def test_badfuture8(self):
|
||||||
with self.assertRaises(SyntaxError) as cm:
|
with self.assertRaises(SyntaxError) as cm:
|
||||||
from test.test_future_stmt import badsyntax_future8
|
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):
|
def test_badfuture9(self):
|
||||||
with self.assertRaises(SyntaxError) as cm:
|
with self.assertRaises(SyntaxError) as cm:
|
||||||
from test.test_future_stmt import badsyntax_future9
|
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):
|
def test_badfuture10(self):
|
||||||
with self.assertRaises(SyntaxError) as cm:
|
with self.assertRaises(SyntaxError) as cm:
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Provide better error location when attempting to use a :term:`future
|
||||||
|
statement <__future__>` with an unknown future feature.
|
|
@ -39,12 +39,20 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename)
|
||||||
} else if (strcmp(feature, "braces") == 0) {
|
} else if (strcmp(feature, "braces") == 0) {
|
||||||
PyErr_SetString(PyExc_SyntaxError,
|
PyErr_SetString(PyExc_SyntaxError,
|
||||||
"not a chance");
|
"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;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
PyErr_Format(PyExc_SyntaxError,
|
PyErr_Format(PyExc_SyntaxError,
|
||||||
UNDEFINED_FUTURE_FEATURE, feature);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue