mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-03 07:04:53 +00:00
Use Never
instead of None
for stores (#13984)
## Summary See: https://github.com/astral-sh/ruff/pull/13981#issuecomment-2445472433
This commit is contained in:
parent
262c04f297
commit
b1ce8a3949
2 changed files with 14 additions and 22 deletions
|
@ -81,8 +81,7 @@ reveal_type(b) # revealed: Literal[2]
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Add diagnostic (need more values to unpack)
|
# TODO: Add diagnostic (need more values to unpack)
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
[a, *b, c, d] = (1, 2)
|
||||||
[a, *b, c, d] = (1, 2) # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: Literal[1]
|
reveal_type(a) # revealed: Literal[1]
|
||||||
# TODO: Should be list[Any] once support for assigning to starred expression is added
|
# TODO: Should be list[Any] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -93,7 +92,7 @@ reveal_type(d) # revealed: Unknown
|
||||||
### Starred expression (2)
|
### Starred expression (2)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
[a, *b, c] = (1, 2) # error: "Object of type `None` is not iterable"
|
[a, *b, c] = (1, 2)
|
||||||
reveal_type(a) # revealed: Literal[1]
|
reveal_type(a) # revealed: Literal[1]
|
||||||
# TODO: Should be list[Any] once support for assigning to starred expression is added
|
# TODO: Should be list[Any] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -103,8 +102,7 @@ reveal_type(c) # revealed: Literal[2]
|
||||||
### Starred expression (3)
|
### Starred expression (3)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
[a, *b, c] = (1, 2, 3)
|
||||||
[a, *b, c] = (1, 2, 3) # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: Literal[1]
|
reveal_type(a) # revealed: Literal[1]
|
||||||
# TODO: Should be list[int] once support for assigning to starred expression is added
|
# TODO: Should be list[int] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -114,8 +112,7 @@ reveal_type(c) # revealed: Literal[3]
|
||||||
### Starred expression (4)
|
### Starred expression (4)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
[a, *b, c, d] = (1, 2, 3, 4, 5, 6)
|
||||||
[a, *b, c, d] = (1, 2, 3, 4, 5, 6) # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: Literal[1]
|
reveal_type(a) # revealed: Literal[1]
|
||||||
# TODO: Should be list[int] once support for assigning to starred expression is added
|
# TODO: Should be list[int] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -126,8 +123,7 @@ reveal_type(d) # revealed: Literal[6]
|
||||||
### Starred expression (5)
|
### Starred expression (5)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
[a, b, *c] = (1, 2, 3, 4)
|
||||||
[a, b, *c] = (1, 2, 3, 4) # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: Literal[1]
|
reveal_type(a) # revealed: Literal[1]
|
||||||
reveal_type(b) # revealed: Literal[2]
|
reveal_type(b) # revealed: Literal[2]
|
||||||
# TODO: Should be list[int] once support for assigning to starred expression is added
|
# TODO: Should be list[int] once support for assigning to starred expression is added
|
||||||
|
@ -215,8 +211,7 @@ reveal_type(b) # revealed: LiteralString
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Add diagnostic (need more values to unpack)
|
# TODO: Add diagnostic (need more values to unpack)
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
(a, *b, c, d) = "ab"
|
||||||
(a, *b, c, d) = "ab" # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: LiteralString
|
reveal_type(a) # revealed: LiteralString
|
||||||
# TODO: Should be list[LiteralString] once support for assigning to starred expression is added
|
# TODO: Should be list[LiteralString] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -227,7 +222,7 @@ reveal_type(d) # revealed: Unknown
|
||||||
### Starred expression (2)
|
### Starred expression (2)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
(a, *b, c) = "ab" # error: "Object of type `None` is not iterable"
|
(a, *b, c) = "ab"
|
||||||
reveal_type(a) # revealed: LiteralString
|
reveal_type(a) # revealed: LiteralString
|
||||||
# TODO: Should be list[Any] once support for assigning to starred expression is added
|
# TODO: Should be list[Any] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -237,8 +232,7 @@ reveal_type(c) # revealed: LiteralString
|
||||||
### Starred expression (3)
|
### Starred expression (3)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
(a, *b, c) = "abc"
|
||||||
(a, *b, c) = "abc" # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: LiteralString
|
reveal_type(a) # revealed: LiteralString
|
||||||
# TODO: Should be list[LiteralString] once support for assigning to starred expression is added
|
# TODO: Should be list[LiteralString] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -248,8 +242,7 @@ reveal_type(c) # revealed: LiteralString
|
||||||
### Starred expression (4)
|
### Starred expression (4)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
(a, *b, c, d) = "abcdef"
|
||||||
(a, *b, c, d) = "abcdef" # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: LiteralString
|
reveal_type(a) # revealed: LiteralString
|
||||||
# TODO: Should be list[LiteralString] once support for assigning to starred expression is added
|
# TODO: Should be list[LiteralString] once support for assigning to starred expression is added
|
||||||
reveal_type(b) # revealed: @Todo
|
reveal_type(b) # revealed: @Todo
|
||||||
|
@ -260,8 +253,7 @@ reveal_type(d) # revealed: LiteralString
|
||||||
### Starred expression (5)
|
### Starred expression (5)
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# TODO: Remove 'not-iterable' diagnostic
|
(a, b, *c) = "abcd"
|
||||||
(a, b, *c) = "abcd" # error: "Object of type `None` is not iterable"
|
|
||||||
reveal_type(a) # revealed: LiteralString
|
reveal_type(a) # revealed: LiteralString
|
||||||
reveal_type(b) # revealed: LiteralString
|
reveal_type(b) # revealed: LiteralString
|
||||||
# TODO: Should be list[int] once support for assigning to starred expression is added
|
# TODO: Should be list[int] once support for assigning to starred expression is added
|
||||||
|
|
|
@ -1414,11 +1414,11 @@ impl<'db> TypeInferenceBuilder<'db> {
|
||||||
// Resolve the target type, assuming a load context.
|
// Resolve the target type, assuming a load context.
|
||||||
let target_type = match &**target {
|
let target_type = match &**target {
|
||||||
Expr::Name(name) => {
|
Expr::Name(name) => {
|
||||||
self.store_expression_type(target, Type::None);
|
self.store_expression_type(target, Type::Never);
|
||||||
self.infer_name_load(name)
|
self.infer_name_load(name)
|
||||||
}
|
}
|
||||||
Expr::Attribute(attr) => {
|
Expr::Attribute(attr) => {
|
||||||
self.store_expression_type(target, Type::None);
|
self.store_expression_type(target, Type::Never);
|
||||||
self.infer_attribute_load(attr)
|
self.infer_attribute_load(attr)
|
||||||
}
|
}
|
||||||
_ => self.infer_expression(target),
|
_ => self.infer_expression(target),
|
||||||
|
@ -2506,7 +2506,7 @@ impl<'db> TypeInferenceBuilder<'db> {
|
||||||
fn infer_name_expression(&mut self, name: &ast::ExprName) -> Type<'db> {
|
fn infer_name_expression(&mut self, name: &ast::ExprName) -> Type<'db> {
|
||||||
match name.ctx {
|
match name.ctx {
|
||||||
ExprContext::Load => self.infer_name_load(name),
|
ExprContext::Load => self.infer_name_load(name),
|
||||||
ExprContext::Store | ExprContext::Del => Type::None,
|
ExprContext::Store | ExprContext::Del => Type::Never,
|
||||||
ExprContext::Invalid => Type::Unknown,
|
ExprContext::Invalid => Type::Unknown,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2536,7 +2536,7 @@ impl<'db> TypeInferenceBuilder<'db> {
|
||||||
ExprContext::Load => self.infer_attribute_load(attribute),
|
ExprContext::Load => self.infer_attribute_load(attribute),
|
||||||
ExprContext::Store | ExprContext::Del => {
|
ExprContext::Store | ExprContext::Del => {
|
||||||
self.infer_expression(value);
|
self.infer_expression(value);
|
||||||
Type::None
|
Type::Never
|
||||||
}
|
}
|
||||||
ExprContext::Invalid => {
|
ExprContext::Invalid => {
|
||||||
self.infer_expression(value);
|
self.infer_expression(value);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue