MCPcopy Index your code
hub / github.com/python/mypy / NamedTupleAnalyzer

Class NamedTupleAnalyzer

mypy/semanal_namedtuple.py:99–725  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

97
98
99class NamedTupleAnalyzer:
100 def __init__(
101 self, options: Options, api: SemanticAnalyzerInterface, msg: MessageBuilder
102 ) -> None:
103 self.options = options
104 self.api = api
105 self.msg = msg
106
107 def analyze_namedtuple_classdef(
108 self, defn: ClassDef, is_stub_file: bool, is_func_scope: bool
109 ) -> tuple[bool, TypeInfo | None]:
110 """Analyze if given class definition can be a named tuple definition.
111
112 Return a tuple where first item indicates whether this can possibly be a named tuple,
113 and the second item is the corresponding TypeInfo (may be None if not ready and should be
114 deferred).
115 """
116 for base_expr in defn.base_type_exprs:
117 if isinstance(base_expr, RefExpr):
118 self.api.accept(base_expr)
119 if base_expr.fullname in TYPED_NAMEDTUPLE_NAMES:
120 result = self.check_namedtuple_classdef(defn, is_stub_file)
121 if result is None:
122 # This is a valid named tuple, but some types are incomplete.
123 return True, None
124 items, types, default_items, statements = result
125 if is_func_scope and "@" not in defn.name:
126 defn.name += "@" + str(defn.line)
127 existing_info = None
128 if isinstance(defn.analyzed, NamedTupleExpr):
129 existing_info = defn.analyzed.info
130 info = self.build_namedtuple_typeinfo(
131 defn.name, items, types, default_items, defn.line, existing_info
132 )
133 defn.analyzed = NamedTupleExpr(info, is_typed=True)
134 defn.analyzed.line = defn.line
135 defn.analyzed.column = defn.column
136 defn.defs.body = statements
137 # All done: this is a valid named tuple with all types known.
138 return True, info
139 # This can't be a valid named tuple.
140 return False, None
141
142 def check_namedtuple_classdef(
143 self, defn: ClassDef, is_stub_file: bool
144 ) -> tuple[list[str], list[Type], dict[str, Expression], list[Statement]] | None:
145 """Parse and validate fields in named tuple class definition.
146
147 Return a four tuple:
148 * field names
149 * field types
150 * field default values
151 * valid statements
152 or None, if any of the types are not ready.
153 """
154 if len(defn.base_type_exprs) > 1:
155 self.fail("NamedTuple should be a single base", defn)
156 items: list[str] = []

Callers 1

file_contextMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…