@@ -661,8 +661,7 @@ impl<'db> StaticClassLiteral<'db> {
661661 return known. is_typed_dict_subclass ( ) ;
662662 }
663663
664- self . iter_mro ( db, None )
665- . any ( |base| matches ! ( base, ClassBase :: TypedDict ) )
664+ self . iter_mro ( db, None ) . contains ( & ClassBase :: TypedDict )
666665 }
667666
668667 /// Return `true` if this class is, or inherits from, a `NamedTuple` (inherits from
@@ -1349,6 +1348,12 @@ impl<'db> StaticClassLiteral<'db> {
13491348 Some ( Type :: function_like_callable ( db, signature) )
13501349 } ;
13511350
1351+ let td_fields = || {
1352+ self . fields ( db, specialization, field_policy)
1353+ . iter ( )
1354+ . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) )
1355+ } ;
1356+
13521357 match ( field_policy, name) {
13531358 ( CodeGeneratorKind :: DataclassLike ( _) , "__init__" ) => {
13541359 if !self . has_dataclass_param ( db, field_policy, DataclassFlags :: INIT ) {
@@ -1554,65 +1559,28 @@ impl<'db> StaticClassLiteral<'db> {
15541559 Type :: heterogeneous_tuple ( db, slots)
15551560 } )
15561561 }
1557- (
1558- CodeGeneratorKind :: TypedDict ,
1559- name @ ( "__getitem__" | "__setitem__" | "__delitem__" | "get" | "pop"
1560- | "setdefault" | "update" ) ,
1561- ) => {
1562- let td_fields = self . fields ( db, specialization, field_policy) ;
1563-
1564- Some ( match name {
1565- "__getitem__" => synthesize_typed_dict_getitem (
1566- db,
1567- instance_ty,
1568- td_fields
1569- . iter ( )
1570- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1571- ) ,
1572- "__setitem__" => synthesize_typed_dict_setitem (
1573- db,
1574- instance_ty,
1575- td_fields
1576- . iter ( )
1577- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1578- ) ,
1579- "__delitem__" => synthesize_typed_dict_delitem (
1580- db,
1581- instance_ty,
1582- td_fields
1583- . iter ( )
1584- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1585- ) ,
1586- "get" => synthesize_typed_dict_get (
1587- db,
1588- instance_ty,
1589- td_fields
1590- . iter ( )
1591- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1592- ) ,
1593- "pop" => synthesize_typed_dict_pop (
1594- db,
1595- instance_ty,
1596- td_fields
1597- . iter ( )
1598- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1599- ) ,
1600- "setdefault" => synthesize_typed_dict_setdefault (
1601- db,
1602- instance_ty,
1603- td_fields
1604- . iter ( )
1605- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1606- ) ,
1607- "update" => synthesize_typed_dict_update (
1608- db,
1609- instance_ty,
1610- td_fields
1611- . iter ( )
1612- . map ( |( name, field) | ( name, TypedDictField :: from_field ( field) ) ) ,
1613- ) ,
1614- _ => unreachable ! ( ) ,
1615- } )
1562+ ( CodeGeneratorKind :: TypedDict , "__getitem__" ) => {
1563+ Some ( synthesize_typed_dict_getitem ( db, instance_ty, td_fields ( ) ) )
1564+ }
1565+ ( CodeGeneratorKind :: TypedDict , "__setitem__" ) => {
1566+ Some ( synthesize_typed_dict_setitem ( db, instance_ty, td_fields ( ) ) )
1567+ }
1568+ ( CodeGeneratorKind :: TypedDict , "__delitem__" ) => {
1569+ Some ( synthesize_typed_dict_delitem ( db, instance_ty, td_fields ( ) ) )
1570+ }
1571+ ( CodeGeneratorKind :: TypedDict , "get" ) => {
1572+ Some ( synthesize_typed_dict_get ( db, instance_ty, td_fields ( ) ) )
1573+ }
1574+ ( CodeGeneratorKind :: TypedDict , "pop" ) => {
1575+ Some ( synthesize_typed_dict_pop ( db, instance_ty, td_fields ( ) ) )
1576+ }
1577+ ( CodeGeneratorKind :: TypedDict , "setdefault" ) => Some ( synthesize_typed_dict_setdefault (
1578+ db,
1579+ instance_ty,
1580+ td_fields ( ) ,
1581+ ) ) ,
1582+ ( CodeGeneratorKind :: TypedDict , "update" ) => {
1583+ Some ( synthesize_typed_dict_update ( db, instance_ty, td_fields ( ) ) )
16161584 }
16171585 ( CodeGeneratorKind :: TypedDict , name @ ( "__or__" | "__ror__" | "__ior__" ) ) => {
16181586 Some ( synthesize_typed_dict_merge ( db, instance_ty, name) )
0 commit comments