from typing import Literal, Union def func1(arg1: Literal[None]): ... def func2(arg1: Literal[None] | int): ... def func3() -> Literal[None]: ... def func4(arg1: Literal[int, None, float]): ... def func5(arg1: Literal[None, None]): ... def func6(arg1: Literal[ "hello", None # Comment 1 , "world" ]): ... def func7(arg1: Literal[ None # Comment 1 ]): ... def func8(arg1: Literal[None] | None):... def func9(arg1: Union[Literal[None], None]): ... # OK def good_func(arg1: Literal[int] | None): ... # From flake8-pyi Literal[None] # PYI061 None inside "Literal[]" expression. Replace with "None" Literal[True, None] # PYI061 None inside "Literal[]" expression. Replace with "Literal[True] | None" # Regression tests for https://github.com/astral-sh/ruff/issues/14567 x: Literal[None] | None y: None | Literal[None] z: Union[Literal[None], None] a: int | Literal[None] | None b: None | Literal[None] | None c: (None | Literal[None]) | None d: None | (Literal[None] | None) e: None | ((None | Literal[None]) | None) | None f: Literal[None] | Literal[None]