# #42: tool configuration only — the integration itself ships via HACS, not pip. [tool.ruff] target-version = "py313" # Скоуп ОБЪЯВЛЕННЫЙ равен проверяемому (#399). Раньше здесь стояли три # дерева, а CI линтил одно — читающий конфиг делал неверный вывод, и в # tests_backend уже проехали F401/F811, которых на v1.69.0 не было. # # Сужение, а не расширение: разбор долга в scripts/ и tests_backend/ (56 # находок, в основном E402 и I001 в тестах, плюс 7 B023 и 5 B017) — работа # со своей ценой и своими решениями, её место в отдельной задаче, а не в # правке видимости. Расширять этот список можно только вместе со шагом # «Линт бэкенда» в validate.yml — за этим следит test/lint-scope.test.mjs. include = ["custom_components/houseplan/**/*.py"] [tool.ruff.lint] # Narrow on purpose (#42: no mass rewrite): errors, pyflakes, bugbear, imports. select = ["E", "F", "B", "I"] # E501: 291 legacy long lines are NOT rewritten wholesale; length is not a gate. ignore = ["E501"] [tool.mypy] # 3.14, как и раннер после #392: mypy разбирает исходники установленного # homeassistant, а тот уже написан на синтаксисе 3.14 (`except` без скобок) — # на более низком python_version проверка падает синтаксической ошибкой в # чужом файле, не дойдя до наших модулей. python_version = "3.14" explicit_package_bases = true mypy_path = "." # Strict is opt-in per module (#42): the allowlist below only ever GROWS — # test/config-schema-parity guards live elsewhere; the backend guard is # tests_backend/test_backend_quality.py which fails when a module leaves. ignore_missing_imports = true follow_imports = "silent" no_site_packages = false [[tool.mypy.overrides]] module = [ "custom_components.houseplan.const", "custom_components.houseplan.projection", "custom_components.houseplan.coordinate_canonicalization", "custom_components.houseplan.frontend_asset_manifest", "custom_components.houseplan.junction_limits", "custom_components.houseplan.plans", ] strict = true