mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:25:17 +00:00

## Summary Similar to #11414, this PR extends `UP037` to flag quoted annotations that are located in positions that won't be evaluated at runtime. For example, the quotes on `Tuple` are unnecessary in: ```python from typing import TYPE_CHECKING if TYPE_CHECKING: from typing import Tuple def foo(): x: "Tuple[int, int]" = (0, 0) foo() ```
108 lines
1.5 KiB
Python
108 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import (
|
|
Annotated,
|
|
Callable,
|
|
List,
|
|
Literal,
|
|
NamedTuple,
|
|
Tuple,
|
|
TypeVar,
|
|
TypedDict,
|
|
cast,
|
|
)
|
|
|
|
from mypy_extensions import Arg, DefaultArg, DefaultNamedArg, NamedArg, VarArg
|
|
|
|
|
|
def foo(var: "MyClass") -> "MyClass":
|
|
x: "MyClass"
|
|
|
|
|
|
def foo(*, inplace: "bool"):
|
|
pass
|
|
|
|
|
|
def foo(*args: "str", **kwargs: "int"):
|
|
pass
|
|
|
|
|
|
x: Tuple["MyClass"]
|
|
|
|
x: Callable[["MyClass"], None]
|
|
|
|
|
|
class Foo(NamedTuple):
|
|
x: "MyClass"
|
|
|
|
|
|
class D(TypedDict):
|
|
E: TypedDict("E", foo="int", total=False)
|
|
|
|
|
|
class D(TypedDict):
|
|
E: TypedDict("E", {"foo": "int"})
|
|
|
|
|
|
x: Annotated["str", "metadata"]
|
|
|
|
x: Arg("str", "name")
|
|
|
|
x: DefaultArg("str", "name")
|
|
|
|
x: NamedArg("str", "name")
|
|
|
|
x: DefaultNamedArg("str", "name")
|
|
|
|
x: DefaultNamedArg("str", name="name")
|
|
|
|
x: VarArg("str")
|
|
|
|
x: List[List[List["MyClass"]]]
|
|
|
|
x: NamedTuple("X", [("foo", "int"), ("bar", "str")])
|
|
|
|
x: NamedTuple("X", fields=[("foo", "int"), ("bar", "str")])
|
|
|
|
x: NamedTuple(typename="X", fields=[("foo", "int")])
|
|
|
|
X: MyCallable("X")
|
|
|
|
|
|
# OK
|
|
class D(TypedDict):
|
|
E: TypedDict("E")
|
|
|
|
|
|
x: Annotated[()]
|
|
|
|
x: DefaultNamedArg(name="name", quox="str")
|
|
|
|
x: DefaultNamedArg(name="name")
|
|
|
|
x: NamedTuple("X", [("foo",), ("bar",)])
|
|
|
|
x: NamedTuple("X", ["foo", "bar"])
|
|
|
|
x: NamedTuple()
|
|
|
|
x: Literal["foo", "bar"]
|
|
|
|
x = cast(x, "str")
|
|
|
|
|
|
def foo(x, *args, **kwargs):
|
|
...
|
|
|
|
|
|
def foo(*, inplace):
|
|
...
|
|
|
|
|
|
x: Annotated[1:2] = ...
|
|
|
|
x = TypeVar("x", "str", "int")
|
|
|
|
x = cast("str", x)
|
|
|
|
X = List["MyClass"]
|