Run flake8
on more files (#85333)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
This commit is contained in:
parent
3aad153913
commit
156c815499
6 changed files with 19 additions and 15 deletions
|
@ -40,7 +40,7 @@ repos:
|
||||||
- flake8-comprehensions==3.10.1
|
- flake8-comprehensions==3.10.1
|
||||||
- flake8-noqa==1.3.0
|
- flake8-noqa==1.3.0
|
||||||
- mccabe==0.7.0
|
- mccabe==0.7.0
|
||||||
files: ^(homeassistant|script|tests)/.+\.py$
|
exclude: docs/source/conf.py
|
||||||
- repo: https://github.com/PyCQA/bandit
|
- repo: https://github.com/PyCQA/bandit
|
||||||
rev: 1.7.4
|
rev: 1.7.4
|
||||||
hooks:
|
hooks:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
"""
|
"""
|
||||||
Sphinx extension to add ReadTheDocs-style "Edit on GitHub" links to the
|
Sphinx extension for ReadTheDocs-style "Edit on GitHub" links on the sidebar.
|
||||||
sidebar.
|
|
||||||
|
|
||||||
Loosely based on https://github.com/astropy/astropy/pull/347
|
Loosely based on https://github.com/astropy/astropy/pull/347
|
||||||
"""
|
"""
|
||||||
|
@ -12,6 +11,7 @@ __licence__ = "BSD (3 clause)"
|
||||||
|
|
||||||
|
|
||||||
def get_github_url(app, view, path):
|
def get_github_url(app, view, path):
|
||||||
|
"""Build the GitHub URL."""
|
||||||
return (
|
return (
|
||||||
f"https://github.com/{app.config.edit_on_github_project}/"
|
f"https://github.com/{app.config.edit_on_github_project}/"
|
||||||
f"{view}/{app.config.edit_on_github_branch}/"
|
f"{view}/{app.config.edit_on_github_branch}/"
|
||||||
|
@ -20,6 +20,7 @@ def get_github_url(app, view, path):
|
||||||
|
|
||||||
|
|
||||||
def html_page_context(app, pagename, templatename, context, doctree):
|
def html_page_context(app, pagename, templatename, context, doctree):
|
||||||
|
"""Build the HTML page."""
|
||||||
if templatename != "page.html":
|
if templatename != "page.html":
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ def html_page_context(app, pagename, templatename, context, doctree):
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
|
"""Set up the app."""
|
||||||
app.add_config_value("edit_on_github_project", "", True)
|
app.add_config_value("edit_on_github_project", "", True)
|
||||||
app.add_config_value("edit_on_github_branch", "master", True)
|
app.add_config_value("edit_on_github_branch", "master", True)
|
||||||
app.add_config_value("edit_on_github_src_path", "", True) # 'eg' "docs/"
|
app.add_config_value("edit_on_github_src_path", "", True) # 'eg' "docs/"
|
||||||
|
|
|
@ -22,7 +22,7 @@ class HassConstructorFormatChecker(BaseChecker): # type: ignore[misc]
|
||||||
options = ()
|
options = ()
|
||||||
|
|
||||||
def visit_functiondef(self, node: nodes.FunctionDef) -> None:
|
def visit_functiondef(self, node: nodes.FunctionDef) -> None:
|
||||||
"""Called when a FunctionDef node is visited."""
|
"""Check for improperly typed `__init__` definitions."""
|
||||||
if not node.is_method() or node.name != "__init__":
|
if not node.is_method() or node.name != "__init__":
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
|
|
||||||
class _Special(Enum):
|
class _Special(Enum):
|
||||||
"""Sentinel values"""
|
"""Sentinel values."""
|
||||||
|
|
||||||
UNDEFINED = 1
|
UNDEFINED = 1
|
||||||
|
|
||||||
|
@ -2837,7 +2837,7 @@ def _has_valid_annotations(
|
||||||
|
|
||||||
|
|
||||||
def _get_module_platform(module_name: str) -> str | None:
|
def _get_module_platform(module_name: str) -> str | None:
|
||||||
"""Called when a Module node is visited."""
|
"""Return the platform for the module name."""
|
||||||
if not (module_match := _MODULE_REGEX.match(module_name)):
|
if not (module_match := _MODULE_REGEX.match(module_name)):
|
||||||
# Ensure `homeassistant.components.<component>`
|
# Ensure `homeassistant.components.<component>`
|
||||||
# Or `homeassistant.components.<component>.<platform>`
|
# Or `homeassistant.components.<component>.<platform>`
|
||||||
|
@ -2878,12 +2878,13 @@ class HassTypeHintChecker(BaseChecker): # type: ignore[misc]
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, linter: PyLinter | None = None) -> None:
|
def __init__(self, linter: PyLinter | None = None) -> None:
|
||||||
|
"""Initialize the HassTypeHintChecker."""
|
||||||
super().__init__(linter)
|
super().__init__(linter)
|
||||||
self._function_matchers: list[TypeHintMatch] = []
|
self._function_matchers: list[TypeHintMatch] = []
|
||||||
self._class_matchers: list[ClassTypeHintMatch] = []
|
self._class_matchers: list[ClassTypeHintMatch] = []
|
||||||
|
|
||||||
def visit_module(self, node: nodes.Module) -> None:
|
def visit_module(self, node: nodes.Module) -> None:
|
||||||
"""Called when a Module node is visited."""
|
"""Populate matchers for a Module node."""
|
||||||
self._function_matchers = []
|
self._function_matchers = []
|
||||||
self._class_matchers = []
|
self._class_matchers = []
|
||||||
|
|
||||||
|
@ -2907,7 +2908,7 @@ class HassTypeHintChecker(BaseChecker): # type: ignore[misc]
|
||||||
self._class_matchers.reverse()
|
self._class_matchers.reverse()
|
||||||
|
|
||||||
def visit_classdef(self, node: nodes.ClassDef) -> None:
|
def visit_classdef(self, node: nodes.ClassDef) -> None:
|
||||||
"""Called when a ClassDef node is visited."""
|
"""Apply relevant type hint checks on a ClassDef node."""
|
||||||
ancestor: nodes.ClassDef
|
ancestor: nodes.ClassDef
|
||||||
checked_class_methods: set[str] = set()
|
checked_class_methods: set[str] = set()
|
||||||
ancestors = list(node.ancestors()) # cache result for inside loop
|
ancestors = list(node.ancestors()) # cache result for inside loop
|
||||||
|
@ -2934,7 +2935,7 @@ class HassTypeHintChecker(BaseChecker): # type: ignore[misc]
|
||||||
checked_class_methods.add(function_node.name)
|
checked_class_methods.add(function_node.name)
|
||||||
|
|
||||||
def visit_functiondef(self, node: nodes.FunctionDef) -> None:
|
def visit_functiondef(self, node: nodes.FunctionDef) -> None:
|
||||||
"""Called when a FunctionDef node is visited."""
|
"""Apply relevant type hint checks on a FunctionDef node."""
|
||||||
for match in self._function_matchers:
|
for match in self._function_matchers:
|
||||||
if not match.need_to_check_function(node) or node.is_method():
|
if not match.need_to_check_function(node) or node.is_method():
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -396,11 +396,12 @@ class HassImportsFormatChecker(BaseChecker): # type: ignore[misc]
|
||||||
options = ()
|
options = ()
|
||||||
|
|
||||||
def __init__(self, linter: PyLinter | None = None) -> None:
|
def __init__(self, linter: PyLinter | None = None) -> None:
|
||||||
|
"""Initialize the HassImportsFormatChecker."""
|
||||||
super().__init__(linter)
|
super().__init__(linter)
|
||||||
self.current_package: str | None = None
|
self.current_package: str | None = None
|
||||||
|
|
||||||
def visit_module(self, node: nodes.Module) -> None:
|
def visit_module(self, node: nodes.Module) -> None:
|
||||||
"""Called when a Module node is visited."""
|
"""Determine current package."""
|
||||||
if node.package:
|
if node.package:
|
||||||
self.current_package = node.name
|
self.current_package = node.name
|
||||||
else:
|
else:
|
||||||
|
@ -408,7 +409,7 @@ class HassImportsFormatChecker(BaseChecker): # type: ignore[misc]
|
||||||
self.current_package = node.name[: node.name.rfind(".")]
|
self.current_package = node.name[: node.name.rfind(".")]
|
||||||
|
|
||||||
def visit_import(self, node: nodes.Import) -> None:
|
def visit_import(self, node: nodes.Import) -> None:
|
||||||
"""Called when a Import node is visited."""
|
"""Check for improper `import _` invocations."""
|
||||||
if self.current_package is None:
|
if self.current_package is None:
|
||||||
return
|
return
|
||||||
for module, _alias in node.names:
|
for module, _alias in node.names:
|
||||||
|
@ -430,7 +431,7 @@ class HassImportsFormatChecker(BaseChecker): # type: ignore[misc]
|
||||||
def _visit_importfrom_relative(
|
def _visit_importfrom_relative(
|
||||||
self, current_package: str, node: nodes.ImportFrom
|
self, current_package: str, node: nodes.ImportFrom
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Called when a ImportFrom node is visited."""
|
"""Check for improper 'from ._ import _' invocations."""
|
||||||
if (
|
if (
|
||||||
node.level <= 1
|
node.level <= 1
|
||||||
or not current_package.startswith("homeassistant.components.")
|
or not current_package.startswith("homeassistant.components.")
|
||||||
|
@ -449,7 +450,7 @@ class HassImportsFormatChecker(BaseChecker): # type: ignore[misc]
|
||||||
self.add_message("hass-absolute-import", node=node)
|
self.add_message("hass-absolute-import", node=node)
|
||||||
|
|
||||||
def visit_importfrom(self, node: nodes.ImportFrom) -> None:
|
def visit_importfrom(self, node: nodes.ImportFrom) -> None:
|
||||||
"""Called when a ImportFrom node is visited."""
|
"""Check for improper 'from _ import _' invocations."""
|
||||||
if not self.current_package:
|
if not self.current_package:
|
||||||
return
|
return
|
||||||
if node.level is not None:
|
if node.level is not None:
|
||||||
|
|
|
@ -29,13 +29,13 @@ class HassLoggerFormatChecker(BaseChecker): # type: ignore[misc]
|
||||||
options = ()
|
options = ()
|
||||||
|
|
||||||
def visit_call(self, node: nodes.Call) -> None:
|
def visit_call(self, node: nodes.Call) -> None:
|
||||||
"""Called when a Call node is visited."""
|
"""Check for improper log messages."""
|
||||||
if not isinstance(node.func, nodes.Attribute) or not isinstance(
|
if not isinstance(node.func, nodes.Attribute) or not isinstance(
|
||||||
node.func.expr, nodes.Name
|
node.func.expr, nodes.Name
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
if not node.func.expr.name in LOGGER_NAMES:
|
if node.func.expr.name not in LOGGER_NAMES:
|
||||||
return
|
return
|
||||||
|
|
||||||
if not node.args:
|
if not node.args:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue