diff --git a/parso/python/errors.py b/parso/python/errors.py index 0916fb3..c51a36d 100644 --- a/parso/python/errors.py +++ b/parso/python/errors.py @@ -659,7 +659,10 @@ class _StringChecks(SyntaxRule): @ErrorFinder.register_rule(value='*') class _StarCheck(SyntaxRule): - message = "named arguments must follow bare *" + if sys.version_info[:2] < (3, 15): + message = "named arguments must follow bare *" + else: + message = "named parameters must follow bare *" def is_issue(self, leaf): params = leaf.parent diff --git a/test/failing_examples.py b/test/failing_examples.py index a555fde..af0c711 100644 --- a/test/failing_examples.py +++ b/test/failing_examples.py @@ -139,7 +139,6 @@ FAILING_EXAMPLES = [ 'del *a, b', 'def x(*): pass', '(%s *d) = x' % ('a,' * 256), - '{**{} for a in [1]}', '(True,) = x', '([False], a) = x', 'def x(): from math import *', @@ -229,7 +228,6 @@ FAILING_EXAMPLES = [ 'async def foo():\n yield x\n return 1', 'async def foo():\n yield x\n return 1', - '[*[] for a in [1]]', 'async def bla():\n def x(): await bla()', 'del None', 'del True', @@ -423,3 +421,10 @@ if sys.version_info[:2] < (3, 13): FAILING_EXAMPLES += [ 'from .__future__ import whatever', ] + +if sys.version_info[:2] < (3, 15): + # these nested expression successfully evaluate with 3.15 + FAILING_EXAMPLES += [ + '[*[] for a in [1]]', + '{**{} for a in [1]}', + ] diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 0c89016..a3fdaa1 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -275,9 +275,13 @@ def test_named_argument_issues(works_not_in_py): message = works_not_in_py.get_error_message('def foo(*, **dict): pass') message = works_not_in_py.get_error_message('def foo(*): pass') if works_not_in_py.version.startswith('2'): - assert message == 'SyntaxError: invalid syntax' + wanted = 'SyntaxError: invalid syntax' else: - assert message == 'SyntaxError: named arguments must follow bare *' + if sys.version_info[:2] < (3, 15): + wanted = 'SyntaxError: named arguments must follow bare *' + else: + wanted = 'SyntaxError: named parameters must follow bare *' + assert message == wanted works_not_in_py.assert_no_error_in_passing('def foo(*, name): pass') works_not_in_py.assert_no_error_in_passing('def foo(bar, *, name=1): pass')