Skip to content

Commit 841401d

Browse files
DanielNoordcdce8p
andauthored
Add some typing to NamedTuple brain (#1412)
Co-authored-by: Marc Mueller <[email protected]>
1 parent 56f5f05 commit 841401d

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

astroid/brain/brain_namedtuple_enum.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
import functools
3232
import keyword
3333
from textwrap import dedent
34+
from typing import Iterator, List, Optional, Tuple
3435

3536
import astroid
3637
from astroid import arguments, inference_tip, nodes, util
3738
from astroid.builder import AstroidBuilder, extract_node
39+
from astroid.context import InferenceContext
3840
from astroid.exceptions import (
3941
AstroidTypeError,
4042
AstroidValueError,
@@ -90,7 +92,12 @@ def _extract_namedtuple_arg_or_keyword( # pylint: disable=inconsistent-return-s
9092
raise UseInferenceDefault()
9193

9294

93-
def infer_func_form(node, base_type, context=None, enum=False):
95+
def infer_func_form(
96+
node: nodes.Call,
97+
base_type: nodes.NodeNG,
98+
context: Optional[InferenceContext] = None,
99+
enum: bool = False,
100+
) -> Tuple[nodes.ClassDef, str, List[str]]:
94101
"""Specific inference function for namedtuple or Python 3 enum."""
95102
# node is a Call node, class name as first argument and generated class
96103
# attributes as second argument
@@ -102,10 +109,13 @@ def infer_func_form(node, base_type, context=None, enum=False):
102109
try:
103110
attributes = names.value.replace(",", " ").split()
104111
except AttributeError as exc:
112+
# Handle attributes of NamedTuples
105113
if not enum:
106114
attributes = [
107115
_infer_first(const, context).value for const in names.elts
108116
]
117+
118+
# Handle attributes of Enums
109119
else:
110120
# Enums supports either iterator of (name, value) pairs
111121
# or mappings.
@@ -183,7 +193,9 @@ def _looks_like(node, name):
183193
_looks_like_typing_namedtuple = functools.partial(_looks_like, name="NamedTuple")
184194

185195

186-
def infer_named_tuple(node, context=None):
196+
def infer_named_tuple(
197+
node: nodes.Call, context: Optional[InferenceContext] = None
198+
) -> Iterator[nodes.ClassDef]:
187199
"""Specific inference function for namedtuple Call node"""
188200
tuple_base_name = nodes.Name(name="tuple", parent=node.root())
189201
class_node, name, attributes = infer_func_form(
@@ -507,7 +519,9 @@ def infer_typing_namedtuple_function(node, context=None):
507519
return klass.infer(context)
508520

509521

510-
def infer_typing_namedtuple(node, context=None):
522+
def infer_typing_namedtuple(
523+
node: nodes.Call, context: Optional[InferenceContext] = None
524+
) -> Iterator[nodes.ClassDef]:
511525
"""Infer a typing.NamedTuple(...) call."""
512526
# This is essentially a namedtuple with different arguments
513527
# so we extract the args and infer a named tuple.

0 commit comments

Comments
 (0)