Skip to content

Conversation

@KotlinIsland
Copy link
Collaborator

No description provided.

@KotlinIsland

This comment was marked as resolved.

@ekohilas
Copy link

Ah interesting, so essentially a lint rule through the type checker, with the only requirement being flagging through a decorator (assuming the type checker supports that).

Very cool!

I assume configuring basedpyright to apply this to all functions (both user defined and library defined) would be quite simple?

@KotlinIsland
Copy link
Collaborator Author

I assume configuring basedpyright to apply this to all functions (both user defined and library defined) would be quite simple?

yes it would. i wonder if it would just be better that way, no need for the decorator. what do you think?

@KotlinIsland
Copy link
Collaborator Author

KotlinIsland commented Sep 15, 2025

i was also thinking of an argument label mechanism like:

@has_argument_labels
def foo(a: Labeled[int, "b"]): ...

foo(b=1)

any thoughts?

@ekohilas
Copy link

i was also thinking of an argument label mechanism like:

@has_argument_labels
def foo(a: Labeled[int, "b"]): ...

foo(b=1)

any thoughts?

Ah interesting! So this would be like swift's parameter/argument labelling?

I was discussing this with @ncoghlan, and we were finding it difficult to come up with a use case for this other than the ones in the example. Maybe you could help us come up with some more usefuls cases for this?

@ekohilas
Copy link

yes it would. i wonder if it would just be better that way, no need for the decorator. what do you think?

Personally I'd prefer that, but I could imagine that for most it would be a matter of preference?

@KotlinIsland
Copy link
Collaborator Author

KotlinIsland commented Sep 17, 2025

Maybe you could help us come up with some more usefuls cases for this?

i don't know if this feature is super important, it's just a little syntax sugar for reasssigning in the body. use case in my opinion is when a label makes the call site more clear, and the name makes the use site more clear, i can see some examples online like:

def set_age(for person: str, to age: int):
    ...
    print(f"{person} is now {age}") # more clear than `f"{for} is now {to}"`
    
set_age(for="john", to=40) # more clear/less clunky than `set_age(person="john", age="40")`
def send_message(from sender: str, to recipient: str, message: str): ...
send_message(from: "UserA", to: "UserB", message: "Hello!")

Personally I'd prefer that, but I could imagine that for most it would be a matter of preference?

i'll update this change to enforce it everywhere except index-only parameters, then you can eat it :)

@KotlinIsland KotlinIsland force-pushed the arguments_match_parameter_names branch from f625b30 to 2bc3e1d Compare September 23, 2025 10:04
@KotlinIsland KotlinIsland force-pushed the arguments_match_parameter_names branch from 2bc3e1d to 2d19ba9 Compare September 23, 2025 10:05
@KotlinIsland KotlinIsland changed the title support annotations.arguments_match_parameter_names add new rule to prefer keyword arguments Sep 23, 2025
@KotlinIsland
Copy link
Collaborator Author

KotlinIsland commented Sep 23, 2025

@ekohilas try this
uv pip install git+https://github.com/detachhead/basedpyright@arguments_match_parameter_names

def rectangle(height: int, width: int): ...

height = 5
width = 3
length = 7

rectangle(
    height,
    length,  # warning: Positional argument "length" does not match parameter name "width"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
)

@github-actions
Copy link
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

more-itertools (https://github.com/more-itertools/more-itertools)
+   .../projects/more-itertools/more_itertools/more.py:199:33 - warning: Positional argument "y" does not match parameter name "x"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:207:45 - warning: Positional argument "dl_mul" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:207:53 - warning: Positional argument "p" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:207:56 - warning: Positional argument "q" does not match parameter name "iter2"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:229:43 - warning: Positional argument "iterable" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:236:24 - warning: Positional argument "chunk" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:285:23 - warning: Positional argument "iterable" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:285:33 - warning: Positional argument "Sequence" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:288:20 - warning: Positional argument "iterable" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:289:34 - warning: Positional argument "iterable" does not match parameter name "sequence"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:377:25 - warning: Positional argument "iterable" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:435:41 - warning: Positional argument "items" does not match parameter name "sequence"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:462:25 - warning: Positional argument "start" does not match parameter name "arg1"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:462:32 - warning: Positional argument "stop" does not match parameter name "arg2"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:462:43 - warning: Positional argument "maxsize" does not match parameter name "arg2"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:470:23 - warning: Positional argument "index" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:470:30 - warning: Positional argument "slice" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:505:12 - warning: Positional argument "func" does not match parameter name "wrapped"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:508:14 - warning: Positional argument "gen" does not match parameter name "i"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:536:40 - warning: Positional argument "iterable" does not match parameter name "iter1"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:618:21 - warning: Positional argument "iterable" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:683:13 - warning: Positional argument "ValueError" does not match parameter name "exception"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:689:13 - warning: Positional argument "ValueError" does not match parameter name "exception"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:693:15 - warning: Positional argument "iterable" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:696:24 - warning: Positional argument "it" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:696:28 - warning: Positional argument "n" does not match parameter name "stop"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:701:19 - warning: Positional argument "sent" does not match parameter name "item_count"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:757:25 - warning: Positional argument "A" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:768:38 - warning: Positional argument "i" does not match parameter name "stop"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:782:39 - warning: Positional argument "tail" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:786:25 - warning: Positional argument "head" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:825:36 - warning: Positional argument "list" does not match parameter name "default_factory"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:828:38 - warning: Positional argument "item" does not match parameter name "value"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:828:52 - warning: Positional argument "item" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:830:32 - warning: Positional argument "item" does not match parameter name "value"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:833:38 - warning: Positional argument "v" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:840:16 - warning: Positional argument "items" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:849:30 - warning: Positional argument "items" does not match parameter name "A"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:853:51 - warning: Positional argument "indices" does not match parameter name "A"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:914:26 - warning: Positional argument "xs" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:916:22 - warning: Positional argument "xs" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:917:13 - warning: Positional argument "all" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:917:22 - warning: Positional argument "map" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/more-itertools/more_itertools/more.py:917:34 - warning: Positional argument "is_not" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)

... (truncated 572 lines) ...

paroxython (https://github.com/laowantong/paroxython)
+   .../projects/paroxython/paroxython/__init__.py:55:31 - warning: Positional argument "cell" does not match parameter name "source"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/assess_costs.py:109:24 - warning: Positional argument "edges" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/assess_costs.py:130:23 - warning: Positional argument "result" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli.py:35:44 - warning: Positional argument "__doc__" does not match parameter name "string"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli.py:38:20 - warning: Positional argument "doc" does not match parameter name "message"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:43:31 - warning: Positional argument "couple_to_string" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:43:56 - warning: Positional argument "label_spans" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:48:49 - warning: Positional argument "taxa" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:49:31 - warning: Positional argument "couple_to_string" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:57:22 - warning: Positional argument "result" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:65:24 - warning: Positional argument "e" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/cli_tag.py:67:23 - warning: Positional argument "source" does not match parameter name "_x"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:124:87 - warning: Positional argument "rex" does not match parameter name "pattern"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:124:92 - warning: Positional argument "s" does not match parameter name "string"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:133:62 - warning: Positional argument "columns" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:144:24 - warning: Positional argument "create_main_table" does not match parameter name "sql"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:177:32 - warning: Positional argument "label_name" does not match parameter name "element"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:180:70 - warning: Positional argument "dict" does not match parameter name "default_factory"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:182:43 - warning: Positional argument "query" does not match parameter name "sql"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:190:34 - warning: Positional argument "spans" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:195:73 - warning: Positional argument "columns" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:209:48 - warning: Positional argument "span" does not match parameter name "couple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:211:28 - warning: Positional argument "update_query" does not match parameter name "sql"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:211:42 - warning: Positional argument "rows" does not match parameter name "parameters"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:221:37 - warning: Positional argument "str" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:221:42 - warning: Positional argument "row" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:222:27 - warning: Positional argument "len" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:222:37 - warning: Positional argument "column" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:225:57 - warning: Positional argument "s" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:225:79 - warning: Positional argument "widths" does not match parameter name "iter1"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:225:87 - warning: Positional argument "row" does not match parameter name "iter2"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/derived_labels_db.py:227:26 - warning: Positional argument "result" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:126:43 - warning: Positional argument "match" does not match parameter name "function"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:138:45 - warning: Positional argument "match" does not match parameter name "function"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:169:34 - warning: Positional argument "taxon" does not match parameter name "element"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:189:46 - warning: Positional argument "taxon" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:191:33 - warning: Positional argument "programs" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:230:29 - warning: Positional argument "criterion" does not match parameter name "object"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:233:39 - warning: Positional argument "program_set" does not match parameter name "programs"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:234:34 - warning: Positional argument "taxon_set" does not match parameter name "taxa"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:242:54 - warning: Positional argument "criteria" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:244:43 - warning: Positional argument "program_bag" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/paroxython/paroxython/filter_programs.py:246:43 - warning: Positional argument "program_bag" does not match parameter name "iterable"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)

... (truncated 182 lines) ...

bidict (https://github.com/jab/bidict)
+   .../projects/bidict/bidict/__init__.py:88:20 - warning: Positional argument "_obj" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:109:45 - warning: Positional argument "i" does not match parameter name "cls"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:109:48 - warning: Positional argument "Reversible" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:134:20 - warning: Positional argument "cls" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:141:38 - warning: Positional argument "cls" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:141:43 - warning: Positional argument "k" does not match parameter name "name"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:141:46 - warning: Positional argument "MISSING" does not match parameter name "default"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:147:77 - warning: Positional argument "diff" does not match parameter name "dict"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:184:50 - warning: Positional argument "self" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:188:27 - warning: Positional argument "self" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:200:36 - warning: Positional argument "self" does not match parameter name "o"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:253:68 - warning: Positional argument "self" does not match parameter name "mapping"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:296:23 - warning: Positional argument "other" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:296:30 - warning: Positional argument "Mapping" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:307:27 - warning: Positional argument "other" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:307:34 - warning: Positional argument "Mapping" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:307:50 - warning: Positional argument "self" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:307:63 - warning: Positional argument "other" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:309:24 - warning: Positional argument "eq" does not match parameter name "func"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:330:41 - warning: Positional argument "MISSING" does not match parameter name "default"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:331:36 - warning: Positional argument "val" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:331:41 - warning: Positional argument "MISSING" does not match parameter name "default"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:380:18 - warning: Positional argument "newkey" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:380:26 - warning: Positional argument "newval" does not match parameter name "value"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:381:18 - warning: Positional argument "newval" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:381:26 - warning: Positional argument "newkey" does not match parameter name "value"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:391:22 - warning: Positional argument "oldkey" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:392:22 - warning: Positional argument "oldval" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:402:22 - warning: Positional argument "oldval" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:412:22 - warning: Positional argument "oldkey" does not match parameter name "key"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:430:27 - warning: Positional argument "arg" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:440:47 - warning: Positional argument "arg" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:440:52 - warning: Positional argument "BidictBase" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:441:29 - warning: Positional argument "arg" does not match parameter name "other"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:446:36 - warning: Positional argument "arg" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:446:58 - warning: Positional argument "arg" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:446:69 - warning: Positional argument "kw" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:446:79 - warning: Positional argument "self" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:449:29 - warning: Positional argument "tmp" does not match parameter name "other"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:464:47 - warning: Positional argument "unwrites" does not match parameter name "sequence"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:468:23 - warning: Positional argument "key" does not match parameter name "newkey"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:468:28 - warning: Positional argument "val" does not match parameter name "newval"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:480:49 - warning: Positional argument "self" does not match parameter name "other"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:497:27 - warning: Positional argument "other" does not match parameter name "m"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:500:43 - warning: Positional argument "other" does not match parameter name "obj"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:500:50 - warning: Positional argument "BidictBase" does not match parameter name "class_or_tuple"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)
+   .../projects/bidict/bidict/_base.py:501:27 - warning: Positional argument "inv" does not match parameter name "m"; pass as a keyword argument to avoid confusion (reportPositionalArgumentNameMismatch)

... (truncated 71 lines) ...

aioredis (https://github.com/aio-libs/aioredis)

... (truncated 5975 lines) ...```

@KotlinIsland
Copy link
Collaborator Author

some considerations:

  • don't report for single arg functions
  • option to not report when the adjacent arguments are disjoint:
    def f(a: int, b: str): ...
    f(1, "a")  # okay
    def f2(a: object, b: object): ...
    f2(1, "a")  # not okay
  • special case some stdlib names e.g. pow
  • option to enforce when using literals:
    def f(a: int, b: str): ...
    f(1, "a")  # not okay, what are theese values?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants