@@ -60,7 +60,8 @@ def analyze_typeddict_classdef(self, defn: ClassDef) -> Tuple[bool, Optional[Typ
60
60
fields , types , required_keys = self .analyze_typeddict_classdef_fields (defn )
61
61
if fields is None :
62
62
return True , None # Defer
63
- info = self .build_typeddict_typeinfo (defn .name , fields , types , required_keys )
63
+ info = self .build_typeddict_typeinfo (defn .name , fields , types , required_keys ,
64
+ defn .line )
64
65
defn .analyzed = TypedDictExpr (info )
65
66
defn .analyzed .line = defn .line
66
67
defn .analyzed .column = defn .column
@@ -97,7 +98,7 @@ def analyze_typeddict_classdef(self, defn: ClassDef) -> Tuple[bool, Optional[Typ
97
98
keys .extend (new_keys )
98
99
types .extend (new_types )
99
100
required_keys .update (new_required_keys )
100
- info = self .build_typeddict_typeinfo (defn .name , keys , types , required_keys )
101
+ info = self .build_typeddict_typeinfo (defn .name , keys , types , required_keys , defn . line )
101
102
defn .analyzed = TypedDictExpr (info )
102
103
defn .analyzed .line = defn .line
103
104
defn .analyzed .column = defn .column
@@ -196,7 +197,7 @@ def check_typeddict(self,
196
197
name , items , types , total , ok = res
197
198
if not ok :
198
199
# Error. Construct dummy return value.
199
- info = self .build_typeddict_typeinfo ('TypedDict' , [], [], set ())
200
+ info = self .build_typeddict_typeinfo ('TypedDict' , [], [], set (), call . line )
200
201
else :
201
202
if var_name is not None and name != var_name :
202
203
self .fail (
@@ -206,7 +207,7 @@ def check_typeddict(self,
206
207
# Give it a unique name derived from the line number.
207
208
name += '@' + str (call .line )
208
209
required_keys = set (items ) if total else set ()
209
- info = self .build_typeddict_typeinfo (name , items , types , required_keys )
210
+ info = self .build_typeddict_typeinfo (name , items , types , required_keys , call . line )
210
211
info .line = node .line
211
212
# Store generated TypeInfo under both names, see semanal_namedtuple for more details.
212
213
if name != var_name or is_func_scope :
@@ -305,13 +306,14 @@ def fail_typeddict_arg(self, message: str,
305
306
306
307
def build_typeddict_typeinfo (self , name : str , items : List [str ],
307
308
types : List [Type ],
308
- required_keys : Set [str ]) -> TypeInfo :
309
+ required_keys : Set [str ],
310
+ line : int ) -> TypeInfo :
309
311
# Prefer typing then typing_extensions if available.
310
312
fallback = (self .api .named_type_or_none ('typing._TypedDict' , []) or
311
313
self .api .named_type_or_none ('typing_extensions._TypedDict' , []) or
312
314
self .api .named_type_or_none ('mypy_extensions._TypedDict' , []))
313
315
assert fallback is not None
314
- info = self .api .basic_new_typeinfo (name , fallback )
316
+ info = self .api .basic_new_typeinfo (name , fallback , line )
315
317
info .typeddict_type = TypedDictType (OrderedDict (zip (items , types )), required_keys ,
316
318
fallback )
317
319
return info
0 commit comments