diff --git a/mypy/plugin.py b/mypy/plugin.py index 831721eb193c..9019e3c2256f 100644 --- a/mypy/plugin.py +++ b/mypy/plugin.py @@ -846,12 +846,22 @@ def get_additional_deps(self, file: MypyFile) -> list[tuple[int, str, int]]: return deps def get_type_analyze_hook(self, fullname: str) -> Callable[[AnalyzeTypeContext], Type] | None: - return self._find_hook(lambda plugin: plugin.get_type_analyze_hook(fullname)) + # Micro-optimization: Inline iteration over plugins + for plugin in self._plugins: + hook = plugin.get_type_analyze_hook(fullname) + if hook is not None: + return hook + return None def get_function_signature_hook( self, fullname: str ) -> Callable[[FunctionSigContext], FunctionLike] | None: - return self._find_hook(lambda plugin: plugin.get_function_signature_hook(fullname)) + # Micro-optimization: Inline iteration over plugins + for plugin in self._plugins: + hook = plugin.get_function_signature_hook(fullname) + if hook is not None: + return hook + return None def get_function_hook(self, fullname: str) -> Callable[[FunctionContext], Type] | None: return self._find_hook(lambda plugin: plugin.get_function_hook(fullname)) @@ -859,13 +869,28 @@ def get_function_hook(self, fullname: str) -> Callable[[FunctionContext], Type] def get_method_signature_hook( self, fullname: str ) -> Callable[[MethodSigContext], FunctionLike] | None: - return self._find_hook(lambda plugin: plugin.get_method_signature_hook(fullname)) + # Micro-optimization: Inline iteration over plugins + for plugin in self._plugins: + hook = plugin.get_method_signature_hook(fullname) + if hook is not None: + return hook + return None def get_method_hook(self, fullname: str) -> Callable[[MethodContext], Type] | None: - return self._find_hook(lambda plugin: plugin.get_method_hook(fullname)) + # Micro-optimization: Inline iteration over plugins + for plugin in self._plugins: + hook = plugin.get_method_hook(fullname) + if hook is not None: + return hook + return None def get_attribute_hook(self, fullname: str) -> Callable[[AttributeContext], Type] | None: - return self._find_hook(lambda plugin: plugin.get_attribute_hook(fullname)) + # Micro-optimization: Inline iteration over plugins + for plugin in self._plugins: + hook = plugin.get_attribute_hook(fullname) + if hook is not None: + return hook + return None def get_class_attribute_hook(self, fullname: str) -> Callable[[AttributeContext], Type] | None: return self._find_hook(lambda plugin: plugin.get_class_attribute_hook(fullname)) @@ -897,6 +922,6 @@ def get_dynamic_class_hook( def _find_hook(self, lookup: Callable[[Plugin], T]) -> T | None: for plugin in self._plugins: hook = lookup(plugin) - if hook: + if hook is not None: return hook return None