mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-24 13:33:50 +00:00
Add a note to diagnostics why the rule is enabled (#17854)
This commit is contained in:
parent
9085f18353
commit
b2de749c32
86 changed files with 184 additions and 3 deletions
|
@ -150,6 +150,7 @@ fn config_override_python_version() -> anyhow::Result<()> {
|
||||||
5 | print(sys.last_exc)
|
5 | print(sys.last_exc)
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-attribute` is enabled by default
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -284,6 +285,7 @@ fn cli_arguments_are_relative_to_the_current_directory() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | stat = add(10, 15)
|
4 | stat = add(10, 15)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -384,6 +386,7 @@ fn configuration_rule_severity() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | for a in range(0, int(y)):
|
4 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` is enabled by default
|
||||||
|
|
||||||
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
||||||
--> test.py:7:7
|
--> test.py:7:7
|
||||||
|
@ -393,6 +396,7 @@ fn configuration_rule_severity() -> anyhow::Result<()> {
|
||||||
7 | print(x) # possibly-unresolved-reference
|
7 | print(x) # possibly-unresolved-reference
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -420,6 +424,7 @@ fn configuration_rule_severity() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | for a in range(0, int(y)):
|
4 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` was selected in the configuration file
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -460,6 +465,7 @@ fn cli_rule_severity() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | y = 4 / 0
|
4 | y = 4 / 0
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
error: lint:division-by-zero: Cannot divide object of type `Literal[4]` by zero
|
error: lint:division-by-zero: Cannot divide object of type `Literal[4]` by zero
|
||||||
--> test.py:4:5
|
--> test.py:4:5
|
||||||
|
@ -471,6 +477,7 @@ fn cli_rule_severity() -> anyhow::Result<()> {
|
||||||
5 |
|
5 |
|
||||||
6 | for a in range(0, int(y)):
|
6 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` is enabled by default
|
||||||
|
|
||||||
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
||||||
--> test.py:9:7
|
--> test.py:9:7
|
||||||
|
@ -480,6 +487,7 @@ fn cli_rule_severity() -> anyhow::Result<()> {
|
||||||
9 | print(x) # possibly-unresolved-reference
|
9 | print(x) # possibly-unresolved-reference
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 3 diagnostics
|
Found 3 diagnostics
|
||||||
|
|
||||||
|
@ -507,6 +515,7 @@ fn cli_rule_severity() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | y = 4 / 0
|
4 | y = 4 / 0
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` was selected on the command line
|
||||||
|
|
||||||
warning: lint:division-by-zero: Cannot divide object of type `Literal[4]` by zero
|
warning: lint:division-by-zero: Cannot divide object of type `Literal[4]` by zero
|
||||||
--> test.py:4:5
|
--> test.py:4:5
|
||||||
|
@ -518,6 +527,7 @@ fn cli_rule_severity() -> anyhow::Result<()> {
|
||||||
5 |
|
5 |
|
||||||
6 | for a in range(0, int(y)):
|
6 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` was selected on the command line
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -558,6 +568,7 @@ fn cli_rule_severity_precedence() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | for a in range(0, int(y)):
|
4 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` is enabled by default
|
||||||
|
|
||||||
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
||||||
--> test.py:7:7
|
--> test.py:7:7
|
||||||
|
@ -567,6 +578,7 @@ fn cli_rule_severity_precedence() -> anyhow::Result<()> {
|
||||||
7 | print(x) # possibly-unresolved-reference
|
7 | print(x) # possibly-unresolved-reference
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -595,6 +607,7 @@ fn cli_rule_severity_precedence() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | for a in range(0, int(y)):
|
4 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` was selected on the command line
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -672,6 +685,7 @@ fn exit_code_only_warnings() -> anyhow::Result<()> {
|
||||||
1 | print(x) # [unresolved-reference]
|
1 | print(x) # [unresolved-reference]
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -755,6 +769,7 @@ fn exit_code_no_errors_but_error_on_warning_is_true() -> anyhow::Result<()> {
|
||||||
1 | print(x) # [unresolved-reference]
|
1 | print(x) # [unresolved-reference]
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -787,6 +802,7 @@ fn exit_code_no_errors_but_error_on_warning_is_enabled_in_configuration() -> any
|
||||||
1 | print(x) # [unresolved-reference]
|
1 | print(x) # [unresolved-reference]
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 1 diagnostic
|
Found 1 diagnostic
|
||||||
|
|
||||||
|
@ -817,6 +833,7 @@ fn exit_code_both_warnings_and_errors() -> anyhow::Result<()> {
|
||||||
| ^
|
| ^
|
||||||
3 | print(4[1]) # [non-subscriptable]
|
3 | print(4[1]) # [non-subscriptable]
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-reference` is enabled by default
|
||||||
|
|
||||||
error: lint:non-subscriptable: Cannot subscript object of type `Literal[4]` with no `__getitem__` method
|
error: lint:non-subscriptable: Cannot subscript object of type `Literal[4]` with no `__getitem__` method
|
||||||
--> test.py:3:7
|
--> test.py:3:7
|
||||||
|
@ -825,6 +842,7 @@ fn exit_code_both_warnings_and_errors() -> anyhow::Result<()> {
|
||||||
3 | print(4[1]) # [non-subscriptable]
|
3 | print(4[1]) # [non-subscriptable]
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:non-subscriptable` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -855,6 +873,7 @@ fn exit_code_both_warnings_and_errors_and_error_on_warning_is_true() -> anyhow::
|
||||||
| ^
|
| ^
|
||||||
3 | print(4[1]) # [non-subscriptable]
|
3 | print(4[1]) # [non-subscriptable]
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-reference` is enabled by default
|
||||||
|
|
||||||
error: lint:non-subscriptable: Cannot subscript object of type `Literal[4]` with no `__getitem__` method
|
error: lint:non-subscriptable: Cannot subscript object of type `Literal[4]` with no `__getitem__` method
|
||||||
--> test.py:3:7
|
--> test.py:3:7
|
||||||
|
@ -863,6 +882,7 @@ fn exit_code_both_warnings_and_errors_and_error_on_warning_is_true() -> anyhow::
|
||||||
3 | print(4[1]) # [non-subscriptable]
|
3 | print(4[1]) # [non-subscriptable]
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:non-subscriptable` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -893,6 +913,7 @@ fn exit_code_exit_zero_is_true() -> anyhow::Result<()> {
|
||||||
| ^
|
| ^
|
||||||
3 | print(4[1]) # [non-subscriptable]
|
3 | print(4[1]) # [non-subscriptable]
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-reference` is enabled by default
|
||||||
|
|
||||||
error: lint:non-subscriptable: Cannot subscript object of type `Literal[4]` with no `__getitem__` method
|
error: lint:non-subscriptable: Cannot subscript object of type `Literal[4]` with no `__getitem__` method
|
||||||
--> test.py:3:7
|
--> test.py:3:7
|
||||||
|
@ -901,6 +922,7 @@ fn exit_code_exit_zero_is_true() -> anyhow::Result<()> {
|
||||||
3 | print(4[1]) # [non-subscriptable]
|
3 | print(4[1]) # [non-subscriptable]
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:non-subscriptable` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -954,6 +976,7 @@ fn user_configuration() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | for a in range(0, int(y)):
|
4 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` was selected in the configuration file
|
||||||
|
|
||||||
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
warning: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
||||||
--> main.py:7:7
|
--> main.py:7:7
|
||||||
|
@ -963,6 +986,7 @@ fn user_configuration() -> anyhow::Result<()> {
|
||||||
7 | print(x)
|
7 | print(x)
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unresolved-reference` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -996,6 +1020,7 @@ fn user_configuration() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | for a in range(0, int(y)):
|
4 | for a in range(0, int(y)):
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` was selected in the configuration file
|
||||||
|
|
||||||
error: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
error: lint:possibly-unresolved-reference: Name `x` used when possibly not defined
|
||||||
--> main.py:7:7
|
--> main.py:7:7
|
||||||
|
@ -1005,6 +1030,7 @@ fn user_configuration() -> anyhow::Result<()> {
|
||||||
7 | print(x)
|
7 | print(x)
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unresolved-reference` was selected in the configuration file
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
@ -1052,6 +1078,7 @@ fn check_specific_paths() -> anyhow::Result<()> {
|
||||||
2 | y = 4 / 0 # error: division-by-zero
|
2 | y = 4 / 0 # error: division-by-zero
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:division-by-zero` is enabled by default
|
||||||
|
|
||||||
error: lint:unresolved-import: Cannot resolve imported module `main2`
|
error: lint:unresolved-import: Cannot resolve imported module `main2`
|
||||||
--> project/other.py:2:6
|
--> project/other.py:2:6
|
||||||
|
@ -1061,6 +1088,7 @@ fn check_specific_paths() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | print(z)
|
4 | print(z)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
||||||
--> project/tests/test_main.py:2:8
|
--> project/tests/test_main.py:2:8
|
||||||
|
@ -1068,6 +1096,7 @@ fn check_specific_paths() -> anyhow::Result<()> {
|
||||||
2 | import does_not_exist # error: unresolved-import
|
2 | import does_not_exist # error: unresolved-import
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
Found 3 diagnostics
|
Found 3 diagnostics
|
||||||
|
|
||||||
|
@ -1091,6 +1120,7 @@ fn check_specific_paths() -> anyhow::Result<()> {
|
||||||
3 |
|
3 |
|
||||||
4 | print(z)
|
4 | print(z)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
||||||
--> project/tests/test_main.py:2:8
|
--> project/tests/test_main.py:2:8
|
||||||
|
@ -1098,6 +1128,7 @@ fn check_specific_paths() -> anyhow::Result<()> {
|
||||||
2 | import does_not_exist # error: unresolved-import
|
2 | import does_not_exist # error: unresolved-import
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
Found 2 diagnostics
|
Found 2 diagnostics
|
||||||
|
|
||||||
|
|
|
@ -35,5 +35,6 @@ error: lint:invalid-assignment: Invalid assignment to data descriptor attribute
|
||||||
11 | instance.attr = 1 # error: [invalid-assignment]
|
11 | instance.attr = 1 # error: [invalid-assignment]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ error: lint:invalid-assignment: Invalid assignment to data descriptor attribute
|
||||||
12 | instance.attr = "wrong" # error: [invalid-assignment]
|
12 | instance.attr = "wrong" # error: [invalid-assignment]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,6 +36,7 @@ error: lint:invalid-assignment: Object of type `Literal["wrong"]` is not assigna
|
||||||
7 |
|
7 |
|
||||||
8 | C.attr = 1 # fine
|
8 | C.attr = 1 # fine
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -47,5 +48,6 @@ error: lint:invalid-assignment: Object of type `Literal["wrong"]` is not assigna
|
||||||
9 | C.attr = "wrong" # error: [invalid-assignment]
|
9 | C.attr = "wrong" # error: [invalid-assignment]
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,6 +36,7 @@ warning: lint:possibly-unbound-attribute: Attribute `attr` on type `Literal[C]`
|
||||||
7 |
|
7 |
|
||||||
8 | instance = C()
|
8 | instance = C()
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unbound-attribute` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -47,5 +48,6 @@ warning: lint:possibly-unbound-attribute: Attribute `attr` on type `C` is possib
|
||||||
9 | instance.attr = 1 # error: [possibly-unbound-attribute]
|
9 | instance.attr = 1 # error: [possibly-unbound-attribute]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unbound-attribute` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,6 +36,7 @@ error: lint:invalid-assignment: Object of type `Literal["wrong"]` is not assigna
|
||||||
8 |
|
8 |
|
||||||
9 | C.attr = 1 # error: [invalid-attribute-access]
|
9 | C.attr = 1 # error: [invalid-attribute-access]
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -48,5 +49,6 @@ error: lint:invalid-attribute-access: Cannot assign to instance attribute `attr`
|
||||||
9 | C.attr = 1 # error: [invalid-attribute-access]
|
9 | C.attr = 1 # error: [invalid-attribute-access]
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-attribute-access` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -46,5 +46,6 @@ error: lint:invalid-assignment: Object of type `Literal[1]` is not assignable to
|
||||||
12 |
|
12 |
|
||||||
13 | class C2:
|
13 | class C2:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -33,6 +33,7 @@ error: lint:unresolved-attribute: Unresolved attribute `non_existent` on type `L
|
||||||
4 |
|
4 |
|
||||||
5 | instance = C()
|
5 | instance = C()
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-attribute` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -44,5 +45,6 @@ error: lint:unresolved-attribute: Unresolved attribute `non_existent` on type `C
|
||||||
6 | instance.non_existent = 1 # error: [unresolved-attribute]
|
6 | instance.non_existent = 1 # error: [unresolved-attribute]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-attribute` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,6 +36,7 @@ error: lint:invalid-assignment: Object of type `Literal["wrong"]` is not assigna
|
||||||
8 |
|
8 |
|
||||||
9 | instance = C()
|
9 | instance = C()
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -47,5 +48,6 @@ error: lint:invalid-attribute-access: Cannot assign to ClassVar `attr` from an i
|
||||||
10 | instance.attr = 1 # error: [invalid-attribute-access]
|
10 | instance.attr = 1 # error: [invalid-attribute-access]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-attribute-access` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -26,5 +26,6 @@ error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
||||||
2 | from does_not_exist import foo, bar, baz
|
2 | from does_not_exist import foo, bar, baz
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -24,5 +24,6 @@ error: lint:unresolved-import: Cannot resolve imported module `zqzqzqzqzqzqzq`
|
||||||
1 | import zqzqzqzqzqzqzq # error: [unresolved-import] "Cannot resolve imported module `zqzqzqzqzqzqzq`"
|
1 | import zqzqzqzqzqzqzq # error: [unresolved-import] "Cannot resolve imported module `zqzqzqzqzqzqzq`"
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,6 +36,7 @@ error: lint:unresolved-import: Cannot resolve imported module `a.foo`
|
||||||
3 |
|
3 |
|
||||||
4 | # Topmost component unresolvable:
|
4 | # Topmost component unresolvable:
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -47,5 +48,6 @@ error: lint:unresolved-import: Cannot resolve imported module `b.foo`
|
||||||
5 | import b.foo # error: [unresolved-import] "Cannot resolve imported module `b.foo`"
|
5 | import b.foo # error: [unresolved-import] "Cannot resolve imported module `b.foo`"
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -38,6 +38,7 @@ error: lint:not-iterable: Object of type `Iterable` is not iterable
|
||||||
|
|
|
|
||||||
info: It has no `__iter__` method and its `__getitem__` method has an incorrect signature for the old-style iteration protocol
|
info: It has no `__iter__` method and its `__getitem__` method has an incorrect signature for the old-style iteration protocol
|
||||||
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -29,5 +29,6 @@ error: lint:not-iterable: Object of type `Literal[123]` is not iterable
|
||||||
3 | pass
|
3 | pass
|
||||||
|
|
|
|
||||||
info: It doesn't have an `__iter__` method or a `__getitem__` method
|
info: It doesn't have an `__iter__` method or a `__getitem__` method
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -34,5 +34,6 @@ error: lint:not-iterable: Object of type `NotIterable` is not iterable
|
||||||
7 | pass
|
7 | pass
|
||||||
|
|
|
|
||||||
info: Its `__iter__` attribute has type `None`, which is not callable
|
info: Its `__iter__` attribute has type `None`, which is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -34,6 +34,7 @@ error: lint:not-iterable: Object of type `Bad` is not iterable
|
||||||
8 | reveal_type(x) # revealed: Unknown
|
8 | reveal_type(x) # revealed: Unknown
|
||||||
|
|
|
|
||||||
info: It has no `__iter__` method and its `__getitem__` attribute has type `None`, which is not callable
|
info: It has no `__iter__` method and its `__getitem__` attribute has type `None`, which is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ error: lint:not-iterable: Object of type `Iterable1` may not be iterable
|
||||||
|
|
|
|
||||||
info: It has no `__iter__` method and its `__getitem__` attribute is invalid
|
info: It has no `__iter__` method and its `__getitem__` attribute is invalid
|
||||||
info: `__getitem__` has type `CustomCallable`, which is not callable
|
info: `__getitem__` has type `CustomCallable`, which is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -86,6 +87,7 @@ error: lint:not-iterable: Object of type `Iterable2` may not be iterable
|
||||||
|
|
|
|
||||||
info: It has no `__iter__` method and its `__getitem__` attribute is invalid
|
info: It has no `__iter__` method and its `__getitem__` attribute is invalid
|
||||||
info: `__getitem__` has type `(bound method Iterable2.__getitem__(key: int) -> int) | None`, which is not callable
|
info: `__getitem__` has type `(bound method Iterable2.__getitem__(key: int) -> int) | None`, which is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ error: lint:not-iterable: Object of type `Iterable1` may not be iterable
|
||||||
|
|
|
|
||||||
info: It has no `__iter__` method and its `__getitem__` attribute is invalid
|
info: It has no `__iter__` method and its `__getitem__` attribute is invalid
|
||||||
info: `__getitem__` has type `(bound method Iterable1.__getitem__(item: int) -> str) | None`, which is not callable
|
info: `__getitem__` has type `(bound method Iterable1.__getitem__(item: int) -> str) | None`, which is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -82,6 +83,7 @@ error: lint:not-iterable: Object of type `Iterable2` may not be iterable
|
||||||
|
|
|
|
||||||
info: It has no `__iter__` method and its `__getitem__` method (with type `(bound method Iterable2.__getitem__(item: int) -> str) | (bound method Iterable2.__getitem__(item: str) -> int)`) may have an incorrect signature for the old-style iteration protocol
|
info: It has no `__iter__` method and its `__getitem__` method (with type `(bound method Iterable2.__getitem__(item: int) -> str) | (bound method Iterable2.__getitem__(item: str) -> int)`) may have an incorrect signature for the old-style iteration protocol
|
||||||
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,7 @@ error: lint:not-iterable: Object of type `Iterable1` may not be iterable
|
||||||
info: Its `__iter__` method may have an invalid signature
|
info: Its `__iter__` method may have an invalid signature
|
||||||
info: Type of `__iter__` is `(bound method Iterable1.__iter__() -> Iterator) | (bound method Iterable1.__iter__(invalid_extra_arg) -> Iterator)`
|
info: Type of `__iter__` is `(bound method Iterable1.__iter__() -> Iterator) | (bound method Iterable1.__iter__(invalid_extra_arg) -> Iterator)`
|
||||||
info: Expected signature for `__iter__` is `def __iter__(self): ...`
|
info: Expected signature for `__iter__` is `def __iter__(self): ...`
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -86,6 +87,7 @@ error: lint:not-iterable: Object of type `Iterable2` may not be iterable
|
||||||
30 | reveal_type(x) # revealed: int | Unknown
|
30 | reveal_type(x) # revealed: int | Unknown
|
||||||
|
|
|
|
||||||
info: Its `__iter__` attribute (with type `(bound method Iterable2.__iter__() -> Iterator) | None`) may not be callable
|
info: Its `__iter__` attribute (with type `(bound method Iterable2.__iter__() -> Iterator) | None`) may not be callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ error: lint:not-iterable: Object of type `Iterable1` may not be iterable
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method returns an object of type `Iterator1`, which may have an invalid `__next__` method
|
info: Its `__iter__` method returns an object of type `Iterator1`, which may have an invalid `__next__` method
|
||||||
info: Expected signature for `__next__` is `def __next__(self): ...`)
|
info: Expected signature for `__next__` is `def __next__(self): ...`)
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -89,6 +90,7 @@ error: lint:not-iterable: Object of type `Iterable2` may not be iterable
|
||||||
34 | reveal_type(y) # revealed: int | Unknown
|
34 | reveal_type(y) # revealed: int | Unknown
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method returns an object of type `Iterator2`, which has a `__next__` attribute that may not be callable
|
info: Its `__iter__` method returns an object of type `Iterator2`, which has a `__next__` attribute that may not be callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ error: lint:not-iterable: Object of type `Iterable` may not be iterable
|
||||||
|
|
|
|
||||||
info: It may not have an `__iter__` method and its `__getitem__` method has an incorrect signature for the old-style iteration protocol
|
info: It may not have an `__iter__` method and its `__getitem__` method has an incorrect signature for the old-style iteration protocol
|
||||||
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ error: lint:not-iterable: Object of type `Iterable1` may not be iterable
|
||||||
33 | reveal_type(x) # revealed: bytes | str | Unknown
|
33 | reveal_type(x) # revealed: bytes | str | Unknown
|
||||||
|
|
|
|
||||||
info: It may not have an `__iter__` method and its `__getitem__` attribute (with type `(bound method Iterable1.__getitem__(item: int) -> str) | None`) may not be callable
|
info: It may not have an `__iter__` method and its `__getitem__` attribute (with type `(bound method Iterable1.__getitem__(item: int) -> str) | None`) may not be callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -92,6 +93,7 @@ error: lint:not-iterable: Object of type `Iterable2` may not be iterable
|
||||||
|
|
|
|
||||||
info: It may not have an `__iter__` method and its `__getitem__` method (with type `(bound method Iterable2.__getitem__(item: int) -> str) | (bound method Iterable2.__getitem__(item: str) -> int)`) may have an incorrect signature for the old-style iteration protocol
|
info: It may not have an `__iter__` method and its `__getitem__` method (with type `(bound method Iterable2.__getitem__(item: int) -> str) | (bound method Iterable2.__getitem__(item: str) -> int)`) may have an incorrect signature for the old-style iteration protocol
|
||||||
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
info: `__getitem__` must be at least as permissive as `def __getitem__(self, key: int): ...` to satisfy the old-style iteration protocol
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ error: lint:not-iterable: Object of type `Iterable` may not be iterable
|
||||||
18 | reveal_type(x) # revealed: int | bytes
|
18 | reveal_type(x) # revealed: int | bytes
|
||||||
|
|
|
|
||||||
info: It may not have an `__iter__` method or a `__getitem__` method
|
info: It may not have an `__iter__` method or a `__getitem__` method
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ error: lint:not-iterable: Object of type `Test | Test2` may not be iterable
|
||||||
19 | reveal_type(x) # revealed: int
|
19 | reveal_type(x) # revealed: int
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method returns an object of type `TestIter | int`, which may not have a `__next__` method
|
info: Its `__iter__` method returns an object of type `TestIter | int`, which may not have a `__next__` method
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ error: lint:not-iterable: Object of type `Test | Literal[42]` may not be iterabl
|
||||||
14 | reveal_type(x) # revealed: int
|
14 | reveal_type(x) # revealed: int
|
||||||
|
|
|
|
||||||
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method
|
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ error: lint:not-iterable: Object of type `NotIterable` is not iterable
|
||||||
12 | pass
|
12 | pass
|
||||||
|
|
|
|
||||||
info: Its `__iter__` attribute has type `int | None`, which is not callable
|
info: Its `__iter__` attribute has type `int | None`, which is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -54,6 +55,7 @@ warning: lint:possibly-unresolved-reference: Name `x` used when possibly not def
|
||||||
16 | reveal_type(x)
|
16 | reveal_type(x)
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:possibly-unresolved-reference` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ error: lint:not-iterable: Object of type `Bad` is not iterable
|
||||||
9 | reveal_type(x) # revealed: Unknown
|
9 | reveal_type(x) # revealed: Unknown
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method returns an object of type `int`, which has no `__next__` method
|
info: Its `__iter__` method returns an object of type `int`, which has no `__next__` method
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ error: lint:not-iterable: Object of type `Iterable` is not iterable
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method has an invalid signature
|
info: Its `__iter__` method has an invalid signature
|
||||||
info: Expected signature `def __iter__(self): ...`
|
info: Expected signature `def __iter__(self): ...`
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ error: lint:not-iterable: Object of type `Iterable1` is not iterable
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method returns an object of type `Iterator1`, which has an invalid `__next__` method
|
info: Its `__iter__` method returns an object of type `Iterator1`, which has an invalid `__next__` method
|
||||||
info: Expected signature for `__next__` is `def __next__(self): ...`
|
info: Expected signature for `__next__` is `def __next__(self): ...`
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -78,6 +79,7 @@ error: lint:not-iterable: Object of type `Iterable2` is not iterable
|
||||||
24 | reveal_type(y) # revealed: Unknown
|
24 | reveal_type(y) # revealed: Unknown
|
||||||
|
|
|
|
||||||
info: Its `__iter__` method returns an object of type `Iterator2`, which has a `__next__` attribute that is not callable
|
info: Its `__iter__` method returns an object of type `Iterator2`, which has a `__next__` attribute that is not callable
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ info: Type variable defined here
|
||||||
5 |
|
5 |
|
||||||
6 | def f(x: T) -> T:
|
6 | def f(x: T) -> T:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,7 @@ info: Type variable defined here
|
||||||
5 |
|
5 |
|
||||||
6 | def f(x: T) -> T:
|
6 | def f(x: T) -> T:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ info: Type variable defined here
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
4 | return x
|
4 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,7 @@ info: Type variable defined here
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
4 | return x
|
4 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -32,5 +32,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * x
|
2 | return x * x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -38,5 +38,6 @@ info: Function defined here
|
||||||
| ^^^^^^ ------ Parameter declared here
|
| ^^^^^^ ------ Parameter declared here
|
||||||
3 | return x * x
|
3 | return x * x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -42,5 +42,6 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * x
|
2 | return x * x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -40,5 +40,6 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
5 | return x * x
|
5 | return x * x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -44,5 +44,6 @@ info: Function defined here
|
||||||
4 | z: int,
|
4 | z: int,
|
||||||
5 | ) -> int:
|
5 | ) -> int:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -39,6 +39,7 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -58,6 +59,7 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -77,5 +79,6 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -40,5 +40,6 @@ info: Function defined here
|
||||||
41 | *,
|
41 | *,
|
||||||
42 | cls: type[JSONDecoder] | None = None,
|
42 | cls: type[JSONDecoder] | None = None,
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ---------- Parameter declared here
|
| ^^^ ---------- Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ---------- Parameter declared here
|
| ^^^ ---------- Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ---------- Parameter declared here
|
| ^^^ ---------- Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ------ Parameter declared here
|
| ^^^ ------ Parameter declared here
|
||||||
2 | return x * y * z
|
2 | return x * y * z
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -38,5 +38,6 @@ info: Function defined here
|
||||||
| ^^^^^^^^ ------ Parameter declared here
|
| ^^^^^^^^ ------ Parameter declared here
|
||||||
3 | return 1
|
3 | return 1
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ ------------- Parameter declared here
|
| ^^^ ------------- Parameter declared here
|
||||||
2 | return len(numbers)
|
2 | return len(numbers)
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -36,5 +36,6 @@ info: Function defined here
|
||||||
| ^^^ -------------- Parameter declared here
|
| ^^^ -------------- Parameter declared here
|
||||||
2 | return len(numbers)
|
2 | return len(numbers)
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -38,6 +38,7 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
11 | 10 not in WithContains()
|
11 | 10 not in WithContains()
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -51,5 +52,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -24,5 +24,6 @@ error: lint:no-matching-overload: No overload of class `type` matches arguments
|
||||||
1 | type("Foo", ()) # error: [no-matching-overload]
|
1 | type("Foo", ()) # error: [no-matching-overload]
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:no-matching-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -30,5 +30,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -47,6 +47,7 @@ error: lint:invalid-overload: Overloaded function `func` requires at least two o
|
||||||
| ^^^^
|
| ^^^^
|
||||||
8 | return x
|
8 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -61,5 +62,6 @@ error: lint:invalid-overload: Overloaded function `func` requires at least two o
|
||||||
| |
|
| |
|
||||||
| Only one overload defined here
|
| Only one overload defined here
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -84,6 +84,7 @@ error: lint:invalid-overload: Overloaded function `try_from3` does not use the `
|
||||||
41 | if isinstance(x, int):
|
41 | if isinstance(x, int):
|
||||||
42 | return cls(x)
|
42 | return cls(x)
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -102,6 +103,7 @@ error: lint:invalid-overload: Overloaded function `try_from1` does not use the `
|
||||||
17 | if isinstance(x, int):
|
17 | if isinstance(x, int):
|
||||||
18 | return cls(x)
|
18 | return cls(x)
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -124,5 +126,6 @@ error: lint:invalid-overload: Overloaded function `try_from2` does not use the `
|
||||||
23 | @overload
|
23 | @overload
|
||||||
24 | @classmethod
|
24 | @classmethod
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -76,6 +76,7 @@ error: lint:invalid-overload: `@final` decorator should be applied only to the o
|
||||||
| Implementation defined here
|
| Implementation defined here
|
||||||
28 | return x
|
28 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -91,6 +92,7 @@ error: lint:invalid-overload: `@final` decorator should be applied only to the o
|
||||||
| Implementation defined here
|
| Implementation defined here
|
||||||
19 | return x
|
19 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -107,5 +109,6 @@ error: lint:invalid-overload: `@final` decorator should be applied only to the f
|
||||||
15 | def method2(self, x: str) -> str: ...
|
15 | def method2(self, x: str) -> str: ...
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -93,6 +93,7 @@ error: lint:invalid-overload: `@override` decorator should be applied only to th
|
||||||
| Implementation defined here
|
| Implementation defined here
|
||||||
28 | return x
|
28 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -108,6 +109,7 @@ error: lint:invalid-overload: `@override` decorator should be applied only to th
|
||||||
| Implementation defined here
|
| Implementation defined here
|
||||||
38 | return x
|
38 | return x
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -125,5 +127,6 @@ error: lint:invalid-overload: `@override` decorator should be applied only to th
|
||||||
22 | def method(self, x: str) -> str: ...
|
22 | def method(self, x: str) -> str: ...
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -41,6 +41,7 @@ error: lint:invalid-overload: Overloaded non-stub function `func` must have an i
|
||||||
8 |
|
8 |
|
||||||
9 | class Foo:
|
9 | class Foo:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -53,5 +54,6 @@ error: lint:invalid-overload: Overloaded non-stub function `method` must have an
|
||||||
14 | def method(self, x: str) -> str: ...
|
14 | def method(self, x: str) -> str: ...
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-overload` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -51,6 +51,7 @@ error: lint:call-non-callable: Object of type `typing.Protocol` is not callable
|
||||||
5 |
|
5 |
|
||||||
6 | class MyProtocol(Protocol):
|
6 | class MyProtocol(Protocol):
|
||||||
|
|
|
|
||||||
|
info: `lint:call-non-callable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -86,6 +87,7 @@ info: Protocol classes cannot be instantiated
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ `MyProtocol` declared as a protocol here
|
| ^^^^^^^^^^^^^^^^^^^^ `MyProtocol` declared as a protocol here
|
||||||
7 | x: int
|
7 | x: int
|
||||||
|
|
|
|
||||||
|
info: `lint:call-non-callable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -120,6 +122,7 @@ info: Protocol classes cannot be instantiated
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `GenericProtocol` declared as a protocol here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `GenericProtocol` declared as a protocol here
|
||||||
13 | x: T
|
13 | x: T
|
||||||
|
|
|
|
||||||
|
info: `lint:call-non-callable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ info: `NotAProtocol` is declared here, but it is not a protocol class:
|
||||||
|
|
|
|
||||||
info: A class is only a protocol class if it directly inherits from `typing.Protocol` or `typing_extensions.Protocol`
|
info: A class is only a protocol class if it directly inherits from `typing.Protocol` or `typing_extensions.Protocol`
|
||||||
info: See https://typing.python.org/en/latest/spec/protocol.html#
|
info: See https://typing.python.org/en/latest/spec/protocol.html#
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -78,5 +79,6 @@ info: `AlsoNotAProtocol` is declared here, but it is not a protocol class:
|
||||||
|
|
|
|
||||||
info: A class is only a protocol class if it directly inherits from `typing.Protocol` or `typing_extensions.Protocol`
|
info: A class is only a protocol class if it directly inherits from `typing.Protocol` or `typing_extensions.Protocol`
|
||||||
info: See https://typing.python.org/en/latest/spec/protocol.html#
|
info: See https://typing.python.org/en/latest/spec/protocol.html#
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -77,6 +77,7 @@ info: `HasX` is declared as a protocol class, but it is not declared as runtime-
|
||||||
|
|
|
|
||||||
info: A protocol class can only be used in `isinstance` checks if it is decorated with `@typing.runtime_checkable` or `@typing_extensions.runtime_checkable`
|
info: A protocol class can only be used in `isinstance` checks if it is decorated with `@typing.runtime_checkable` or `@typing_extensions.runtime_checkable`
|
||||||
info: See https://docs.python.org/3/library/typing.html#typing.runtime_checkable
|
info: See https://docs.python.org/3/library/typing.html#typing.runtime_checkable
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -130,6 +131,7 @@ info: `HasX` is declared as a protocol class, but it is not declared as runtime-
|
||||||
|
|
|
|
||||||
info: A protocol class can only be used in `issubclass` checks if it is decorated with `@typing.runtime_checkable` or `@typing_extensions.runtime_checkable`
|
info: A protocol class can only be used in `issubclass` checks if it is decorated with `@typing.runtime_checkable` or `@typing_extensions.runtime_checkable`
|
||||||
info: See https://docs.python.org/3/library/typing.html#typing.runtime_checkable
|
info: See https://docs.python.org/3/library/typing.html#typing.runtime_checkable
|
||||||
|
info: `lint:invalid-argument-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
|
|
|
|
||||||
info: Function is inferred as returning `types.GeneratorType` because it is a generator function
|
info: Function is inferred as returning `types.GeneratorType` because it is a generator function
|
||||||
info: See https://docs.python.org/3/glossary.html#term-generator for more details
|
info: See https://docs.python.org/3/glossary.html#term-generator for more details
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -78,5 +79,6 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
|
|
|
|
||||||
info: Function is inferred as returning `types.AsyncGeneratorType` because it is an async generator function
|
info: Function is inferred as returning `types.AsyncGeneratorType` because it is an async generator function
|
||||||
info: See https://docs.python.org/3/glossary.html#term-asynchronous-generator for more details
|
info: See https://docs.python.org/3/glossary.html#term-asynchronous-generator for more details
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -45,6 +45,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
7 |
|
7 |
|
||||||
8 | def f(cond: bool) -> str:
|
8 | def f(cond: bool) -> str:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -63,6 +64,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
12 | else:
|
12 | else:
|
||||||
13 | # error: [invalid-return-type]
|
13 | # error: [invalid-return-type]
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -84,5 +86,6 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
9 | if cond:
|
9 | if cond:
|
||||||
10 | # error: [invalid-return-type]
|
10 | # error: [invalid-return-type]
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -52,6 +52,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
5 |
|
5 |
|
||||||
6 | # error: [invalid-return-type]
|
6 | # error: [invalid-return-type]
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -65,6 +66,7 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
8 | if cond:
|
8 | if cond:
|
||||||
9 | return 1
|
9 | return 1
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -78,6 +80,7 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
13 | if cond:
|
13 | if cond:
|
||||||
14 | raise ValueError()
|
14 | raise ValueError()
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -91,5 +94,6 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
18 | if cond:
|
18 | if cond:
|
||||||
19 | cond = False
|
19 | cond = False
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -43,6 +43,7 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
| ^^^
|
| ^^^
|
||||||
3 | 1
|
3 | 1
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -60,6 +61,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
8 |
|
8 |
|
||||||
9 | def f() -> int:
|
9 | def f() -> int:
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -77,6 +79,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
12 |
|
12 |
|
||||||
13 | from typing import TypeVar
|
13 | from typing import TypeVar
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -88,5 +91,6 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
18 | def m(x: T) -> T: ...
|
18 | def m(x: T) -> T: ...
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -41,6 +41,7 @@ error: lint:invalid-return-type: Return type does not match returned value
|
||||||
4 |
|
4 |
|
||||||
5 | # error: [invalid-return-type]
|
5 | # error: [invalid-return-type]
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -54,6 +55,7 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
7 | print("...")
|
7 | print("...")
|
||||||
8 | ...
|
8 | ...
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -67,5 +69,6 @@ error: lint:invalid-return-type: Function can implicitly return `None`, which is
|
||||||
12 | f"""{foo} is a function that ..."""
|
12 | f"""{foo} is a function that ..."""
|
||||||
13 | ...
|
13 | ...
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-return-type` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -43,6 +43,7 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
14 | 10 < Comparable() < Comparable()
|
14 | 10 < Comparable() < Comparable()
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -58,5 +59,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
16 | Comparable() < Comparable() # fine
|
16 | Comparable() < Comparable() # fine
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -29,5 +29,6 @@ error: lint:invalid-assignment: Implicit shadowing of class `C`
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
info: Annotate to make it explicit if this is intentional
|
info: Annotate to make it explicit if this is intentional
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -29,5 +29,6 @@ error: lint:invalid-assignment: Implicit shadowing of function `f`
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
info: Annotate to make it explicit if this is intentional
|
info: Annotate to make it explicit if this is intentional
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -44,5 +44,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
17 | a < b # fine
|
17 | a < b # fine
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable | Literal[False]` must be callable
|
info: `__bool__` on `NotBoolable | Literal[False]` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -34,5 +34,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
| ^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -26,5 +26,6 @@ error: lint:invalid-assignment: Not enough values to unpack
|
||||||
| |
|
| |
|
||||||
| Expected 2
|
| Expected 2
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -26,5 +26,6 @@ error: lint:invalid-assignment: Too many values to unpack
|
||||||
| |
|
| |
|
||||||
| Expected 2
|
| Expected 2
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -25,5 +25,6 @@ error: lint:not-iterable: Object of type `Literal[1]` is not iterable
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
info: It doesn't have an `__iter__` method or a `__getitem__` method
|
info: It doesn't have an `__iter__` method or a `__getitem__` method
|
||||||
|
info: `lint:not-iterable` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -26,5 +26,6 @@ error: lint:invalid-assignment: Not enough values to unpack
|
||||||
| |
|
| |
|
||||||
| Expected 3 or more
|
| Expected 3 or more
|
||||||
|
|
|
|
||||||
|
info: `lint:invalid-assignment` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -28,5 +28,6 @@ error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
||||||
2 |
|
2 |
|
||||||
3 | x = does_not_exist.foo
|
3 | x = does_not_exist.foo
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -31,5 +31,6 @@ error: lint:unresolved-import: Module `a` has no member `does_not_exist`
|
||||||
1 | from a import does_exist1, does_not_exist, does_exist2 # error: [unresolved-import]
|
1 | from a import does_exist1, does_not_exist, does_exist2 # error: [unresolved-import]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -28,5 +28,6 @@ error: lint:unresolved-import: Cannot resolve imported module `.does_not_exist`
|
||||||
2 |
|
2 |
|
||||||
3 | stat = add(10, 15)
|
3 | stat = add(10, 15)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -28,5 +28,6 @@ error: lint:unresolved-import: Cannot resolve imported module `.does_not_exist.f
|
||||||
2 |
|
2 |
|
||||||
3 | stat = add(10, 15)
|
3 | stat = add(10, 15)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -28,5 +28,6 @@ error: lint:unresolved-import: Cannot resolve imported module `does_not_exist`
|
||||||
2 |
|
2 |
|
||||||
3 | stat = add(10, 15)
|
3 | stat = add(10, 15)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -40,5 +40,6 @@ error: lint:unresolved-import: Cannot resolve imported module `....foo`
|
||||||
2 |
|
2 |
|
||||||
3 | stat = add(10, 15)
|
3 | stat = add(10, 15)
|
||||||
|
|
|
|
||||||
|
info: `lint:unresolved-import` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -32,5 +32,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for t
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
info: `__bool__` on `NotBoolable` must be callable
|
info: `__bool__` on `NotBoolable` must be callable
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -42,5 +42,6 @@ info: `str` is not assignable to `bool`
|
||||||
| Method defined here
|
| Method defined here
|
||||||
3 | return "wat"
|
3 | return "wat"
|
||||||
|
|
|
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -42,5 +42,6 @@ info: `__bool__` methods must only have a `self` parameter
|
||||||
| Method defined here
|
| Method defined here
|
||||||
3 | return False
|
3 | return False
|
||||||
|
|
|
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -39,5 +39,6 @@ error: lint:unsupported-bool-conversion: Boolean conversion is unsupported for u
|
||||||
15 | 10 and get() and True
|
15 | 10 and get() and True
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
|
info: `lint:unsupported-bool-conversion` is enabled by default
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -505,6 +505,10 @@ impl RuleSelection {
|
||||||
self.lints.get(&lint).map(|(severity, _)| *severity)
|
self.lints.get(&lint).map(|(severity, _)| *severity)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get(&self, lint: LintId) -> Option<(Severity, LintSource)> {
|
||||||
|
self.lints.get(&lint).copied()
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns `true` if the `lint` is enabled.
|
/// Returns `true` if the `lint` is enabled.
|
||||||
pub fn is_enabled(&self, lint: LintId) -> bool {
|
pub fn is_enabled(&self, lint: LintId) -> bool {
|
||||||
self.severity(lint).is_some()
|
self.severity(lint).is_some()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use drop_bomb::DebugDropBomb;
|
use drop_bomb::DebugDropBomb;
|
||||||
use ruff_db::diagnostic::DiagnosticTag;
|
use ruff_db::diagnostic::{DiagnosticTag, SubDiagnostic};
|
||||||
use ruff_db::{
|
use ruff_db::{
|
||||||
diagnostic::{Annotation, Diagnostic, DiagnosticId, IntoDiagnosticMessage, Severity, Span},
|
diagnostic::{Annotation, Diagnostic, DiagnosticId, IntoDiagnosticMessage, Severity, Span},
|
||||||
files::File,
|
files::File,
|
||||||
|
@ -10,6 +10,7 @@ use ruff_text_size::{Ranged, TextRange};
|
||||||
|
|
||||||
use super::{binding_type, Type, TypeCheckDiagnostics};
|
use super::{binding_type, Type, TypeCheckDiagnostics};
|
||||||
|
|
||||||
|
use crate::lint::LintSource;
|
||||||
use crate::semantic_index::symbol::ScopeId;
|
use crate::semantic_index::symbol::ScopeId;
|
||||||
use crate::{
|
use crate::{
|
||||||
lint::{LintId, LintMetadata},
|
lint::{LintId, LintMetadata},
|
||||||
|
@ -222,6 +223,8 @@ pub(super) struct LintDiagnosticGuard<'db, 'ctx> {
|
||||||
///
|
///
|
||||||
/// This is always `Some` until the `Drop` impl.
|
/// This is always `Some` until the `Drop` impl.
|
||||||
diag: Option<Diagnostic>,
|
diag: Option<Diagnostic>,
|
||||||
|
|
||||||
|
source: LintSource,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LintDiagnosticGuard<'_, '_> {
|
impl LintDiagnosticGuard<'_, '_> {
|
||||||
|
@ -310,7 +313,19 @@ impl Drop for LintDiagnosticGuard<'_, '_> {
|
||||||
// OK because the only way `self.diag` is `None`
|
// OK because the only way `self.diag` is `None`
|
||||||
// is via this impl, which can only run at most
|
// is via this impl, which can only run at most
|
||||||
// once.
|
// once.
|
||||||
let diag = self.diag.take().unwrap();
|
let mut diag = self.diag.take().unwrap();
|
||||||
|
|
||||||
|
diag.sub(SubDiagnostic::new(
|
||||||
|
Severity::Info,
|
||||||
|
match self.source {
|
||||||
|
LintSource::Default => format!("`{}` is enabled by default", diag.id()),
|
||||||
|
LintSource::Cli => format!("`{}` was selected on the command line", diag.id()),
|
||||||
|
LintSource::File => {
|
||||||
|
format!("`{}` was selected in the configuration file", diag.id())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
));
|
||||||
|
|
||||||
self.ctx.diagnostics.borrow_mut().push(diag);
|
self.ctx.diagnostics.borrow_mut().push(diag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -345,6 +360,7 @@ pub(super) struct LintDiagnosticGuardBuilder<'db, 'ctx> {
|
||||||
ctx: &'ctx InferContext<'db>,
|
ctx: &'ctx InferContext<'db>,
|
||||||
id: DiagnosticId,
|
id: DiagnosticId,
|
||||||
severity: Severity,
|
severity: Severity,
|
||||||
|
source: LintSource,
|
||||||
primary_span: Span,
|
primary_span: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,7 +387,7 @@ impl<'db, 'ctx> LintDiagnosticGuardBuilder<'db, 'ctx> {
|
||||||
let lint_id = LintId::of(lint);
|
let lint_id = LintId::of(lint);
|
||||||
// Skip over diagnostics if the rule
|
// Skip over diagnostics if the rule
|
||||||
// is disabled.
|
// is disabled.
|
||||||
let severity = ctx.db.rule_selection().severity(lint_id)?;
|
let (severity, source) = ctx.db.rule_selection().get(lint_id)?;
|
||||||
// If we're not in type checking mode,
|
// If we're not in type checking mode,
|
||||||
// we can bail now.
|
// we can bail now.
|
||||||
if ctx.is_in_no_type_check() {
|
if ctx.is_in_no_type_check() {
|
||||||
|
@ -390,6 +406,7 @@ impl<'db, 'ctx> LintDiagnosticGuardBuilder<'db, 'ctx> {
|
||||||
ctx,
|
ctx,
|
||||||
id,
|
id,
|
||||||
severity,
|
severity,
|
||||||
|
source,
|
||||||
primary_span,
|
primary_span,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -417,6 +434,7 @@ impl<'db, 'ctx> LintDiagnosticGuardBuilder<'db, 'ctx> {
|
||||||
diag.annotate(Annotation::primary(self.primary_span.clone()));
|
diag.annotate(Annotation::primary(self.primary_span.clone()));
|
||||||
LintDiagnosticGuard {
|
LintDiagnosticGuard {
|
||||||
ctx: self.ctx,
|
ctx: self.ctx,
|
||||||
|
source: self.source,
|
||||||
diag: Some(diag),
|
diag: Some(diag),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -479,6 +497,11 @@ impl std::ops::DerefMut for DiagnosticGuard<'_, '_> {
|
||||||
/// being type checked.
|
/// being type checked.
|
||||||
impl Drop for DiagnosticGuard<'_, '_> {
|
impl Drop for DiagnosticGuard<'_, '_> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
|
if std::thread::panicking() {
|
||||||
|
// Don't submit diagnostics when panicking because they might be incomplete.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// OK because the only way `self.diag` is `None`
|
// OK because the only way `self.diag` is `None`
|
||||||
// is via this impl, which can only run at most
|
// is via this impl, which can only run at most
|
||||||
// once.
|
// once.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue