mirror of https://github.com/astral-sh/ruff
fix expectations
This commit is contained in:
parent
4b9755b603
commit
8696a110ff
|
|
@ -57,7 +57,7 @@ We can access attributes on objects of all kinds:
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
reveal_type(inspect.getattr_static(sys, "dont_write_bytecode")) # revealed: bool
|
reveal_type(inspect.getattr_static(sys, "dont_write_bytecode")) # revealed: bool
|
||||||
# revealed: def getattr_static(obj: object, attr: str, default: Any | None = EllipsisType) -> Any
|
# revealed: def getattr_static(obj: object, attr: str, default: Any | None = ...) -> Any
|
||||||
reveal_type(inspect.getattr_static(inspect, "getattr_static"))
|
reveal_type(inspect.getattr_static(inspect, "getattr_static"))
|
||||||
|
|
||||||
reveal_type(inspect.getattr_static(1, "real")) # revealed: property
|
reveal_type(inspect.getattr_static(1, "real")) # revealed: property
|
||||||
|
|
@ -144,7 +144,7 @@ from typing import Any
|
||||||
def _(a: Any, tuple_of_any: tuple[Any]):
|
def _(a: Any, tuple_of_any: tuple[Any]):
|
||||||
reveal_type(inspect.getattr_static(a, "x", "default")) # revealed: Any | Literal["default"]
|
reveal_type(inspect.getattr_static(a, "x", "default")) # revealed: Any | Literal["default"]
|
||||||
|
|
||||||
# revealed def index(self, value: Any, start: SupportsIndex = 0, stop: SupportsIndex = int, /) -> int
|
# revealed: def index(self, value: Any, start: SupportsIndex = 0, stop: SupportsIndex = sys.maxsize, /) -> int
|
||||||
reveal_type(inspect.getattr_static(tuple_of_any, "index", "default"))
|
reveal_type(inspect.getattr_static(tuple_of_any, "index", "default"))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -600,9 +600,9 @@ from typing_extensions import Self
|
||||||
|
|
||||||
reveal_type(object.__new__) # revealed: def __new__(cls) -> Self@__new__
|
reveal_type(object.__new__) # revealed: def __new__(cls) -> Self@__new__
|
||||||
reveal_type(object().__new__) # revealed: def __new__(cls) -> Self@__new__
|
reveal_type(object().__new__) # revealed: def __new__(cls) -> Self@__new__
|
||||||
# revealed Overload[(cls, x: str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc = 0], /) -> Self@__new__, (cls, x: str | bytes | bytearray, /, base: SupportsIndex) -> Self@__new__
|
# revealed: Overload[(cls, x: str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc = 0, /) -> Self@__new__, (cls, x: str | bytes | bytearray, /, base: SupportsIndex) -> Self@__new__]
|
||||||
reveal_type(int.__new__)
|
reveal_type(int.__new__)
|
||||||
# revealed Overload[(cls, x: str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc = 0], /) -> Self@__new__, (cls, x: str | bytes | bytearray, /, base: SupportsIndex) -> Self@__new__
|
# revealed: Overload[(cls, x: str | Buffer | SupportsInt | SupportsIndex | SupportsTrunc = 0, /) -> Self@__new__, (cls, x: str | bytes | bytearray, /, base: SupportsIndex) -> Self@__new__]
|
||||||
reveal_type((42).__new__)
|
reveal_type((42).__new__)
|
||||||
|
|
||||||
class X:
|
class X:
|
||||||
|
|
|
||||||
|
|
@ -87,25 +87,25 @@ class C:
|
||||||
def inner_a(positional=self.a):
|
def inner_a(positional=self.a):
|
||||||
return
|
return
|
||||||
self.a = inner_a
|
self.a = inner_a
|
||||||
# revealed: def inner_a(positional=Unknown | (def inner_a(positional=Unknown) -> Unknown)) -> Unknown
|
# revealed: def inner_a(positional=self.a) -> Unknown
|
||||||
reveal_type(inner_a)
|
reveal_type(inner_a)
|
||||||
|
|
||||||
def inner_b(*, kw_only=self.b):
|
def inner_b(*, kw_only=self.b):
|
||||||
return
|
return
|
||||||
self.b = inner_b
|
self.b = inner_b
|
||||||
# revealed: def inner_b(*, kw_only=Unknown | (def inner_b(*, kw_only=Unknown) -> Unknown)) -> Unknown
|
# revealed: def inner_b(*, kw_only=self.b) -> Unknown
|
||||||
reveal_type(inner_b)
|
reveal_type(inner_b)
|
||||||
|
|
||||||
def inner_c(positional_only=self.c, /):
|
def inner_c(positional_only=self.c, /):
|
||||||
return
|
return
|
||||||
self.c = inner_c
|
self.c = inner_c
|
||||||
# revealed: def inner_c(positional_only=Unknown | (def inner_c(positional_only=Unknown, /) -> Unknown), /) -> Unknown
|
# revealed: def inner_c(positional_only=self.c, /) -> Unknown
|
||||||
reveal_type(inner_c)
|
reveal_type(inner_c)
|
||||||
|
|
||||||
def inner_d(*, kw_only=self.d):
|
def inner_d(*, kw_only=self.d):
|
||||||
return
|
return
|
||||||
self.d = inner_d
|
self.d = inner_d
|
||||||
# revealed: def inner_d(*, kw_only=Unknown | (def inner_d(*, kw_only=Unknown) -> Unknown)) -> Unknown
|
# revealed: def inner_d(*, kw_only=self.d) -> Unknown
|
||||||
reveal_type(inner_d)
|
reveal_type(inner_d)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -114,7 +114,7 @@ We do, however, still check assignability of the default value to the parameter
|
||||||
```py
|
```py
|
||||||
class D:
|
class D:
|
||||||
def f(self: "D"):
|
def f(self: "D"):
|
||||||
# error: [invalid-parameter-default] "Default value of type `Unknown | (def inner_a(a: int = Unknown | (def inner_a(a: int = Unknown) -> Unknown)) -> Unknown)` is not assignable to annotated parameter type `int`"
|
# error: [invalid-parameter-default] "Default value of type `Unknown | (def inner_a(a: int = self.a) -> Unknown)` is not assignable to annotated parameter type `int`"
|
||||||
def inner_a(a: int = self.a): ...
|
def inner_a(a: int = self.a): ...
|
||||||
self.a = inner_a
|
self.a = inner_a
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ class D:
|
||||||
(x): int = 1
|
(x): int = 1
|
||||||
|
|
||||||
# TODO: should ideally not include a `x` parameter
|
# TODO: should ideally not include a `x` parameter
|
||||||
reveal_type(D.__init__) # revealed (self: D, x: int = 1) -> None
|
reveal_type(D.__init__) # revealed:(self: D, x: int = 1) -> None
|
||||||
```
|
```
|
||||||
|
|
||||||
## `@dataclass` calls with arguments
|
## `@dataclass` calls with arguments
|
||||||
|
|
@ -670,7 +670,7 @@ class A:
|
||||||
a: str = field(kw_only=False)
|
a: str = field(kw_only=False)
|
||||||
b: int = 0
|
b: int = 0
|
||||||
|
|
||||||
reveal_type(A.__init__) # revealed (self: A, a: str, *, b: int = 0) -> None
|
reveal_type(A.__init__) # revealed:(self: A, a: str, *, b: int = 0) -> None
|
||||||
|
|
||||||
A("hi")
|
A("hi")
|
||||||
```
|
```
|
||||||
|
|
@ -991,7 +991,7 @@ class C:
|
||||||
class_variable1: ClassVar[Final[int]] = 1
|
class_variable1: ClassVar[Final[int]] = 1
|
||||||
class_variable2: ClassVar[Final[int]] = 1
|
class_variable2: ClassVar[Final[int]] = 1
|
||||||
|
|
||||||
reveal_type(C.__init__) # revealed (self: C, instance_variable_no_default: int, instance_variable: int = 1) -> None
|
reveal_type(C.__init__) # revealed:(self: C, instance_variable_no_default: int, instance_variable: int = 1) -> None
|
||||||
|
|
||||||
c = C(1)
|
c = C(1)
|
||||||
# error: [invalid-assignment] "Cannot assign to final attribute `instance_variable` on type `C`"
|
# error: [invalid-assignment] "Cannot assign to final attribute `instance_variable` on type `C`"
|
||||||
|
|
@ -1082,7 +1082,7 @@ class C(Base):
|
||||||
z: int = 10
|
z: int = 10
|
||||||
x: int = 15
|
x: int = 15
|
||||||
|
|
||||||
reveal_type(C.__init__) # revealed (self: C, x: int = Literal[15], y: int = Literal[0], z: int = 10) -> None
|
reveal_type(C.__init__) # revealed:(self: C, x: int = Literal[15], y: int = Literal[0], z: int = 10) -> None
|
||||||
```
|
```
|
||||||
|
|
||||||
## Conditionally defined fields
|
## Conditionally defined fields
|
||||||
|
|
|
||||||
|
|
@ -591,9 +591,9 @@ try:
|
||||||
reveal_type(x) # revealed: B | D
|
reveal_type(x) # revealed: B | D
|
||||||
reveal_type(x) # revealed: B | D
|
reveal_type(x) # revealed: B | D
|
||||||
x = foo
|
x = foo
|
||||||
reveal_type(x) # revealed: def foo(param=A) -> Unknown
|
reveal_type(x) # revealed: def foo(param=could_raise_returns_A()) -> Unknown
|
||||||
except:
|
except:
|
||||||
reveal_type(x) # revealed: Literal[1] | (def foo(param=A) -> Unknown)
|
reveal_type(x) # revealed: Literal[1] | (def foo(param=could_raise_returns_A()) -> Unknown)
|
||||||
|
|
||||||
class Bar:
|
class Bar:
|
||||||
x = could_raise_returns_E()
|
x = could_raise_returns_E()
|
||||||
|
|
@ -603,9 +603,9 @@ except:
|
||||||
reveal_type(x) # revealed: <class 'Bar'>
|
reveal_type(x) # revealed: <class 'Bar'>
|
||||||
finally:
|
finally:
|
||||||
# TODO: should be `Literal[1] | <class 'foo'> | <class 'Bar'>`
|
# TODO: should be `Literal[1] | <class 'foo'> | <class 'Bar'>`
|
||||||
reveal_type(x) # revealed: (def foo(param=A) -> Unknown) | <class 'Bar'>
|
reveal_type(x) # revealed: (def foo(param=could_raise_returns_A()) -> Unknown) | <class 'Bar'>
|
||||||
|
|
||||||
reveal_type(x) # revealed: (def foo(param=A) -> Unknown) | <class 'Bar'>
|
reveal_type(x) # revealed: (def foo(param=could_raise_returns_A()) -> Unknown) | <class 'Bar'>
|
||||||
```
|
```
|
||||||
|
|
||||||
[1]: https://astral-sh.notion.site/Exception-handler-control-flow-11348797e1ca80bb8ce1e9aedbbe439d
|
[1]: https://astral-sh.notion.site/Exception-handler-control-flow-11348797e1ca80bb8ce1e9aedbbe439d
|
||||||
|
|
|
||||||
|
|
@ -477,7 +477,7 @@ def keyword_only_with_default_2(*, y: int = 42) -> int:
|
||||||
# parameter list i.e., `()`
|
# parameter list i.e., `()`
|
||||||
# TODO: This shouldn't error
|
# TODO: This shouldn't error
|
||||||
# error: [invalid-argument-type]
|
# error: [invalid-argument-type]
|
||||||
# revealed (*, x: int = 42) -> bool
|
# revealed: (*, x: int = 42) -> bool
|
||||||
reveal_type(multiple(keyword_only_with_default_1, keyword_only_with_default_2))
|
reveal_type(multiple(keyword_only_with_default_1, keyword_only_with_default_2))
|
||||||
|
|
||||||
def keyword_only1(*, x: int) -> int:
|
def keyword_only1(*, x: int) -> int:
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ inside the module:
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
reveal_type(typing.__name__) # revealed: str
|
reveal_type(typing.__name__) # revealed: str
|
||||||
reveal_type(typing.__init__) # revealed: bound method ModuleType.__init__(name: str, doc: str | None = EllipsisType) -> None
|
reveal_type(typing.__init__) # revealed: bound method ModuleType.__init__(name: str, doc: str | None = ...) -> None
|
||||||
|
|
||||||
# For a stub module, we don't know that `__file__` is a string (at runtime it may be entirely
|
# For a stub module, we don't know that `__file__` is a string (at runtime it may be entirely
|
||||||
# unset, but we follow typeshed here):
|
# unset, but we follow typeshed here):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue