From 216a77dce5d3f93efddfb15617eac3cad98a9ebb Mon Sep 17 00:00:00 2001 From: Batuhan Taskaya Date: Sat, 23 May 2020 14:06:24 +0300 Subject: [PATCH 1/2] Show which keyword argument is repeated on 3.9+ --- parso/python/errors.py | 5 ++++- test/test_python_errors.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/parso/python/errors.py b/parso/python/errors.py index 6fb7f67..4fbac3d 100644 --- a/parso/python/errors.py +++ b/parso/python/errors.py @@ -817,7 +817,10 @@ class _ArglistRule(SyntaxRule): if first.type == 'name': if first.value in arg_set: # f(x=1, x=2) - self.add_issue(first, message="keyword argument repeated") + message = "keyword argument repeated" + if self._normalizer.version >= (3, 9): + message += ": {}".format(first.value) + self.add_issue(first, message=message) else: arg_set.add(first.value) else: diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 26d9e6e..b3ac55d 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -359,6 +359,10 @@ def test_continue_in_finally(): ] ) def test_forbidden_name(template, target): - assert _get_error_list(template.format(target=target), version="3")[0].message + assert _get_error_list(template.format(target=target), version="3") +def test_repeated_kwarg(): + # python 3.9+ shows which argument is repeated + assert "q" not in _get_error_list("f(q=1, q=2)", version="3.8")[0].message + assert "q" in _get_error_list("f(q=1, q=2)", version="3.9")[0].message From 27a7c16803914100e828e6d5674b2941d59fa1b9 Mon Sep 17 00:00:00 2001 From: Batuhan Taskaya Date: Sat, 23 May 2020 15:51:00 +0300 Subject: [PATCH 2/2] assert full message --- test/test_python_errors.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/test_python_errors.py b/test/test_python_errors.py index b3ac55d..cb453d5 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -364,5 +364,11 @@ def test_forbidden_name(template, target): def test_repeated_kwarg(): # python 3.9+ shows which argument is repeated - assert "q" not in _get_error_list("f(q=1, q=2)", version="3.8")[0].message - assert "q" in _get_error_list("f(q=1, q=2)", version="3.9")[0].message + assert ( + _get_error_list("f(q=1, q=2)", version="3.8")[0].message + == "SyntaxError: keyword argument repeated" + ) + assert ( + _get_error_list("f(q=1, q=2)", version="3.9")[0].message + == "SyntaxError: keyword argument repeated: q" + )