mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-04 18:58:04 +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
71 lines
1.5 KiB
Python
71 lines
1.5 KiB
Python
import typing
|
|
from typing import Optional
|
|
|
|
|
|
def f(x: Optional[str]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: typing.Optional[str]) -> None:
|
|
...
|
|
|
|
|
|
def f() -> None:
|
|
x: Optional[str]
|
|
x = Optional[str]
|
|
|
|
|
|
def f(x: list[Optional[int]]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Optional[int : float]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Optional[str, int : float]) -> None:
|
|
...
|
|
|
|
|
|
def f(x: Optional[int, float]) -> None:
|
|
...
|
|
|
|
|
|
# Regression test for: https://github.com/astral-sh/ruff/issues/7131
|
|
class ServiceRefOrValue:
|
|
service_specification: Optional[
|
|
list[ServiceSpecificationRef]
|
|
| list[ServiceSpecification]
|
|
] = None
|
|
|
|
|
|
# Regression test for: https://github.com/astral-sh/ruff/issues/7201
|
|
class ServiceRefOrValue:
|
|
service_specification: Optional[str]is not True = None
|
|
|
|
|
|
# Test for: https://github.com/astral-sh/ruff/issues/18508
|
|
# Optional[None] should not be offered a fix
|
|
foo: Optional[None] = None
|
|
|
|
|
|
from typing import NamedTuple, Optional
|
|
|
|
import typing_extensions
|
|
from typing_extensions import (
|
|
NamedTuple as NamedTupleTE,
|
|
Optional as OptionalTE,
|
|
)
|
|
|
|
# Regression test for https://github.com/astral-sh/ruff/issues/18619
|
|
# Don't emit lint for `NamedTuple`
|
|
a1: Optional[NamedTuple] = None
|
|
a2: typing.Optional[NamedTuple] = None
|
|
a3: OptionalTE[NamedTuple] = None
|
|
a4: typing_extensions.Optional[NamedTuple] = None
|
|
a5: Optional[typing.NamedTuple] = None
|
|
a6: typing.Optional[typing.NamedTuple] = None
|
|
a7: OptionalTE[typing.NamedTuple] = None
|
|
a8: typing_extensions.Optional[typing.NamedTuple] = None
|
|
a9: "Optional[NamedTuple]" = None
|
|
a10: Optional[NamedTupleTE] = None
|