78 lines
1.8 KiB
Plaintext
78 lines
1.8 KiB
Plaintext
This rule raises an issue when a function is called with multiple values for the same parameter.
|
|
|
|
== Why is this an issue?
|
|
|
|
When a function is called, it accepts only one value per parameter. The Python interpreter will raise a `SyntaxError` when the same parameter is provided more than once, i.e. `myfunction(a=1, a=2)`.
|
|
|
|
Other less obvious cases will also fail at runtime by raising a `TypeError`, when:
|
|
|
|
* An argument is provided by value and position at the same time.
|
|
* An argument is provided twice, once via unpacking and once by value or position.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,python,diff-id=1,diff-type=noncompliant]
|
|
----
|
|
def func(a, b, c):
|
|
return a * b * c
|
|
|
|
func(6, 93, 31, c=62) # Noncompliant: argument "c" is duplicated
|
|
|
|
params = {'c':31}
|
|
func(6, 93, 31, **params) # Noncompliant: argument "c" is duplicated
|
|
func(6, 93, c=62, **params) # Noncompliant: argument "c" is duplicated
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,python,diff-id=1,diff-type=compliant]
|
|
----
|
|
def func(a, b, c):
|
|
return a * b * c
|
|
|
|
func(c=31, b=93, a=6) # Compliant
|
|
|
|
params = {'c':31}
|
|
func(6, 93, **params) # Compliant
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
{xxx} argument is duplicated in {function} call
|
|
|
|
|
|
=== Highlighting
|
|
|
|
Primary: the first appearance of duplicated argument
|
|
|
|
Secondary:
|
|
|
|
* location: the others argument duplicated
|
|
** message: argument also passed here
|
|
|
|
* location: the signature of the called function
|
|
* message: function definition
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== on 23 Apr 2020, 17:28:22 Nicolas Harraudeau wrote:
|
|
The following use case was removed because it is a syntax error and we don't want to target those:
|
|
|
|
----
|
|
func(c=31, b=93, c=62)
|
|
----
|
|
|
|
endif::env-github,rspecator-view[]
|