[project] name = "dev-skills" version = "0" description = "Маркетплейс плагинов av-dev; здесь только линтеры скриптов скиллов" requires-python = ">=3.12" dependencies = [] # Версии прибиты точно: обновление линтера меняет набор находок, а находки тут # правятся руками в скриптах, которые уезжают в чужие проекты. Обновление — # отдельная осознанная правка, а не побочный эффект `uv sync`. [dependency-groups] dev = ["ruff==0.16.1", "pyrefly==1.2.0"] [tool.uv] package = false [tool.ruff] target-version = "py312" line-length = 88 # backlog.py заморожен: плагин помечен УСТАРЕЛ и живёт до перевода последнего # проекта, после чего удаляется целиком. Правки в него — риск без выгоды. exclude = ["av-dev-backlog"] [tool.ruff.lint] select = [ "F", # pyflakes: неиспользованное, неопределённое, битые f-строки "E", "W",# pycodestyle "I", # порядок импортов "UP", # устаревшие для 3.12 конструкции "B", # bugbear: изменяемый дефолт, забытый raise, цикл с замыканием "SIM", # упрощения "RET", # возвраты "PTH", # os.path → pathlib "RUF", # правила самого ruff "TID", # запрет внешних зависимостей, см. banned-api ниже "BLE", # голый except Exception — только там, где помечен noqa ] ignore = [ "E501", # длину строк держит formatter, а не проверка # Весь текст скриптов — русский: сообщения, докстроки, комментарии. # «Похожая на латиницу кириллица» здесь не опечатка, а норма, и три этих # правила дают 311 срабатываний из 338 на пустом месте. "RUF001", "RUF002", "RUF003", ] [tool.ruff.lint.flake8-tidy-imports.banned-api] # Скрипты обязаны работать на голом python 3.12 без установки чего-либо: # они лежат рядом со скиллами и запускаются в любом проекте. Список — не # полный перечень мира, а частые соблазны; настоящий страж — pyrefly, у # которого в окружении нет ничего, кроме линтеров. "requests".msg = "внешняя зависимость; скрипты работают на голом python 3.12" "yaml".msg = "внешняя зависимость; для json есть stdlib, для yaml — разбор руками" "pydantic".msg = "внешняя зависимость; скрипты работают на голом python 3.12" "click".msg = "внешняя зависимость; аргументы разбирает argparse" "rich".msg = "внешняя зависимость; вывод — обычный print" [tool.ruff.format] quote-style = "double" [tool.pyrefly] project-includes = [ "av-dev-pm/skills/tasks/scripts/tasks.py", "av-dev-pm/skills/canon/scripts/docs.py", "scripts/copies.py", "scripts/diagrams.py", ] python-version = "3.12"