from typing_extensions import TypeAlias
from typing import Union

# code to ignore
## assign
a = 123
a: Foo = 123
a: a | b
a = None
a: X | none = None
a: int | None = 123
## func def
def foo(): pass
def foo(a: int, b: None, c: int|None): pass
def foo(*, a: int|None = None) -> int|None: pass
X = None | Some
X: TypeAlias = Some | None
a: Union[x, None]
## calls
foo()
isinstance(x, Foo)
A = X | None
isinstance(x, str | None)

# code to find
# assign
a: int | None | float
a: None | int
b: Callable[[None|int], None|str]
# func def
def foo(a: int, b: None|int|float|str, *, c: None|str = "foo"): pass
def foo() -> None|int: pass
X: TypeAlias = None | Some
a: Union[None, int]
isinstance(x, bool | None | str)
