diff options
author | Yilei "Dolee" Yang <yileiyang@google.com> | 2023-04-07 00:16:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-07 07:16:29 +0000 |
commit | cb255eaaed8bba6bec1f7bf5d4cde15821c1dd46 (patch) | |
tree | dfc919cdd22f126f5b5e03f9a780d2722168cc8e | |
parent | eeddd667a6e73ef58fb47cdda154c1751f0ffe71 (diff) | |
download | pylint-git-cb255eaaed8bba6bec1f7bf5d4cde15821c1dd46.tar.gz |
Fix typelias `invalid-name` false positives for Union variables without assignment. (#8541)
-rw-r--r-- | doc/whatsnew/fragments/8540.false_positive | 4 | ||||
-rw-r--r-- | pylint/checkers/base/name_checker/checker.py | 5 | ||||
-rw-r--r-- | tests/functional/t/typealias_naming_style_default.py | 5 | ||||
-rw-r--r-- | tests/functional/t/typealias_naming_style_rgx.py | 4 |
4 files changed, 11 insertions, 7 deletions
diff --git a/doc/whatsnew/fragments/8540.false_positive b/doc/whatsnew/fragments/8540.false_positive new file mode 100644 index 000000000..543913637 --- /dev/null +++ b/doc/whatsnew/fragments/8540.false_positive @@ -0,0 +1,4 @@ +`Union` typed variables without assignment are no longer treated as +`TypeAlias`. + +Closes #8540 diff --git a/pylint/checkers/base/name_checker/checker.py b/pylint/checkers/base/name_checker/checker.py index 12cc584db..9203d7acf 100644 --- a/pylint/checkers/base/name_checker/checker.py +++ b/pylint/checkers/base/name_checker/checker.py @@ -602,10 +602,7 @@ class NameChecker(_BasicChecker): # Union is a special case because it can be used as a type alias # or as a type annotation. We only want to check the former. assert node is not None - return not ( - isinstance(node.parent, nodes.AnnAssign) - and node.parent.value is not None - ) + return not isinstance(node.parent, nodes.AnnAssign) elif isinstance(inferred, nodes.FunctionDef): if inferred.qname() == "typing.TypeAlias": return True diff --git a/tests/functional/t/typealias_naming_style_default.py b/tests/functional/t/typealias_naming_style_default.py index 6b27c14a0..8baabb49c 100644 --- a/tests/functional/t/typealias_naming_style_default.py +++ b/tests/functional/t/typealias_naming_style_default.py @@ -26,5 +26,8 @@ _1BadName = Union[int, str] # [invalid-name] ANOTHERBADNAME = Union[int, str] # [invalid-name] # Regression tests -# This is not a TypeAlias, and thus shouldn't flag the message +# They are not TypeAlias, and thus shouldn't flag the message x: Union[str, int] = 42 +y: Union[str, int] +# But the following, using a good TypeAlias name, is: +GoodTypeAliasToUnion: TypeAlias = Union[str, int] diff --git a/tests/functional/t/typealias_naming_style_rgx.py b/tests/functional/t/typealias_naming_style_rgx.py index 0910644da..bc43b930d 100644 --- a/tests/functional/t/typealias_naming_style_rgx.py +++ b/tests/functional/t/typealias_naming_style_rgx.py @@ -3,8 +3,8 @@ from typing import TypeAlias, Union # Valid TypeAliasShouldBeLikeThis: TypeAlias = int -_TypeAliasShouldBeLikeThis: Union[str, int] +_TypeAliasShouldBeLikeThis = Union[str, int] # Invalid TypeAliasShouldntBeLikeThis: TypeAlias = int # [invalid-name] -_TypeAliasShouldntBeLikeThis: Union[str, int] # [invalid-name] +_TypeAliasShouldntBeLikeThis = Union[str, int] # [invalid-name] |