Check if this class can define a named tuple.
(
self, defn: ClassDef, tvar_defs: list[TypeVarLikeType]
)
| 2126 | return False |
| 2127 | |
| 2128 | def analyze_namedtuple_classdef( |
| 2129 | self, defn: ClassDef, tvar_defs: list[TypeVarLikeType] |
| 2130 | ) -> bool: |
| 2131 | """Check if this class can define a named tuple.""" |
| 2132 | if ( |
| 2133 | defn.info |
| 2134 | and defn.info.is_named_tuple |
| 2135 | and defn.info.tuple_type |
| 2136 | and not has_placeholder(defn.info.tuple_type) |
| 2137 | ): |
| 2138 | # Don't reprocess everything. We just need to process methods defined |
| 2139 | # in the named tuple class body. |
| 2140 | is_named_tuple = True |
| 2141 | info: TypeInfo | None = defn.info |
| 2142 | else: |
| 2143 | is_named_tuple, info = self.named_tuple_analyzer.analyze_namedtuple_classdef( |
| 2144 | defn, self.is_stub_file, self.is_func_scope() |
| 2145 | ) |
| 2146 | if is_named_tuple: |
| 2147 | if info is None: |
| 2148 | self.mark_incomplete(defn.name, defn) |
| 2149 | else: |
| 2150 | self.prepare_class_def(defn, info, custom_names=True) |
| 2151 | self.setup_type_vars(defn, tvar_defs) |
| 2152 | self.setup_alias_type_vars(defn) |
| 2153 | with self.scope.class_scope(defn.info): |
| 2154 | for deco in defn.decorators: |
| 2155 | deco.accept(self) |
| 2156 | self.analyze_class_decorator_common(defn, defn.info, deco) |
| 2157 | with self.named_tuple_analyzer.save_namedtuple_body(info): |
| 2158 | self.analyze_class_body_common(defn) |
| 2159 | return True |
| 2160 | return False |
| 2161 | |
| 2162 | def apply_class_plugin_hooks(self, defn: ClassDef) -> None: |
| 2163 | """Apply a plugin hook that may infer a more precise definition for a class.""" |
no test coverage detected