File tree Expand file tree Collapse file tree 3 files changed +19
-0
lines changed Expand file tree Collapse file tree 3 files changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -17,6 +17,11 @@ What's New in astroid 3.0.2?
17
17
============================
18
18
Release date: TBA
19
19
20
+ * Avoid duplicate inference results for some uses of ``typing.X`` constructs like
21
+ ``Tuple[Optional[int], ...]``. This was causing pylint to occasionally omit
22
+ messages like ``deprecated-typing-alias``.
23
+
24
+ Closes pylint-dev/pylint#9220
20
25
21
26
22
27
What's New in astroid 3.0.1?
Original file line number Diff line number Diff line change @@ -188,6 +188,8 @@ def infer_typing_attr(
188
188
cache = node .parent .__cache # type: ignore[attr-defined] # Unrecognized getattr
189
189
if cache .get (node .parent .slots ) is not None :
190
190
del cache [node .parent .slots ]
191
+ # Avoid re-instantiating this class every time it's seen
192
+ node ._explicit_inference = lambda node , context : iter ([value ])
191
193
return iter ([value ])
192
194
193
195
node = extract_node (TYPING_TYPE_TEMPLATE .format (value .qname ().split ("." )[- 1 ]))
@@ -393,6 +395,8 @@ def infer_special_alias(
393
395
class_def .postinit (bases = [res ], body = [], decorators = None )
394
396
func_to_add = _extract_single_node (CLASS_GETITEM_TEMPLATE )
395
397
class_def .locals ["__class_getitem__" ] = [func_to_add ]
398
+ # Avoid re-instantiating this class every time it's seen
399
+ node ._explicit_inference = lambda node , context : iter ([class_def ])
396
400
return iter ([class_def ])
397
401
398
402
Original file line number Diff line number Diff line change @@ -668,6 +668,16 @@ def test_typing_no_duplicates(self):
668
668
)
669
669
assert len (node .inferred ()) == 1
670
670
671
+ @test_utils .require_version (minver = "3.9" )
672
+ def test_typing_no_duplicates_2 (self ):
673
+ node = builder .extract_node (
674
+ """
675
+ from typing import Optional, Tuple
676
+ Tuple[Optional[int], ...]
677
+ """
678
+ )
679
+ assert len (node .inferred ()) == 1
680
+
671
681
def test_collections_generic_alias_slots (self ):
672
682
"""Test slots for a class which is a subclass of a generic alias type."""
673
683
node = builder .extract_node (
You can’t perform that action at this time.
0 commit comments