Remove replicated async definitions in pylint plugin (#73823)

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
This commit is contained in:
epenet 2022-06-22 23:51:40 +02:00 committed by GitHub
parent aef69f87f4
commit b17d4ac65c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -28,6 +28,15 @@ class TypeHintMatch:
kwargs_type: str | None = None kwargs_type: str | None = None
"""kwargs_type is for the special case `**kwargs`""" """kwargs_type is for the special case `**kwargs`"""
check_return_type_inheritance: bool = False check_return_type_inheritance: bool = False
has_async_counterpart: bool = False
def need_to_check_function(self, node: nodes.FunctionDef) -> bool:
"""Confirm if function should be checked."""
return (
self.function_name == node.name
or self.has_async_counterpart
and node.name == f"async_{self.function_name}"
)
@dataclass @dataclass
@ -60,14 +69,7 @@ _FUNCTION_MATCH: dict[str, list[TypeHintMatch]] = {
1: "ConfigType", 1: "ConfigType",
}, },
return_type="bool", return_type="bool",
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_setup",
arg_types={
0: "HomeAssistant",
1: "ConfigType",
},
return_type="bool",
), ),
TypeHintMatch( TypeHintMatch(
function_name="async_setup_entry", function_name="async_setup_entry",
@ -121,16 +123,7 @@ _FUNCTION_MATCH: dict[str, list[TypeHintMatch]] = {
3: "DiscoveryInfoType | None", 3: "DiscoveryInfoType | None",
}, },
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_setup_platform",
arg_types={
0: "HomeAssistant",
1: "ConfigType",
2: "AddEntitiesCallback",
3: "DiscoveryInfoType | None",
},
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="async_setup_entry", function_name="async_setup_entry",
@ -314,14 +307,7 @@ _FUNCTION_MATCH: dict[str, list[TypeHintMatch]] = {
1: "ConfigType", 1: "ConfigType",
}, },
return_type=["DeviceScanner", "DeviceScanner | None"], return_type=["DeviceScanner", "DeviceScanner | None"],
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_get_scanner",
arg_types={
0: "HomeAssistant",
1: "ConfigType",
},
return_type=["DeviceScanner", "DeviceScanner | None"],
), ),
], ],
"device_trigger": [ "device_trigger": [
@ -498,31 +484,19 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = {
function_name="set_percentage", function_name="set_percentage",
arg_types={1: "int"}, arg_types={1: "int"},
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_set_percentage",
arg_types={1: "int"},
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="set_preset_mode", function_name="set_preset_mode",
arg_types={1: "str"}, arg_types={1: "str"},
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_set_preset_mode",
arg_types={1: "str"},
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="set_direction", function_name="set_direction",
arg_types={1: "str"}, arg_types={1: "str"},
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_set_direction",
arg_types={1: "str"},
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="turn_on", function_name="turn_on",
@ -532,25 +506,13 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = {
}, },
kwargs_type="Any", kwargs_type="Any",
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_turn_on",
named_arg_types={
"percentage": "int | None",
"preset_mode": "str | None",
},
kwargs_type="Any",
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="oscillate", function_name="oscillate",
arg_types={1: "bool"}, arg_types={1: "bool"},
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_oscillate",
arg_types={1: "bool"},
return_type=None,
), ),
], ],
), ),
@ -587,31 +549,19 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = {
function_name="lock", function_name="lock",
kwargs_type="Any", kwargs_type="Any",
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_lock",
kwargs_type="Any",
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="unlock", function_name="unlock",
kwargs_type="Any", kwargs_type="Any",
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_unlock",
kwargs_type="Any",
return_type=None,
), ),
TypeHintMatch( TypeHintMatch(
function_name="open", function_name="open",
kwargs_type="Any", kwargs_type="Any",
return_type=None, return_type=None,
), has_async_counterpart=True,
TypeHintMatch(
function_name="async_open",
kwargs_type="Any",
return_type=None,
), ),
], ],
), ),
@ -831,14 +781,13 @@ class HassTypeHintChecker(BaseChecker): # type: ignore[misc]
) -> None: ) -> None:
for match in matches: for match in matches:
for function_node in node.mymethods(): for function_node in node.mymethods():
function_name: str | None = function_node.name if match.need_to_check_function(function_node):
if match.function_name == function_name:
self._check_function(function_node, match) self._check_function(function_node, match)
def visit_functiondef(self, node: nodes.FunctionDef) -> None: def visit_functiondef(self, node: nodes.FunctionDef) -> None:
"""Called when a FunctionDef node is visited.""" """Called when a FunctionDef node is visited."""
for match in self._function_matchers: for match in self._function_matchers:
if node.name != match.function_name or node.is_method(): if not match.need_to_check_function(node) or node.is_method():
continue continue
self._check_function(node, match) self._check_function(node, match)