From 76172d4dfabba4d18ef821c2ef223f9feea03d04 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Wed, 7 Apr 2021 10:46:05 +0200 Subject: [PATCH] Use inference_tip for typing.TypedDict brain (#928) --- ChangeLog | 3 +++ astroid/brain/brain_typing.py | 8 +++----- tests/unittest_brain.py | 7 ++----- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index d500329fe1..4b16576793 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17,6 +17,9 @@ Release Date: TBA Closes PyCQA/pylint#4206 +* Use ``inference_tip`` for ``typing.TypedDict`` brain. + + What's New in astroid 2.5.2? ============================ Release Date: 2021-03-28 diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py index 5fa3c9edfb..2bec1e9632 100644 --- a/astroid/brain/brain_typing.py +++ b/astroid/brain/brain_typing.py @@ -104,17 +104,15 @@ def _looks_like_typedDict( # pylint: disable=invalid-name def infer_typedDict( # pylint: disable=invalid-name node: nodes.FunctionDef, ctx: context.InferenceContext = None -) -> None: +) -> typing.Iterator[nodes.ClassDef]: """Replace TypedDict FunctionDef with ClassDef.""" class_def = nodes.ClassDef( name="TypedDict", - doc=node.doc, lineno=node.lineno, col_offset=node.col_offset, parent=node.parent, ) - class_def.postinit(bases=[], body=[], decorators=None) - node.root().locals["TypedDict"] = [class_def] + return iter([class_def]) CLASS_GETITEM_TEMPLATE = """ @@ -238,7 +236,7 @@ def infer_typing_alias( if PY39: MANAGER.register_transform( - nodes.FunctionDef, infer_typedDict, _looks_like_typedDict + nodes.FunctionDef, inference_tip(infer_typedDict), _looks_like_typedDict ) if PY37: diff --git a/tests/unittest_brain.py b/tests/unittest_brain.py index 57b9dc0910..c1ef8103a1 100644 --- a/tests/unittest_brain.py +++ b/tests/unittest_brain.py @@ -1372,12 +1372,9 @@ class CustomTD(TypedDict): var: int """ ) - assert len(node.bases) == 1 inferred_base = next(node.bases[0].infer()) - self.assertIsInstance(inferred_base, nodes.ClassDef, node.as_string()) - typing_module = inferred_base.root() - assert len(typing_module.locals["TypedDict"]) == 1 - assert inferred_base == typing_module.locals["TypedDict"][0] + assert isinstance(inferred_base, nodes.ClassDef) + assert inferred_base.qname() == "typing.TypedDict" @test_utils.require_version(minver="3.7") def test_typing_alias_type(self):