@@ -60,7 +60,8 @@ def analyze_typeddict_classdef(self, defn: ClassDef) -> Tuple[bool, Optional[Typ
6060 fields , types , required_keys = self .analyze_typeddict_classdef_fields (defn )
6161 if fields is None :
6262 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 )
6465 defn .analyzed = TypedDictExpr (info )
6566 defn .analyzed .line = defn .line
6667 defn .analyzed .column = defn .column
@@ -97,7 +98,7 @@ def analyze_typeddict_classdef(self, defn: ClassDef) -> Tuple[bool, Optional[Typ
9798 keys .extend (new_keys )
9899 types .extend (new_types )
99100 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 )
101102 defn .analyzed = TypedDictExpr (info )
102103 defn .analyzed .line = defn .line
103104 defn .analyzed .column = defn .column
@@ -196,7 +197,7 @@ def check_typeddict(self,
196197 name , items , types , total , ok = res
197198 if not ok :
198199 # Error. Construct dummy return value.
199- info = self .build_typeddict_typeinfo ('TypedDict' , [], [], set ())
200+ info = self .build_typeddict_typeinfo ('TypedDict' , [], [], set (), call . line )
200201 else :
201202 if var_name is not None and name != var_name :
202203 self .fail (
@@ -206,7 +207,7 @@ def check_typeddict(self,
206207 # Give it a unique name derived from the line number.
207208 name += '@' + str (call .line )
208209 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 )
210211 info .line = node .line
211212 # Store generated TypeInfo under both names, see semanal_namedtuple for more details.
212213 if name != var_name or is_func_scope :
@@ -305,13 +306,14 @@ def fail_typeddict_arg(self, message: str,
305306
306307 def build_typeddict_typeinfo (self , name : str , items : List [str ],
307308 types : List [Type ],
308- required_keys : Set [str ]) -> TypeInfo :
309+ required_keys : Set [str ],
310+ line : int ) -> TypeInfo :
309311 # Prefer typing then typing_extensions if available.
310312 fallback = (self .api .named_type_or_none ('typing._TypedDict' , []) or
311313 self .api .named_type_or_none ('typing_extensions._TypedDict' , []) or
312314 self .api .named_type_or_none ('mypy_extensions._TypedDict' , []))
313315 assert fallback is not None
314- info = self .api .basic_new_typeinfo (name , fallback )
316+ info = self .api .basic_new_typeinfo (name , fallback , line )
315317 info .typeddict_type = TypedDictType (OrderedDict (zip (items , types )), required_keys ,
316318 fallback )
317319 return info
0 commit comments