Compare commits
1 Commits
jack/loop-
...
micha/cycl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6fbd7849f |
6
Cargo.lock
generated
6
Cargo.lock
generated
@@ -3646,7 +3646,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
||||
[[package]]
|
||||
name = "salsa"
|
||||
version = "0.25.2"
|
||||
source = "git+https://github.com/salsa-rs/salsa.git?rev=9860ff6ca0f1f8f3a8d6b832020002790b501254#9860ff6ca0f1f8f3a8d6b832020002790b501254"
|
||||
source = "git+https://github.com/salsa-rs/salsa.git?rev=bf00ff97590b15e20950daccb231009e9d1339d2#bf00ff97590b15e20950daccb231009e9d1339d2"
|
||||
dependencies = [
|
||||
"boxcar",
|
||||
"compact_str",
|
||||
@@ -3671,12 +3671,12 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "salsa-macro-rules"
|
||||
version = "0.25.2"
|
||||
source = "git+https://github.com/salsa-rs/salsa.git?rev=9860ff6ca0f1f8f3a8d6b832020002790b501254#9860ff6ca0f1f8f3a8d6b832020002790b501254"
|
||||
source = "git+https://github.com/salsa-rs/salsa.git?rev=bf00ff97590b15e20950daccb231009e9d1339d2#bf00ff97590b15e20950daccb231009e9d1339d2"
|
||||
|
||||
[[package]]
|
||||
name = "salsa-macros"
|
||||
version = "0.25.2"
|
||||
source = "git+https://github.com/salsa-rs/salsa.git?rev=9860ff6ca0f1f8f3a8d6b832020002790b501254#9860ff6ca0f1f8f3a8d6b832020002790b501254"
|
||||
source = "git+https://github.com/salsa-rs/salsa.git?rev=bf00ff97590b15e20950daccb231009e9d1339d2#bf00ff97590b15e20950daccb231009e9d1339d2"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
||||
@@ -150,7 +150,7 @@ regex-automata = { version = "0.4.9" }
|
||||
rustc-hash = { version = "2.0.0" }
|
||||
rustc-stable-hash = { version = "0.1.2" }
|
||||
# When updating salsa, make sure to also update the revision in `fuzz/Cargo.toml`
|
||||
salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "9860ff6ca0f1f8f3a8d6b832020002790b501254", default-features = false, features = [
|
||||
salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "bf00ff97590b15e20950daccb231009e9d1339d2", default-features = false, features = [
|
||||
"compact_str",
|
||||
"macros",
|
||||
"salsa_unstable",
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
---
|
||||
source: crates/ty_test/src/lib.rs
|
||||
assertion_line: 623
|
||||
expression: snapshot
|
||||
---
|
||||
|
||||
---
|
||||
mdtest name: dataclasses.md - Dataclasses - Other dataclass parameters - frozen/non-frozen inheritance
|
||||
mdtest path: crates/ty_python_semantic/resources/mdtest/dataclasses/dataclasses.md
|
||||
---
|
||||
|
||||
# Python source files
|
||||
|
||||
## a.py
|
||||
|
||||
```
|
||||
1 | from dataclasses import dataclass
|
||||
2 |
|
||||
3 | @dataclass(frozen=True)
|
||||
4 | class FrozenBase:
|
||||
5 | x: int
|
||||
6 |
|
||||
7 | @dataclass
|
||||
8 | # error: [invalid-frozen-dataclass-subclass] "Non-frozen dataclass `Child` cannot inherit from frozen dataclass `FrozenBase`"
|
||||
9 | class Child(FrozenBase):
|
||||
10 | y: int
|
||||
```
|
||||
|
||||
## b.py
|
||||
|
||||
```
|
||||
1 | from dataclasses import dataclass
|
||||
2 |
|
||||
3 | @dataclass
|
||||
4 | class Base:
|
||||
5 | x: int
|
||||
6 |
|
||||
7 | @dataclass(frozen=True)
|
||||
8 | # error: [invalid-frozen-dataclass-subclass] "Frozen dataclass `FrozenChild` cannot inherit from non-frozen dataclass `Base`"
|
||||
9 | class FrozenChild(Base):
|
||||
10 | y: int
|
||||
```
|
||||
|
||||
## module.py
|
||||
|
||||
```
|
||||
1 | import dataclasses
|
||||
2 |
|
||||
3 | @dataclasses.dataclass(frozen=False)
|
||||
4 | class NotFrozenBase:
|
||||
5 | x: int
|
||||
```
|
||||
|
||||
## main.py
|
||||
|
||||
```
|
||||
1 | from functools import total_ordering
|
||||
2 | from typing import final
|
||||
3 | from dataclasses import dataclass
|
||||
4 |
|
||||
5 | from module import NotFrozenBase
|
||||
6 |
|
||||
7 | @final
|
||||
8 | @dataclass(frozen=True)
|
||||
9 | @total_ordering # error: [invalid-total-ordering]
|
||||
10 | class FrozenChild(NotFrozenBase): # error: [invalid-frozen-dataclass-subclass]
|
||||
11 | y: str
|
||||
```
|
||||
|
||||
# Diagnostics
|
||||
|
||||
```
|
||||
error[invalid-frozen-dataclass-subclass]: Non-frozen dataclass cannot inherit from frozen dataclass
|
||||
--> src/a.py:7:1
|
||||
|
|
||||
5 | x: int
|
||||
6 |
|
||||
7 | @dataclass
|
||||
| ---------- `Child` dataclass parameters
|
||||
8 | # error: [invalid-frozen-dataclass-subclass] "Non-frozen dataclass `Child` cannot inherit from frozen dataclass `FrozenBase`"
|
||||
9 | class Child(FrozenBase):
|
||||
| ^^^^^^----------^ Subclass `Child` is not frozen but base class `FrozenBase` is
|
||||
10 | y: int
|
||||
|
|
||||
info: This causes the class creation to fail
|
||||
info: Base class definition
|
||||
--> src/a.py:3:1
|
||||
|
|
||||
1 | from dataclasses import dataclass
|
||||
2 |
|
||||
3 | @dataclass(frozen=True)
|
||||
| ----------------------- `FrozenBase` dataclass parameters
|
||||
4 | class FrozenBase:
|
||||
| ^^^^^^^^^^ `FrozenBase` definition
|
||||
5 | x: int
|
||||
|
|
||||
info: rule `invalid-frozen-dataclass-subclass` is enabled by default
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
error[invalid-frozen-dataclass-subclass]: Frozen dataclass cannot inherit from non-frozen dataclass
|
||||
--> src/b.py:7:1
|
||||
|
|
||||
5 | x: int
|
||||
6 |
|
||||
7 | @dataclass(frozen=True)
|
||||
| ----------------------- `FrozenChild` dataclass parameters
|
||||
8 | # error: [invalid-frozen-dataclass-subclass] "Frozen dataclass `FrozenChild` cannot inherit from non-frozen dataclass `Base`"
|
||||
9 | class FrozenChild(Base):
|
||||
| ^^^^^^^^^^^^----^ Subclass `FrozenChild` is frozen but base class `Base` is not
|
||||
10 | y: int
|
||||
|
|
||||
info: This causes the class creation to fail
|
||||
info: Base class definition
|
||||
--> src/b.py:3:1
|
||||
|
|
||||
1 | from dataclasses import dataclass
|
||||
2 |
|
||||
3 | @dataclass
|
||||
| ---------- `Base` dataclass parameters
|
||||
4 | class Base:
|
||||
| ^^^^ `Base` definition
|
||||
5 | x: int
|
||||
|
|
||||
info: rule `invalid-frozen-dataclass-subclass` is enabled by default
|
||||
|
||||
```
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
source: crates/ty_test/src/lib.rs
|
||||
assertion_line: 623
|
||||
expression: snapshot
|
||||
---
|
||||
|
||||
---
|
||||
mdtest name: overloads.md - Overloads - Invalid - At least two overloads
|
||||
mdtest path: crates/ty_python_semantic/resources/mdtest/overloads.md
|
||||
---
|
||||
|
||||
# Python source files
|
||||
|
||||
## mdtest_snippet.py
|
||||
|
||||
```
|
||||
1 | from typing import overload
|
||||
2 |
|
||||
3 | @overload
|
||||
4 | def func(x: int) -> int: ...
|
||||
5 |
|
||||
6 | # error: [invalid-overload]
|
||||
7 | def func(x: int | str) -> int | str:
|
||||
8 | return x
|
||||
```
|
||||
|
||||
## mdtest_snippet.pyi
|
||||
|
||||
```
|
||||
1 | from typing import overload
|
||||
2 |
|
||||
3 | @overload
|
||||
4 | # error: [invalid-overload]
|
||||
5 | def func(x: int) -> int: ...
|
||||
```
|
||||
|
||||
# Diagnostics
|
||||
|
||||
```
|
||||
error[invalid-overload]: Overloaded function `func` requires at least two overloads
|
||||
--> src/mdtest_snippet.pyi:5:5
|
||||
|
|
||||
3 | @overload
|
||||
4 | # error: [invalid-overload]
|
||||
5 | def func(x: int) -> int: ...
|
||||
| ----
|
||||
| |
|
||||
| Only one overload defined here
|
||||
|
|
||||
info: rule `invalid-overload` is enabled by default
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user