diff --git a/pylint/plugins/hass_async_load_fixtures.py b/pylint/plugins/hass_async_load_fixtures.py index 80885df7fe8..b1680f3f280 100644 --- a/pylint/plugins/hass_async_load_fixtures.py +++ b/pylint/plugins/hass_async_load_fixtures.py @@ -27,14 +27,24 @@ class HassLoadFixturesChecker(BaseChecker): } options = () + _decorators_queue: list[nodes.Decorators] _function_queue: list[nodes.FunctionDef | nodes.AsyncFunctionDef] _in_test_module: bool def visit_module(self, node: nodes.Module) -> None: """Visit a module definition.""" self._in_test_module = node.name.startswith("tests.") + self._decorators_queue = [] self._function_queue = [] + def visit_decorators(self, node: nodes.Decorators) -> None: + """Visit a function definition.""" + self._decorators_queue.append(node) + + def leave_decorators(self, node: nodes.Decorators) -> None: + """Leave a function definition.""" + self._decorators_queue.pop() + def visit_functiondef(self, node: nodes.FunctionDef) -> None: """Visit a function definition.""" self._function_queue.append(node) @@ -54,6 +64,8 @@ class HassLoadFixturesChecker(BaseChecker): # Ensure we are in an async function context or not self._function_queue or not isinstance(self._function_queue[-1], nodes.AsyncFunctionDef) + # Ensure we are not in the decorators + or self._decorators_queue # Check function name or not isinstance(node.func, nodes.Name) or node.func.name not in FUNCTION_NAMES