summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Byrne <31762852+mbyrnepr2@users.noreply.github.com>2023-04-10 05:10:58 +0200
committerGitHub <noreply@github.com>2023-04-09 23:10:58 -0400
commitdb17860fd61154c59f3acc13ff34b120cc5ba091 (patch)
treecb1a9248a714b46fc3427660364e29e1f4bd486d
parentb63c8a1c148e85e1ad4e645b7fffd8c8772d6201 (diff)
downloadpylint-git-db17860fd61154c59f3acc13ff34b120cc5ba091.tar.gz
Fix false positive for ``positional-only-arguments-expected`` when a function contains both a positional-only parameter that has a default value, and ``**kwargs``. (#8556)
-rw-r--r--doc/whatsnew/fragments/8555.false_positive3
-rw-r--r--pylint/checkers/method_args.py2
-rw-r--r--tests/functional/p/positional_only_arguments_expected.py18
3 files changed, 23 insertions, 0 deletions
diff --git a/doc/whatsnew/fragments/8555.false_positive b/doc/whatsnew/fragments/8555.false_positive
new file mode 100644
index 000000000..157486b39
--- /dev/null
+++ b/doc/whatsnew/fragments/8555.false_positive
@@ -0,0 +1,3 @@
+Fix false positive for ``positional-only-arguments-expected`` when a function contains both a positional-only parameter that has a default value, and ``**kwargs``.
+
+Closes #8555
diff --git a/pylint/checkers/method_args.py b/pylint/checkers/method_args.py
index 37db2fa79..59083fa25 100644
--- a/pylint/checkers/method_args.py
+++ b/pylint/checkers/method_args.py
@@ -111,6 +111,8 @@ class MethodArgsChecker(BaseChecker):
and inferred_func.args.posonlyargs
):
return
+ if inferred_func.args.kwarg:
+ return
pos_args = [a.name for a in inferred_func.args.posonlyargs]
kws = [k.arg for k in node.keywords if k.arg in pos_args]
if not kws:
diff --git a/tests/functional/p/positional_only_arguments_expected.py b/tests/functional/p/positional_only_arguments_expected.py
index 7bde59ab8..98a2d65f5 100644
--- a/tests/functional/p/positional_only_arguments_expected.py
+++ b/tests/functional/p/positional_only_arguments_expected.py
@@ -16,3 +16,21 @@ cake.nihon(1, 2, i=3) # [positional-only-arguments-expected]
cake.nihon(1, r=2, i=3) # [positional-only-arguments-expected]
cake.nihon(a=1, r=2, i=3) # [positional-only-arguments-expected]
cake.nihon(1, r=2, i=3, cheese=True) # [positional-only-arguments-expected]
+
+
+def function_with_kwargs(apple, banana="Yellow banana", /, **kwargs):
+ """
+ Calling this function with the `banana` keyword should not emit
+ `positional-only-arguments-expected` since it is added to `**kwargs`.
+
+ >>> function_with_kwargs("Red apple", banana="Green banana")
+ >>> "Red apple"
+ >>> "Yellow banana"
+ >>> {"banana": "Green banana"}
+ """
+ print(apple)
+ print(banana)
+ print(kwargs)
+
+
+function_with_kwargs("Red apple", banana="Green banana")