mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 21:35:58 +00:00

## Summary Fixes #17147. This was landed in #17149 and then reverted in #17335 because it caused cycle panics in checking pybind11. #17456 fixed the cause of that panic. ## Test Plan Add new narrow/assert.md test file Co-authored-by: Matthew Mckee <matthewmckee04@yahoo.co.uk>
1.1 KiB
1.1 KiB
Narrowing with assert statements
assert
a value is None
or is not None
def _(x: str | None, y: str | None):
assert x is not None
reveal_type(x) # revealed: str
assert y is None
reveal_type(y) # revealed: None
assert
a value is truthy or falsy
def _(x: bool, y: bool):
assert x
reveal_type(x) # revealed: Literal[True]
assert not y
reveal_type(y) # revealed: Literal[False]
assert
with is
and ==
for literals
from typing import Literal
def _(x: Literal[1, 2, 3], y: Literal[1, 2, 3]):
assert x is 2
reveal_type(x) # revealed: Literal[2]
assert y == 2
reveal_type(y) # revealed: Literal[1, 2, 3]
assert
with isinstance
def _(x: int | str):
assert isinstance(x, int)
reveal_type(x) # revealed: int
assert
a value in
a tuple
from typing import Literal
def _(x: Literal[1, 2, 3], y: Literal[1, 2, 3]):
assert x in (1, 2)
reveal_type(x) # revealed: Literal[1, 2]
assert y not in (1, 2)
reveal_type(y) # revealed: Literal[3]