mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-30 11:36:57 +00:00
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / check playground (push) Blocked by required conditions
CI / benchmarks-instrumented (push) Blocked by required conditions
CI / benchmarks-walltime (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
<!-- Thank you for contributing to Ruff/ty! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? (Please prefix with `[ty]` for ty pull requests.) - Does this pull request include references to any relevant issues? --> ## Summary Make `UP045` ignore `Optional[NamedTuple]` as `NamedTuple` is a function (not a proper type). Rewriting it to `NamedTuple | None` breaks at runtime. While type checkers currently accept `NamedTuple` as a type, they arguably shouldn't. Therefore, we outright ignore it and don't touch or lint on it. For a more detailed discussion, see the linked issue. ## Test Plan Added examples to the existing tests. ## Related Issues Fixes: https://github.com/astral-sh/ruff/issues/18619
141 lines
3.5 KiB
Python
141 lines
3.5 KiB
Python
import typing
|
|
from typing import Union
|
|
|
|
|
|
def f(x: Union[str, int, Union[float, bytes]]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: typing.Union[str, int]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: typing.Union[(str, int)]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: typing.Union[(str, int), float]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: typing.Union[(int,)]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: typing.Union[()]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: "Union[str, int, Union[float, bytes]]") -> None:
|
|
...
|
|
|
|
|
|
def f(x: "typing.Union[str, int]") -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union["str", int]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union[("str", "int"), float]) -> None:
|
|
...
|
|
|
|
|
|
def f() -> None:
|
|
x = Union[str, int]
|
|
x = Union["str", "int"]
|
|
x: Union[str, int]
|
|
x: Union["str", "int"]
|
|
|
|
|
|
def f(x: Union[int : float]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union[str, int : float]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union[x := int]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union[str, x := int]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union[lambda: int]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Union[str, lambda: int]) -> None:
|
|
...
|
|
|
|
|
|
# Regression test for: https://github.com/astral-sh/ruff/issues/7452
|
|
class Collection(Protocol[*_B0]):
|
|
def __iter__(self) -> Iterator[Union[*_B0]]:
|
|
...
|
|
|
|
|
|
# Regression test for: https://github.com/astral-sh/ruff/issues/8609
|
|
def f(x: Union[int, str, bytes]) -> None:
|
|
...
|
|
|
|
|
|
# Regression test for https://github.com/astral-sh/ruff/issues/14132
|
|
class AClass:
|
|
...
|
|
|
|
def myfunc(param: "tuple[Union[int, 'AClass', None], str]"):
|
|
print(param)
|
|
|
|
|
|
from typing import NamedTuple, Union
|
|
|
|
import typing_extensions
|
|
from typing_extensions import (
|
|
NamedTuple as NamedTupleTE,
|
|
Union as UnionTE,
|
|
)
|
|
|
|
# Regression test for https://github.com/astral-sh/ruff/issues/18619
|
|
# Don't emit lint for `NamedTuple`
|
|
a_plain_1: Union[NamedTuple, int] = None
|
|
a_plain_2: Union[int, NamedTuple] = None
|
|
a_plain_3: Union[NamedTuple, None] = None
|
|
a_plain_4: Union[None, NamedTuple] = None
|
|
a_plain_te_1: UnionTE[NamedTupleTE, int] = None
|
|
a_plain_te_2: UnionTE[int, NamedTupleTE] = None
|
|
a_plain_te_3: UnionTE[NamedTupleTE, None] = None
|
|
a_plain_te_4: UnionTE[None, NamedTupleTE] = None
|
|
a_plain_typing_1: UnionTE[typing.NamedTuple, int] = None
|
|
a_plain_typing_2: UnionTE[int, typing.NamedTuple] = None
|
|
a_plain_typing_3: UnionTE[typing.NamedTuple, None] = None
|
|
a_plain_typing_4: UnionTE[None, typing.NamedTuple] = None
|
|
a_string_1: "Union[NamedTuple, int]" = None
|
|
a_string_2: "Union[int, NamedTuple]" = None
|
|
a_string_3: "Union[NamedTuple, None]" = None
|
|
a_string_4: "Union[None, NamedTuple]" = None
|
|
a_string_te_1: "UnionTE[NamedTupleTE, int]" = None
|
|
a_string_te_2: "UnionTE[int, NamedTupleTE]" = None
|
|
a_string_te_3: "UnionTE[NamedTupleTE, None]" = None
|
|
a_string_te_4: "UnionTE[None, NamedTupleTE]" = None
|
|
a_string_typing_1: "typing.Union[typing.NamedTuple, int]" = None
|
|
a_string_typing_2: "typing.Union[int, typing.NamedTuple]" = None
|
|
a_string_typing_3: "typing.Union[typing.NamedTuple, None]" = None
|
|
a_string_typing_4: "typing.Union[None, typing.NamedTuple]" = None
|
|
|
|
b_plain_1: Union[NamedTuple] = None
|
|
b_plain_2: Union[NamedTuple, None] = None
|
|
b_plain_te_1: UnionTE[NamedTupleTE] = None
|
|
b_plain_te_2: UnionTE[NamedTupleTE, None] = None
|
|
b_plain_typing_1: UnionTE[typing.NamedTuple] = None
|
|
b_plain_typing_2: UnionTE[typing.NamedTuple, None] = None
|
|
b_string_1: "Union[NamedTuple]" = None
|
|
b_string_2: "Union[NamedTuple, None]" = None
|
|
b_string_te_1: "UnionTE[NamedTupleTE]" = None
|
|
b_string_te_2: "UnionTE[NamedTupleTE, None]" = None
|
|
b_string_typing_1: "typing.Union[typing.NamedTuple]" = None
|
|
b_string_typing_2: "typing.Union[typing.NamedTuple, None]" = None
|