def _visit_functiondef(self, node: astroid.FunctionDef, match: TypeHintMatch) -> None: if node.name != match.function_name: return if node.is_method(): return if not match.module_filter.match(self.module): return # Check that at least one argument is annotated. annotations = _get_all_annotations(node) if node.returns is None and not _has_valid_annotations(annotations): return # Check that all arguments are correctly annotated. for key, expected_type in match.arg_types.items(): if not _is_valid_type(expected_type, annotations[key]): self.add_message( "hass-argument-type", node=node.args.args[key], args=(key + 1, expected_type), ) # Check the return type. if not _is_valid_type(return_type := match.return_type, node.returns): self.add_message("hass-return-type", node=node, args=return_type or "None")
def visit_functiondef(self, node: FunctionDef) -> None: """Called when a FunctionDef node is visited.""" if not node.is_method() or node.name != "__init__": return # Check that all arguments are annotated. # The first argument is "self". args = node.args annotations = (args.posonlyargs_annotations + args.annotations + args.kwonlyargs_annotations)[1:] if args.vararg is not None: annotations.append(args.varargannotation) if args.kwarg is not None: annotations.append(args.kwargannotation) if not annotations or None in annotations: return # Check that return type is specified and it is "None". if not isinstance(node.returns, Const) or node.returns.value is not None: self.add_message("hass-constructor-return", node=node)