mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:25:17 +00:00
113 lines
4.1 KiB
Python
113 lines
4.1 KiB
Python
import typing
|
|
|
|
# Shouldn't affect non-union field types.
|
|
field1: str
|
|
|
|
# Should emit for duplicate field types.
|
|
field2: str | str # PYI016: Duplicate union member `str`
|
|
|
|
# Should emit for union types in arguments.
|
|
def func1(arg1: int | int): # PYI016: Duplicate union member `int`
|
|
print(arg1)
|
|
|
|
# Should emit for unions in return types.
|
|
def func2() -> str | str: # PYI016: Duplicate union member `str`
|
|
return "my string"
|
|
|
|
# Should emit in longer unions, even if not directly adjacent.
|
|
field3: str | str | int # PYI016: Duplicate union member `str`
|
|
field4: int | int | str # PYI016: Duplicate union member `int`
|
|
field5: str | int | str # PYI016: Duplicate union member `str`
|
|
field6: int | bool | str | int # PYI016: Duplicate union member `int`
|
|
|
|
# Shouldn't emit for non-type unions.
|
|
field7 = str | str
|
|
|
|
# Should emit for strangely-bracketed unions.
|
|
field8: int | (str | int) # PYI016: Duplicate union member `int`
|
|
|
|
# Should handle user brackets when fixing.
|
|
field9: int | (int | str) # PYI016: Duplicate union member `int`
|
|
field10: (str | int) | str # PYI016: Duplicate union member `str`
|
|
|
|
# Should emit for nested unions.
|
|
field11: dict[int | int, str]
|
|
|
|
# Should emit for unions with more than two cases
|
|
field12: int | int | int # Error
|
|
field13: int | int | int | int # Error
|
|
|
|
# Should emit for unions with more than two cases, even if not directly adjacent
|
|
field14: int | int | str | int # Error
|
|
|
|
# Should emit for duplicate literal types; also covered by PYI030
|
|
field15: typing.Literal[1] | typing.Literal[1] # Error
|
|
|
|
# Shouldn't emit if in new parent type
|
|
field16: int | dict[int, str] # OK
|
|
|
|
# Shouldn't emit if not in a union parent
|
|
field17: dict[int, int] # OK
|
|
|
|
# Should emit in cases with newlines
|
|
field18: typing.Union[
|
|
set[
|
|
int # foo
|
|
],
|
|
set[
|
|
int # bar
|
|
],
|
|
] # Error, newline and comment will not be emitted in message
|
|
|
|
# Should emit in cases with `typing.Union` instead of `|`
|
|
field19: typing.Union[int, int] # Error
|
|
|
|
# Should emit in cases with nested `typing.Union`
|
|
field20: typing.Union[int, typing.Union[int, str]] # Error
|
|
|
|
# Should emit in cases with mixed `typing.Union` and `|`
|
|
field21: typing.Union[int, int | str] # Error
|
|
|
|
# Should emit only once in cases with multiple nested `typing.Union`
|
|
field22: typing.Union[int, typing.Union[int, typing.Union[int, int]]] # Error
|
|
|
|
# Should emit in cases with newlines
|
|
field23: set[ # foo
|
|
int] | set[int]
|
|
|
|
# Should emit twice (once for each `int` in the nested union, both of which are
|
|
# duplicates of the outer `int`), but not three times (which would indicate that
|
|
# we incorrectly re-checked the nested union).
|
|
field24: typing.Union[int, typing.Union[int, int]] # PYI016: Duplicate union member `int`
|
|
|
|
# Should emit twice (once for each `int` in the nested union, both of which are
|
|
# duplicates of the outer `int`), but not three times (which would indicate that
|
|
# we incorrectly re-checked the nested union).
|
|
field25: typing.Union[int, int | int] # PYI016: Duplicate union member `int`
|
|
|
|
# Should emit in cases with nested `typing.Union`
|
|
field26: typing.Union[typing.Union[int, int]] # PYI016: Duplicate union member `int`
|
|
|
|
# Should emit in cases with nested `typing.Union`
|
|
field27: typing.Union[typing.Union[typing.Union[int, int]]] # PYI016: Duplicate union member `int`
|
|
|
|
# Should emit in cases with mixed `typing.Union` and `|`
|
|
field28: typing.Union[int | int] # Error
|
|
|
|
# Should emit twice in cases with multiple nested `typing.Union`
|
|
field29: typing.Union[int, typing.Union[typing.Union[int, int]]] # Error
|
|
|
|
# Should emit once in cases with multiple nested `typing.Union`
|
|
field30: typing.Union[int, typing.Union[typing.Union[int, str]]] # Error
|
|
|
|
# Should emit once, and fix to `typing.Union[float, int]`
|
|
field31: typing.Union[float, typing.Union[int | int]] # Error
|
|
|
|
# Should emit once, and fix to `typing.Union[float, int]`
|
|
field32: typing.Union[float, typing.Union[int | int | int]] # Error
|
|
|
|
# Test case for mixed union type fix
|
|
field33: typing.Union[typing.Union[int | int] | typing.Union[int | int]] # Error
|
|
|
|
# Test case for mixed union type
|
|
field34: typing.Union[list[int], str] | typing.Union[bytes, list[int]] # Error
|