diff options
author | Rogdham <contact@rogdham.net> | 2023-04-07 18:54:23 +0200 |
---|---|---|
committer | Daniƫl van Noord <13665637+DanielNoord@users.noreply.github.com> | 2023-04-07 21:50:41 +0200 |
commit | b5f2b01635edd23fecc1546f3fdb2a41e6a51995 (patch) | |
tree | 32e1a46c1587893dc70baf4bcf7b6055708ec1a5 /pylint | |
parent | cb255eaaed8bba6bec1f7bf5d4cde15821c1dd46 (diff) | |
download | pylint-git-b5f2b01635edd23fecc1546f3fdb2a41e6a51995.tar.gz |
Fix isinstance-second-argument-not-valid-type for union types with None
Diffstat (limited to 'pylint')
-rw-r--r-- | pylint/checkers/typecheck.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py index 42131f936..7605d6b67 100644 --- a/pylint/checkers/typecheck.py +++ b/pylint/checkers/typecheck.py @@ -37,6 +37,7 @@ from pylint.checkers.utils import ( is_mapping, is_module_ignored, is_node_in_type_annotation_context, + is_none, is_overload_stub, is_postponed_evaluation_enabled, is_super, @@ -798,8 +799,9 @@ def _is_c_extension(module_node: InferenceResult) -> bool: def _is_invalid_isinstance_type(arg: nodes.NodeNG) -> bool: # Return True if we are sure that arg is not a type if PY310_PLUS and isinstance(arg, nodes.BinOp) and arg.op == "|": - return _is_invalid_isinstance_type(arg.left) or _is_invalid_isinstance_type( - arg.right + return any( + _is_invalid_isinstance_type(elt) and not is_none(elt) + for elt in (arg.left, arg.right) ) inferred = utils.safe_infer(arg) if not inferred: @@ -812,9 +814,10 @@ def _is_invalid_isinstance_type(arg: nodes.NodeNG) -> bool: if isinstance(inferred, astroid.Instance) and inferred.qname() == BUILTIN_TUPLE: return False if PY310_PLUS and isinstance(inferred, bases.UnionType): - return _is_invalid_isinstance_type( - inferred.left - ) or _is_invalid_isinstance_type(inferred.right) + return any( + _is_invalid_isinstance_type(elt) and not is_none(elt) + for elt in (inferred.left, inferred.right) + ) return True |