Skip to content

Commit

Permalink
Fix a false negative for duplicate-argument-name by including ``p…
Browse files Browse the repository at this point in the history
…ositional-only``, ``*args`` and ``**kwargs`` arguments in the check.

Closes pylint-dev#9669
  • Loading branch information
mbyrnepr2 committed May 22, 2024
1 parent d3b1ef1 commit 1ad19d4
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 17 deletions.
3 changes: 3 additions & 0 deletions doc/whatsnew/fragments/9669.false_negative
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix a false negative for ``duplicate-argument-name`` by including ``positional-only``, ``*args`` and ``**kwargs`` arguments in the check.

Closes #9669
6 changes: 3 additions & 3 deletions pylint/checkers/base/basic_error_checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ class BasicErrorChecker(_BasicChecker):
"pre-decrement operator -- and ++, which doesn't exist in Python.",
),
"E0108": (
"Duplicate argument name %s in function definition",
"Duplicate argument name %r in function definition",
"duplicate-argument-name",
"Duplicate argument names in function definitions are syntax errors.",
),
Expand Down Expand Up @@ -285,8 +285,8 @@ def visit_functiondef(self, node: nodes.FunctionDef) -> None:
self.add_message("return-in-init", node=node)
# Check for duplicate names by clustering args with same name for detailed report
arg_clusters = {}
arguments: Iterator[Any] = filter(None, [node.args.args, node.args.kwonlyargs])
for arg in itertools.chain.from_iterable(arguments):
arguments: Iterator[Any] = node.args.arguments
for arg in arguments:
if arg.name in arg_clusters:
self.add_message(
"duplicate-argument-name",
Expand Down
17 changes: 13 additions & 4 deletions tests/functional/d/duplicate/duplicate_argument_name.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
"""Check for duplicate function arguments."""

# pylint: disable=missing-docstring, line-too-long


def foo1(_, _): # [duplicate-argument-name]
"""Function with duplicate argument name."""
...

def foo2(_abc, *, _abc): # [duplicate-argument-name]
"""Function with duplicate argument name."""
...

def foo3(_, _=3): # [duplicate-argument-name]
"""Function with duplicate argument name."""
...

def foo4(_, *, _): # [duplicate-argument-name]
"""Function with duplicate argument name."""
...

def foo5(_, *_, _=3): # [duplicate-argument-name, duplicate-argument-name]
...

# +1: [duplicate-argument-name, duplicate-argument-name, duplicate-argument-name, duplicate-argument-name]
def foo6(_, /, _, *_, _="_", **_):
...
14 changes: 10 additions & 4 deletions tests/functional/d/duplicate/duplicate_argument_name.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
duplicate-argument-name:4:12:4:13:foo1:Duplicate argument name _ in function definition:HIGH
duplicate-argument-name:7:18:7:22:foo2:Duplicate argument name _abc in function definition:HIGH
duplicate-argument-name:10:12:10:13:foo3:Duplicate argument name _ in function definition:HIGH
duplicate-argument-name:13:15:13:16:foo4:Duplicate argument name _ in function definition:HIGH
duplicate-argument-name:6:12:6:13:foo1:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:9:18:9:22:foo2:Duplicate argument name '_abc' in function definition:HIGH
duplicate-argument-name:12:12:12:13:foo3:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:15:15:15:16:foo4:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:18:13:18:14:foo5:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:18:16:18:17:foo5:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:22:15:22:16:foo6:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:22:19:22:20:foo6:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:22:22:22:23:foo6:Duplicate argument name '_' in function definition:HIGH
duplicate-argument-name:22:31:22:32:foo6:Duplicate argument name '_' in function definition:HIGH
5 changes: 0 additions & 5 deletions tests/functional/d/duplicate/duplicate_argument_name_py3.py

This file was deleted.

This file was deleted.

0 comments on commit 1ad19d4

Please sign in to comment.