[refurb] Avoid None | None as well as better detection and fix (FURB168) (#15779)

This commit is contained in:
InSync 2025-01-31 18:34:57 +07:00 committed by GitHub
parent 4df0796d61
commit 59be5f5278
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 212 additions and 64 deletions

View file

@ -5,28 +5,45 @@ foo: object
if isinstance(foo, type(None)):
pass
if isinstance(foo, (type(None))):
if isinstance(foo and bar, type(None)):
pass
if isinstance(foo, (type(None), type(None), type(None))):
pass
if isinstance(foo, None | None):
if isinstance(foo, type(None)) is True:
pass
if isinstance(foo, (None | None)):
if -isinstance(foo, type(None)):
pass
if isinstance(foo, None | type(None)):
pass
if isinstance(foo, (None | type(None))):
if isinstance(foo, type(None) | type(None)):
pass
# A bit contrived, but is both technically valid and equivalent to the above.
if isinstance(foo, (type(None) | ((((type(None))))) | ((None | type(None))))):
pass
if isinstance(
foo, # Comment
None
):
...
from typing import Union
if isinstance(foo, Union[None]):
...
if isinstance(foo, Union[None, None]):
...
if isinstance(foo, Union[None, type(None)]):
...
# Okay.
@ -42,6 +59,12 @@ if isinstance(foo, (int, str)):
if isinstance(foo, (int, type(None), str)):
pass
if isinstance(foo, str | None):
pass
if isinstance(foo, Union[None, str]):
...
# This is a TypeError, which the rule ignores.
if isinstance(foo, None):
pass
@ -49,3 +72,16 @@ if isinstance(foo, None):
# This is also a TypeError, which the rule ignores.
if isinstance(foo, (None,)):
pass
if isinstance(foo, None | None):
pass
if isinstance(foo, (type(None) | ((((type(None))))) | ((None | None | type(None))))):
pass
# https://github.com/astral-sh/ruff/issues/15776
def _():
def type(*args): ...
if isinstance(foo, type(None)):
...