Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 109 additions & 109 deletions crates/ty/docs/rules.md

Large diffs are not rendered by default.

36 changes: 20 additions & 16 deletions crates/ty/tests/cli/rule_selection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1105,15 +1105,17 @@ fn configuration_all_rules_with_rule_sorting_before_all() -> anyhow::Result<()>
exit_code: 1
----- stdout -----
error[abstract-method-in-final-class]: Final class `Derived` has unimplemented abstract methods
--> test.py:11:7
--> test.py:6:5
|
11 | class Derived(Base):
| ^^^^^^^ `foo` is unimplemented
|
::: test.py:7:9
|
7 | def foo(self) -> int:
| --- `foo` declared as abstract on superclass `Base`
6 | / @abstractmethod
7 | | def foo(self) -> int:
| |________________________- `foo` declared as abstract on superclass `Base`
8 | raise NotImplementedError
9 |
10 | @final
| ------
11 | class Derived(Base):
| ^^^^^^^ `foo` is unimplemented
|
info: rule `abstract-method-in-final-class` was selected in the configuration file

Expand Down Expand Up @@ -1166,15 +1168,17 @@ fn overrides_all_rules_with_rule_sorting_before_all() -> anyhow::Result<()> {
exit_code: 1
----- stdout -----
error[abstract-method-in-final-class]: Final class `Derived` has unimplemented abstract methods
--> src/test.py:11:7
|
11 | class Derived(Base):
| ^^^^^^^ `foo` is unimplemented
|
::: src/test.py:7:9
--> src/test.py:6:5
|
7 | def foo(self) -> int:
| --- `foo` declared as abstract on superclass `Base`
6 | / @abstractmethod
7 | | def foo(self) -> int:
| |________________________- `foo` declared as abstract on superclass `Base`
8 | raise NotImplementedError
9 |
10 | @final
| ------
11 | class Derived(Base):
| ^^^^^^^ `foo` is unimplemented
|
info: rule `abstract-method-in-final-class` was selected in the configuration file

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@ Foo.method()

```snapshot
error[call-abstract-method]: Cannot call `method` on class object
--> src/mdtest_snippet.py:9:1
--> src/mdtest_snippet.py:4:5
|
9 | Foo.method()
| ^^^^^^^^^^^^ `method` is an abstract classmethod with a trivial body
|
info: Method `method` defined here
--> src/mdtest_snippet.py:6:9
|
6 | def method(cls) -> int: ...
| ^^^^^^
4 | / @classmethod
5 | | @abstractmethod
6 | | def method(cls) -> int: ...
| |_______________________________- Method `method` defined here
7 |
8 | # snapshot: call-abstract-method
9 | Foo.method()
| ^^^^^^^^^^^^ `method` is an abstract classmethod with a trivial body
|
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -956,10 +956,11 @@ error[no-matching-overload]: No overload of function `f` matches arguments
|
info: Limit of argument type expansion reached at argument 9
info: First overload defined here
--> src/overloaded.pyi:8:5
--> src/overloaded.pyi:7:1
|
8 | def f() -> None: ...
| ^^^^^^^^^^^
7 | / @overload
8 | | def f() -> None: ...
| |____________________^ First overload defined here
|
info: Possible overloads for function `f`:
info: () -> None
Expand Down
18 changes: 14 additions & 4 deletions crates/ty_python_semantic/resources/mdtest/del.md
Original file line number Diff line number Diff line change
Expand Up @@ -450,10 +450,15 @@ error[invalid-argument-type]: Cannot delete required key "name" from TypedDict `
| ^^^^^^
|
info: Field defined here
--> src/mdtest_snippet.py:4:5
--> src/mdtest_snippet.py:3:7
|
3 | class Movie(TypedDict):
| ---------------- `Movie` defined here
4 | name: str
| --------- `name` declared as required here; consider making it `NotRequired`
| ---------
| |
| `name` declared as required here
| Consider making it `NotRequired`
|
info: Only keys marked as `NotRequired` (or in a TypedDict with `total=False`) can be deleted
```
Expand Down Expand Up @@ -485,10 +490,15 @@ error[invalid-argument-type]: Cannot delete required key "name" from TypedDict `
| ^^^^^^
|
info: Field defined here
--> src/mdtest_snippet.py:12:5
--> src/mdtest_snippet.py:11:7
|
11 | class MixedMovie(TypedDict):
| --------------------- `MixedMovie` defined here
12 | name: str
| --------- `name` declared as required here; consider making it `NotRequired`
| ---------
| |
| `name` declared as required here
| Consider making it `NotRequired`
|
info: Only keys marked as `NotRequired` (or in a TypedDict with `total=False`) can be deleted
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,19 @@ mdtest path: crates/ty_python_semantic/resources/mdtest/final.md

```
error[abstract-method-in-final-class]: Final class `Child` has unimplemented abstract methods
--> src/mdtest_snippet.py:12:7
--> src/mdtest_snippet.py:5:5
|
12 | class Child(Parent): # error: [abstract-method-in-final-class]
| ^^^^^ `method` is unimplemented
|
::: src/mdtest_snippet.py:6:9
|
6 | def method(self) -> int: ...
| ------ `method` declared as abstract on superclass `GrandParent`
5 | / @abstractmethod
6 | | def method(self) -> int: ...
| |________________________________- `method` declared as abstract on superclass `GrandParent`
7 |
8 | class Parent(GrandParent):
9 | pass
10 |
11 | @final
| ------
12 | class Child(Parent): # error: [abstract-method-in-final-class]
| ^^^^^ `method` is unimplemented
|

```
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,17 @@ mdtest path: crates/ty_python_semantic/resources/mdtest/final.md

```
error[abstract-method-in-final-class]: Final class `Derived` has unimplemented abstract methods
--> src/mdtest_snippet.py:10:7
--> src/mdtest_snippet.py:5:5
|
10 | class Derived(Base): # error: [abstract-method-in-final-class] "Final class `Derived` has unimplemented abstract method `foo`"
| ^^^^^^^ `foo` is unimplemented
|
::: src/mdtest_snippet.py:6:9
|
6 | def foo(self) -> int:
| --- `foo` declared as abstract on superclass `Base`
5 | / @abstractmethod
6 | | def foo(self) -> int:
| |________________________- `foo` declared as abstract on superclass `Base`
7 | raise NotImplementedError
8 |
9 | @final
| ------
10 | class Derived(Base): # error: [abstract-method-in-final-class] "Final class `Derived` has unimplemented abstract method `foo`"
| ^^^^^^^ `foo` is unimplemented
|

```
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,16 @@ mdtest path: crates/ty_python_semantic/resources/mdtest/final.md

```
error[abstract-method-in-final-class]: Final class `Abstract` has unimplemented abstract methods
--> src/mdtest_snippet.py:6:7
--> src/mdtest_snippet.py:4:1
|
6 | class Abstract(ABC):
| ^^^^^^^^ Abstract methods `aaaaaaaaaa`, `bbbbbbbb`, `cccccccc`, `ddddddddd`, `eeeeeeeee`, `ffffffff`, `ggggggg`, `hhhhhhhh`, `iiiiiiiii` and `kkkkkkkkkk` are unimplemented
7 | @abstractmethod
8 | def aaaaaaaaaa(self) -> int: ...
| ---------- `aaaaaaaaaa` declared as abstract
4 | @final
| ------
5 | # error: [abstract-method-in-final-class] "Final class `Abstract` has unimplemented abstract methods `aaaaaaaaaa`, `bbbbbbbb`, `ccccccc…
6 | class Abstract(ABC):
| ^^^^^^^^ Abstract methods `aaaaaaaaaa`, `bbbbbbbb`, `cccccccc`, `ddddddddd`, `eeeeeeeee`, `ffffffff`, `ggggggg`, `hhhhhhhh`, `iiiiiiiii` and `kkkkkkkkkk` are unimplemented
7 | / @abstractmethod
8 | | def aaaaaaaaaa(self) -> int: ...
| |____________________________________- `aaaaaaaaaa` declared as abstract
|
info: rule `abstract-method-in-final-class` is enabled by default

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,16 @@ mdtest path: crates/ty_python_semantic/resources/mdtest/final.md

```
error[abstract-method-in-final-class]: Final class `Abstract` has unimplemented abstract methods
--> src/mdtest_snippet.py:6:7
--> src/mdtest_snippet.py:4:1
|
6 | class Abstract(ABC):
| ^^^^^^^^ 10 abstract methods are unimplemented, including `aaaaaaaaaa`, `bbbbbbbb` and `cccccccc`
7 | @abstractmethod
8 | def aaaaaaaaaa(self) -> int: ...
| ---------- `aaaaaaaaaa` declared as abstract
4 | @final
| ------
5 | # error: [abstract-method-in-final-class] "Final class `Abstract` has 10 unimplemented abstract methods, including `aaaaaaaaaa`, `bbbbb…
6 | class Abstract(ABC):
| ^^^^^^^^ 10 abstract methods are unimplemented, including `aaaaaaaaaa`, `bbbbbbbb` and `cccccccc`
7 | / @abstractmethod
8 | | def aaaaaaaaaa(self) -> int: ...
| |____________________________________- `aaaaaaaaaa` declared as abstract
|
info: Use `--verbose` to see all 10 unimplemented abstract methods

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,30 +41,36 @@ mdtest path: crates/ty_python_semantic/resources/mdtest/final.md

```
error[abstract-method-in-final-class]: Final class `MissingAll` has unimplemented abstract methods
--> src/mdtest_snippet.py:13:7
--> src/mdtest_snippet.py:12:1
|
13 | class MissingAll(Base): # error: [abstract-method-in-final-class]
| ^^^^^^^^^^ Abstract methods `foo`, `bar` and `baz` are unimplemented
12 | @final
| ------
13 | class MissingAll(Base): # error: [abstract-method-in-final-class]
| ^^^^^^^^^^ Abstract methods `foo`, `bar` and `baz` are unimplemented
|
::: src/mdtest_snippet.py:6:9
::: src/mdtest_snippet.py:5:5
|
6 | def foo(self) -> int: ...
| --- `foo` declared as abstract on superclass `Base`
5 | / @abstractmethod
6 | | def foo(self) -> int: ...
| |_____________________________- `foo` declared as abstract on superclass `Base`
|

```

```
error[abstract-method-in-final-class]: Final class `PartiallyImplemented` has unimplemented abstract methods
--> src/mdtest_snippet.py:17:7
--> src/mdtest_snippet.py:16:1
|
17 | class PartiallyImplemented(Base): # error: [abstract-method-in-final-class]
| ^^^^^^^^^^^^^^^^^^^^ `baz` is unimplemented
16 | @final
| ------
17 | class PartiallyImplemented(Base): # error: [abstract-method-in-final-class]
| ^^^^^^^^^^^^^^^^^^^^ `baz` is unimplemented
|
::: src/mdtest_snippet.py:10:9
::: src/mdtest_snippet.py:9:5
|
10 | def baz(self) -> None: ...
| --- `baz` declared as abstract on superclass `Base`
9 | / @abstractmethod
10 | | def baz(self) -> None: ...
| |______________________________- `baz` declared as abstract on superclass `Base`
|

```
Loading
Loading