Make mypy IGNORED_MODULES file specific (#65416)
* Make mypy IGNORED_MODULES file specific * Adjust sonos type hints * Remove legacy nest from IGNORED_MODULES Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
8234625d30
commit
f95183f6a8
2 changed files with 1028 additions and 122 deletions
|
@ -16,66 +16,289 @@ from .model import Config, Integration
|
|||
# remove your component from this list to enable type checks.
|
||||
# Do your best to not add anything new here.
|
||||
IGNORED_MODULES: Final[list[str]] = [
|
||||
"homeassistant.components.blueprint.*",
|
||||
"homeassistant.components.cloud.*",
|
||||
"homeassistant.components.config.*",
|
||||
"homeassistant.components.conversation.*",
|
||||
"homeassistant.components.deconz.*",
|
||||
"homeassistant.components.demo.*",
|
||||
"homeassistant.components.denonavr.*",
|
||||
"homeassistant.components.evohome.*",
|
||||
"homeassistant.components.fireservicerota.*",
|
||||
"homeassistant.components.firmata.*",
|
||||
"homeassistant.components.geniushub.*",
|
||||
"homeassistant.components.google_assistant.*",
|
||||
"homeassistant.components.gree.*",
|
||||
"homeassistant.components.harmony.*",
|
||||
"homeassistant.components.hassio.*",
|
||||
"homeassistant.components.here_travel_time.*",
|
||||
"homeassistant.components.home_plus_control.*",
|
||||
"homeassistant.components.homekit.*",
|
||||
"homeassistant.components.honeywell.*",
|
||||
"homeassistant.components.icloud.*",
|
||||
"homeassistant.components.influxdb.*",
|
||||
"homeassistant.components.input_datetime.*",
|
||||
"homeassistant.components.isy994.*",
|
||||
"homeassistant.components.izone.*",
|
||||
"homeassistant.components.konnected.*",
|
||||
"homeassistant.components.kostal_plenticore.*",
|
||||
"homeassistant.components.litterrobot.*",
|
||||
"homeassistant.components.lovelace.*",
|
||||
"homeassistant.components.lutron_caseta.*",
|
||||
"homeassistant.components.lyric.*",
|
||||
"homeassistant.components.melcloud.*",
|
||||
"homeassistant.components.meteo_france.*",
|
||||
"homeassistant.components.minecraft_server.*",
|
||||
"homeassistant.components.mobile_app.*",
|
||||
"homeassistant.components.netgear.*",
|
||||
"homeassistant.components.nilu.*",
|
||||
"homeassistant.components.nzbget.*",
|
||||
"homeassistant.components.omnilogic.*",
|
||||
"homeassistant.components.onvif.*",
|
||||
"homeassistant.components.ozw.*",
|
||||
"homeassistant.components.philips_js.*",
|
||||
"homeassistant.components.plex.*",
|
||||
"homeassistant.components.profiler.*",
|
||||
"homeassistant.components.solaredge.*",
|
||||
"homeassistant.components.sonos.*",
|
||||
"homeassistant.components.spotify.*",
|
||||
"homeassistant.components.system_health.*",
|
||||
"homeassistant.components.telegram_bot.*",
|
||||
"homeassistant.components.template.*",
|
||||
"homeassistant.components.toon.*",
|
||||
"homeassistant.components.unifi.*",
|
||||
"homeassistant.components.upnp.*",
|
||||
"homeassistant.components.vizio.*",
|
||||
"homeassistant.components.withings.*",
|
||||
"homeassistant.components.xbox.*",
|
||||
"homeassistant.components.xiaomi_aqara.*",
|
||||
"homeassistant.components.xiaomi_miio.*",
|
||||
"homeassistant.components.yeelight.*",
|
||||
"homeassistant.components.zha.*",
|
||||
"homeassistant.components.zwave.*",
|
||||
"homeassistant.components.blueprint.importer",
|
||||
"homeassistant.components.blueprint.models",
|
||||
"homeassistant.components.blueprint.websocket_api",
|
||||
"homeassistant.components.cloud.client",
|
||||
"homeassistant.components.cloud.http_api",
|
||||
"homeassistant.components.config.auth",
|
||||
"homeassistant.components.config.config_entries",
|
||||
"homeassistant.components.config.core",
|
||||
"homeassistant.components.config.entity_registry",
|
||||
"homeassistant.components.conversation",
|
||||
"homeassistant.components.conversation.default_agent",
|
||||
"homeassistant.components.deconz",
|
||||
"homeassistant.components.deconz.alarm_control_panel",
|
||||
"homeassistant.components.deconz.binary_sensor",
|
||||
"homeassistant.components.deconz.climate",
|
||||
"homeassistant.components.deconz.cover",
|
||||
"homeassistant.components.deconz.fan",
|
||||
"homeassistant.components.deconz.gateway",
|
||||
"homeassistant.components.deconz.light",
|
||||
"homeassistant.components.deconz.lock",
|
||||
"homeassistant.components.deconz.logbook",
|
||||
"homeassistant.components.deconz.number",
|
||||
"homeassistant.components.deconz.sensor",
|
||||
"homeassistant.components.deconz.services",
|
||||
"homeassistant.components.deconz.siren",
|
||||
"homeassistant.components.deconz.switch",
|
||||
"homeassistant.components.demo",
|
||||
"homeassistant.components.demo.fan",
|
||||
"homeassistant.components.demo.light",
|
||||
"homeassistant.components.demo.number",
|
||||
"homeassistant.components.demo.remote",
|
||||
"homeassistant.components.demo.siren",
|
||||
"homeassistant.components.demo.switch",
|
||||
"homeassistant.components.denonavr.config_flow",
|
||||
"homeassistant.components.denonavr.media_player",
|
||||
"homeassistant.components.denonavr.receiver",
|
||||
"homeassistant.components.evohome",
|
||||
"homeassistant.components.evohome.climate",
|
||||
"homeassistant.components.evohome.water_heater",
|
||||
"homeassistant.components.fireservicerota",
|
||||
"homeassistant.components.fireservicerota.binary_sensor",
|
||||
"homeassistant.components.fireservicerota.sensor",
|
||||
"homeassistant.components.fireservicerota.switch",
|
||||
"homeassistant.components.firmata",
|
||||
"homeassistant.components.firmata.binary_sensor",
|
||||
"homeassistant.components.firmata.board",
|
||||
"homeassistant.components.firmata.entity",
|
||||
"homeassistant.components.firmata.light",
|
||||
"homeassistant.components.firmata.pin",
|
||||
"homeassistant.components.firmata.sensor",
|
||||
"homeassistant.components.firmata.switch",
|
||||
"homeassistant.components.geniushub",
|
||||
"homeassistant.components.geniushub.binary_sensor",
|
||||
"homeassistant.components.geniushub.climate",
|
||||
"homeassistant.components.geniushub.sensor",
|
||||
"homeassistant.components.geniushub.water_heater",
|
||||
"homeassistant.components.google_assistant.helpers",
|
||||
"homeassistant.components.google_assistant.http",
|
||||
"homeassistant.components.google_assistant.report_state",
|
||||
"homeassistant.components.google_assistant.trait",
|
||||
"homeassistant.components.gree.climate",
|
||||
"homeassistant.components.gree.switch",
|
||||
"homeassistant.components.harmony",
|
||||
"homeassistant.components.harmony.config_flow",
|
||||
"homeassistant.components.harmony.data",
|
||||
"homeassistant.components.hassio",
|
||||
"homeassistant.components.hassio.auth",
|
||||
"homeassistant.components.hassio.binary_sensor",
|
||||
"homeassistant.components.hassio.ingress",
|
||||
"homeassistant.components.hassio.sensor",
|
||||
"homeassistant.components.hassio.system_health",
|
||||
"homeassistant.components.hassio.websocket_api",
|
||||
"homeassistant.components.here_travel_time.sensor",
|
||||
"homeassistant.components.home_plus_control",
|
||||
"homeassistant.components.home_plus_control.api",
|
||||
"homeassistant.components.homekit.aidmanager",
|
||||
"homeassistant.components.homekit.config_flow",
|
||||
"homeassistant.components.homekit.util",
|
||||
"homeassistant.components.honeywell.climate",
|
||||
"homeassistant.components.icloud",
|
||||
"homeassistant.components.icloud.account",
|
||||
"homeassistant.components.icloud.device_tracker",
|
||||
"homeassistant.components.icloud.sensor",
|
||||
"homeassistant.components.influxdb",
|
||||
"homeassistant.components.input_datetime",
|
||||
"homeassistant.components.isy994",
|
||||
"homeassistant.components.isy994.binary_sensor",
|
||||
"homeassistant.components.isy994.climate",
|
||||
"homeassistant.components.isy994.config_flow",
|
||||
"homeassistant.components.isy994.cover",
|
||||
"homeassistant.components.isy994.entity",
|
||||
"homeassistant.components.isy994.fan",
|
||||
"homeassistant.components.isy994.helpers",
|
||||
"homeassistant.components.isy994.light",
|
||||
"homeassistant.components.isy994.lock",
|
||||
"homeassistant.components.isy994.sensor",
|
||||
"homeassistant.components.isy994.services",
|
||||
"homeassistant.components.isy994.switch",
|
||||
"homeassistant.components.izone.climate",
|
||||
"homeassistant.components.konnected",
|
||||
"homeassistant.components.konnected.config_flow",
|
||||
"homeassistant.components.kostal_plenticore.helper",
|
||||
"homeassistant.components.kostal_plenticore.select",
|
||||
"homeassistant.components.kostal_plenticore.sensor",
|
||||
"homeassistant.components.kostal_plenticore.switch",
|
||||
"homeassistant.components.litterrobot",
|
||||
"homeassistant.components.litterrobot.button",
|
||||
"homeassistant.components.litterrobot.entity",
|
||||
"homeassistant.components.litterrobot.hub",
|
||||
"homeassistant.components.litterrobot.select",
|
||||
"homeassistant.components.litterrobot.sensor",
|
||||
"homeassistant.components.litterrobot.switch",
|
||||
"homeassistant.components.litterrobot.vacuum",
|
||||
"homeassistant.components.lovelace",
|
||||
"homeassistant.components.lovelace.dashboard",
|
||||
"homeassistant.components.lovelace.resources",
|
||||
"homeassistant.components.lovelace.websocket",
|
||||
"homeassistant.components.lutron_caseta",
|
||||
"homeassistant.components.lutron_caseta.device_trigger",
|
||||
"homeassistant.components.lutron_caseta.switch",
|
||||
"homeassistant.components.lyric.climate",
|
||||
"homeassistant.components.lyric.config_flow",
|
||||
"homeassistant.components.lyric.sensor",
|
||||
"homeassistant.components.melcloud",
|
||||
"homeassistant.components.melcloud.climate",
|
||||
"homeassistant.components.meteo_france.sensor",
|
||||
"homeassistant.components.meteo_france.weather",
|
||||
"homeassistant.components.minecraft_server",
|
||||
"homeassistant.components.minecraft_server.helpers",
|
||||
"homeassistant.components.minecraft_server.sensor",
|
||||
"homeassistant.components.mobile_app.binary_sensor",
|
||||
"homeassistant.components.mobile_app.device_action",
|
||||
"homeassistant.components.mobile_app.device_tracker",
|
||||
"homeassistant.components.mobile_app.helpers",
|
||||
"homeassistant.components.mobile_app.http_api",
|
||||
"homeassistant.components.mobile_app.push_notification",
|
||||
"homeassistant.components.mobile_app.sensor",
|
||||
"homeassistant.components.netgear",
|
||||
"homeassistant.components.netgear.config_flow",
|
||||
"homeassistant.components.netgear.device_tracker",
|
||||
"homeassistant.components.netgear.router",
|
||||
"homeassistant.components.nilu.air_quality",
|
||||
"homeassistant.components.nzbget",
|
||||
"homeassistant.components.nzbget.config_flow",
|
||||
"homeassistant.components.nzbget.coordinator",
|
||||
"homeassistant.components.nzbget.switch",
|
||||
"homeassistant.components.omnilogic.common",
|
||||
"homeassistant.components.omnilogic.sensor",
|
||||
"homeassistant.components.omnilogic.switch",
|
||||
"homeassistant.components.onvif.base",
|
||||
"homeassistant.components.onvif.binary_sensor",
|
||||
"homeassistant.components.onvif.button",
|
||||
"homeassistant.components.onvif.camera",
|
||||
"homeassistant.components.onvif.config_flow",
|
||||
"homeassistant.components.onvif.device",
|
||||
"homeassistant.components.onvif.event",
|
||||
"homeassistant.components.onvif.models",
|
||||
"homeassistant.components.onvif.parsers",
|
||||
"homeassistant.components.onvif.sensor",
|
||||
"homeassistant.components.ozw",
|
||||
"homeassistant.components.ozw.climate",
|
||||
"homeassistant.components.ozw.entity",
|
||||
"homeassistant.components.philips_js",
|
||||
"homeassistant.components.philips_js.config_flow",
|
||||
"homeassistant.components.philips_js.device_trigger",
|
||||
"homeassistant.components.philips_js.light",
|
||||
"homeassistant.components.philips_js.media_player",
|
||||
"homeassistant.components.plex.media_player",
|
||||
"homeassistant.components.profiler",
|
||||
"homeassistant.components.solaredge.config_flow",
|
||||
"homeassistant.components.solaredge.coordinator",
|
||||
"homeassistant.components.solaredge.sensor",
|
||||
"homeassistant.components.sonos",
|
||||
"homeassistant.components.sonos.alarms",
|
||||
"homeassistant.components.sonos.binary_sensor",
|
||||
"homeassistant.components.sonos.diagnostics",
|
||||
"homeassistant.components.sonos.entity",
|
||||
"homeassistant.components.sonos.favorites",
|
||||
"homeassistant.components.sonos.helpers",
|
||||
"homeassistant.components.sonos.media_browser",
|
||||
"homeassistant.components.sonos.media_player",
|
||||
"homeassistant.components.sonos.number",
|
||||
"homeassistant.components.sonos.sensor",
|
||||
"homeassistant.components.sonos.speaker",
|
||||
"homeassistant.components.sonos.statistics",
|
||||
"homeassistant.components.spotify.config_flow",
|
||||
"homeassistant.components.spotify.media_player",
|
||||
"homeassistant.components.system_health",
|
||||
"homeassistant.components.telegram_bot.polling",
|
||||
"homeassistant.components.template",
|
||||
"homeassistant.components.template.binary_sensor",
|
||||
"homeassistant.components.template.button",
|
||||
"homeassistant.components.template.fan",
|
||||
"homeassistant.components.template.number",
|
||||
"homeassistant.components.template.select",
|
||||
"homeassistant.components.template.sensor",
|
||||
"homeassistant.components.template.template_entity",
|
||||
"homeassistant.components.template.trigger_entity",
|
||||
"homeassistant.components.template.weather",
|
||||
"homeassistant.components.toon",
|
||||
"homeassistant.components.toon.config_flow",
|
||||
"homeassistant.components.toon.models",
|
||||
"homeassistant.components.unifi",
|
||||
"homeassistant.components.unifi.config_flow",
|
||||
"homeassistant.components.unifi.device_tracker",
|
||||
"homeassistant.components.unifi.diagnostics",
|
||||
"homeassistant.components.unifi.unifi_entity_base",
|
||||
"homeassistant.components.upnp",
|
||||
"homeassistant.components.upnp.binary_sensor",
|
||||
"homeassistant.components.upnp.config_flow",
|
||||
"homeassistant.components.upnp.device",
|
||||
"homeassistant.components.upnp.sensor",
|
||||
"homeassistant.components.vizio.config_flow",
|
||||
"homeassistant.components.vizio.media_player",
|
||||
"homeassistant.components.withings",
|
||||
"homeassistant.components.withings.binary_sensor",
|
||||
"homeassistant.components.withings.common",
|
||||
"homeassistant.components.withings.config_flow",
|
||||
"homeassistant.components.xbox",
|
||||
"homeassistant.components.xbox.base_sensor",
|
||||
"homeassistant.components.xbox.binary_sensor",
|
||||
"homeassistant.components.xbox.browse_media",
|
||||
"homeassistant.components.xbox.media_source",
|
||||
"homeassistant.components.xbox.sensor",
|
||||
"homeassistant.components.xiaomi_aqara",
|
||||
"homeassistant.components.xiaomi_aqara.binary_sensor",
|
||||
"homeassistant.components.xiaomi_aqara.lock",
|
||||
"homeassistant.components.xiaomi_aqara.sensor",
|
||||
"homeassistant.components.xiaomi_miio",
|
||||
"homeassistant.components.xiaomi_miio.air_quality",
|
||||
"homeassistant.components.xiaomi_miio.binary_sensor",
|
||||
"homeassistant.components.xiaomi_miio.device",
|
||||
"homeassistant.components.xiaomi_miio.device_tracker",
|
||||
"homeassistant.components.xiaomi_miio.fan",
|
||||
"homeassistant.components.xiaomi_miio.humidifier",
|
||||
"homeassistant.components.xiaomi_miio.light",
|
||||
"homeassistant.components.xiaomi_miio.sensor",
|
||||
"homeassistant.components.xiaomi_miio.switch",
|
||||
"homeassistant.components.yeelight",
|
||||
"homeassistant.components.yeelight.light",
|
||||
"homeassistant.components.yeelight.scanner",
|
||||
"homeassistant.components.zha.alarm_control_panel",
|
||||
"homeassistant.components.zha.api",
|
||||
"homeassistant.components.zha.binary_sensor",
|
||||
"homeassistant.components.zha.button",
|
||||
"homeassistant.components.zha.climate",
|
||||
"homeassistant.components.zha.config_flow",
|
||||
"homeassistant.components.zha.core.channels",
|
||||
"homeassistant.components.zha.core.channels.base",
|
||||
"homeassistant.components.zha.core.channels.closures",
|
||||
"homeassistant.components.zha.core.channels.general",
|
||||
"homeassistant.components.zha.core.channels.homeautomation",
|
||||
"homeassistant.components.zha.core.channels.hvac",
|
||||
"homeassistant.components.zha.core.channels.lighting",
|
||||
"homeassistant.components.zha.core.channels.lightlink",
|
||||
"homeassistant.components.zha.core.channels.manufacturerspecific",
|
||||
"homeassistant.components.zha.core.channels.measurement",
|
||||
"homeassistant.components.zha.core.channels.protocol",
|
||||
"homeassistant.components.zha.core.channels.security",
|
||||
"homeassistant.components.zha.core.channels.smartenergy",
|
||||
"homeassistant.components.zha.core.decorators",
|
||||
"homeassistant.components.zha.core.device",
|
||||
"homeassistant.components.zha.core.discovery",
|
||||
"homeassistant.components.zha.core.gateway",
|
||||
"homeassistant.components.zha.core.group",
|
||||
"homeassistant.components.zha.core.helpers",
|
||||
"homeassistant.components.zha.core.registries",
|
||||
"homeassistant.components.zha.core.store",
|
||||
"homeassistant.components.zha.core.typing",
|
||||
"homeassistant.components.zha.cover",
|
||||
"homeassistant.components.zha.device_action",
|
||||
"homeassistant.components.zha.device_tracker",
|
||||
"homeassistant.components.zha.entity",
|
||||
"homeassistant.components.zha.fan",
|
||||
"homeassistant.components.zha.light",
|
||||
"homeassistant.components.zha.lock",
|
||||
"homeassistant.components.zha.select",
|
||||
"homeassistant.components.zha.sensor",
|
||||
"homeassistant.components.zha.siren",
|
||||
"homeassistant.components.zha.switch",
|
||||
"homeassistant.components.zwave",
|
||||
"homeassistant.components.zwave.migration",
|
||||
"homeassistant.components.zwave.node_entity",
|
||||
]
|
||||
|
||||
# Component modules which should set no_implicit_reexport = true.
|
||||
|
@ -130,6 +353,19 @@ STRICT_SETTINGS_CORE: Final[list[str]] = [
|
|||
]
|
||||
|
||||
|
||||
def _strict_module_in_ignore_list(
|
||||
module: str, ignored_modules_set: set[str]
|
||||
) -> str | None:
|
||||
if module in ignored_modules_set:
|
||||
return module
|
||||
if module.endswith("*"):
|
||||
module = module[:-1]
|
||||
for ignored_module in ignored_modules_set:
|
||||
if ignored_module.startswith(module):
|
||||
return ignored_module
|
||||
return None
|
||||
|
||||
|
||||
def generate_and_validate(config: Config) -> str:
|
||||
"""Validate and generate mypy config."""
|
||||
|
||||
|
@ -162,9 +398,10 @@ def generate_and_validate(config: Config) -> str:
|
|||
config.add_error(
|
||||
"mypy_config", f"Only components should be added: {module}"
|
||||
)
|
||||
if module in ignored_modules_set:
|
||||
if ignored_module := _strict_module_in_ignore_list(module, ignored_modules_set):
|
||||
config.add_error(
|
||||
"mypy_config", f"Module '{module}' is in ignored list in mypy_config.py"
|
||||
"mypy_config",
|
||||
f"Module '{ignored_module}' is in ignored list in mypy_config.py",
|
||||
)
|
||||
|
||||
# Validate that all modules exist.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue