diff options
author | Mark Byrne <31762852+mbyrnepr2@users.noreply.github.com> | 2023-05-16 10:34:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-16 10:34:47 +0200 |
commit | d392ea5d8a11049a275207cf18e488bf19a57c69 (patch) | |
tree | af336aaa260297d971ed5fbf16acbb32c9dde8c2 /tests/functional/k | |
parent | 0a6c21bfab8237431c9f5198068451b243e91448 (diff) | |
download | pylint-git-d392ea5d8a11049a275207cf18e488bf19a57c69.tar.gz |
Add new checker `kwarg-superseded-by-positional-arg` and fix a false positive (#8644)
* Fix a false positive for ``redundant-keyword-arg`` when a function, with a keyword-only-parameter and ``**kwargs``, is called with a positional argument and a keyword argument where the keyword argument has the same name as the positional-only-parameter.
* Add new checker ``kwarg-superseded-by-positional-arg`` which emits a warning message for the above scenario.
Closes #8558
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'tests/functional/k')
-rw-r--r-- | tests/functional/k/kwarg_superseded_by_positional_arg.py | 39 | ||||
-rw-r--r-- | tests/functional/k/kwarg_superseded_by_positional_arg.txt | 2 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tests/functional/k/kwarg_superseded_by_positional_arg.py b/tests/functional/k/kwarg_superseded_by_positional_arg.py new file mode 100644 index 000000000..050b2066c --- /dev/null +++ b/tests/functional/k/kwarg_superseded_by_positional_arg.py @@ -0,0 +1,39 @@ +""" +The `kwarg-superseded-by-positional-arg` warning message is emitted when a function is called with +a keyword argument which shares a name with a positional-only parameter and +the function contains a keyword variadic parameter dictionary. +It may be surprising behaviour when the keyword argument is added to the +keyword variadic parameter dictionary. +""" + + +def name1(apple, /, banana="Yellow banana", **kwargs): + """ + Positional-only parameter, positional-or-keyword parameter and `**kwargs`. + + >>> name1("Red apple", apple="Green apple", banana="Green banana") + Red apple + Green banana + {"apple": "Green apple"} + """ + + print(apple) + print(banana) + print(kwargs) + + +# +1: [kwarg-superseded-by-positional-arg] +name1("Red apple", apple="Green apple", banana="Green banana") +name1("Red apple", banana="Green banana") + + +def name2(apple="Green apple", /, **kwargs): + """ + >>> name2(apple="Red apple") + Green apple + {'apple': 'Red apple'} + """ + print(apple) + print(kwargs) + +name2(apple="Red apple") # [kwarg-superseded-by-positional-arg] diff --git a/tests/functional/k/kwarg_superseded_by_positional_arg.txt b/tests/functional/k/kwarg_superseded_by_positional_arg.txt new file mode 100644 index 000000000..15d527f7a --- /dev/null +++ b/tests/functional/k/kwarg_superseded_by_positional_arg.txt @@ -0,0 +1,2 @@ +kwarg-superseded-by-positional-arg:26:0:26:62::'apple' will be included in '**kwargs' since a positional-only parameter with this name already exists:HIGH +kwarg-superseded-by-positional-arg:39:0:39:24::'apple' will be included in '**kwargs' since a positional-only parameter with this name already exists:HIGH |