Скрипты остаются на голом python 3.12 без зависимостей: pyproject.toml живёт только в этом репозитории и держит линтеры, а не зависимости скриптов. Ноль зависимостей охраняется дважды: banned-api у ruff ловит частые соблазны по имени, pyrefly видит окружение без ничего и не разрешает любой сторонний импорт. Версии прибиты точно, uv.lock под git: обновление линтера меняет набор находок, а находки правятся руками в скриптах, которые уезжают в чужие проекты. RUF001–003 выключены — весь текст русский, 311 срабатываний из 338 шум. av-dev-backlog исключён: заморожен до удаления, правка без выгоды. Из 41 находки содержательных две: мёртвая ques в check и два места, где find_entry_index может вернуть None прямо в list.pop и range. По ревью там стоит raise, а не continue: тихий пропуск превратил бы сломанный инвариант в отчёт «индексы согласованы». os из tasks.py ушёл целиком, fail() в docs.py объявлен NoReturn. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
66 lines
3.5 KiB
TOML
66 lines
3.5 KiB
TOML
[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",
|
|
]
|
|
python-version = "3.12"
|