Skip to content

chore: миграция на ruff 0.16 — фиксы новых дефолтов, верхняя граница пина - #38

Merged
Flexlug merged 3 commits into
mainfrom
ruff-016-migration
Jul 26, 2026
Merged

chore: миграция на ruff 0.16 — фиксы новых дефолтов, верхняя граница пина#38
Flexlug merged 3 commits into
mainfrom
ruff-016-migration

Conversation

@Flexlug

@Flexlug Flexlug commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Что изменилось

Два коммита, оба зелёные:

  1. style: совместимость с дефолтами ruff 0.16 (54 файла, поведение сохранено) — код проходит линт и под 0.15.22, и под 0.16.0.
  2. chore(dev): пин ruff>=0.16,<0.17 — временный <0.16 из chore(ci): пин ruff <0.16 — дефолты 0.16.0 уронили CI #37 снят; граница по минору осталась, т.к. минорные релизы ruff меняют дефолтные правила, а uv.lock в gitignore.

Ключевое для ревью

  • Интроспекция типов: PEP 604-аннотации схемы (str | None) в рантайме дают types.UnionType вместо typing.Union — рендер конфиг-ошибок и генератор доков перестали распознавать Union (падало 11 тестов). Добавлен _is_union() в config/errors.py и docs/gen_pages.py, понимающий обе формы.
  • RUF100 срезал noqa вместе с текстом-обоснованием в bridge.py — обоснования возвращены обычными комментариями («миррор не должен валить поток», «на shutdown не валим остальные stop()»); упоминание # noqa: BLE001 в AGENTS.md поправлено.
  • Намеренные broad-catch (реконнект meshcore, teardown, best-effort меню/реакции Telegram, default_factory в генераторе доков) — noqa: BLE001/S110 с причиной, по правилу «ни одного голого подавления».
  • DTZ004: utcfromtimestamp (deprecated с 3.12) → fromtimestamp(ts, tz=UTC) в журнале модерации — строка вывода идентична.
  • Остальное — механика: сортировка импортов, Optional[X]X | None, anyio.sleep(0)lowlevel.checkpoint(), _DEFAULT_RATE-синглтоны вместо вызова в дефолтах, _ для неиспользуемых распаковок, PEP 604 алиасы Member/Subscriber.
  • Явный select в [tool.ruff] решили не заводить: дефолты + граница по минору дают осознанные апгрейды без своего списка правил.

Проверено

  • ruff check: 0.15.22 и 0.16.0 — оба clean (первый коммит совместим с обеими версиями).
  • pytest -q: 363 passed; mypy lora_bridge (strict): clean.

beads: LoRa-Bridge-9qw

🤖 Generated with Claude Code

Flexlug and others added 3 commits July 26, 2026 03:37
ruff 0.16.0 расширил дефолтный набор правил — 170 находок по репо.
Автофиксы: I001 (сортировка импортов), UP035/UP037/UP045 (PEP 604 и
современные импорты typing), ASYNC115 (anyio.sleep(0) →
lowlevel.checkpoint()), RUF022, RUF100 (снятые noqa; смысловые
обоснования возвращены обычными комментариями).

Руками:
- errors.py/gen_pages.py: _is_union() — интроспекция типового дерева
  понимает обе формы Union (typing.Union и types.UnionType): PEP 604
  аннотации схемы в рантайме дают types.UnionType, без этого падал
  рендер конфиг-ошибок и генератор доков (11 тестов).
- BLE001/S110: намеренные broad-catch в адаптерах получили noqa с
  причиной (реконнект, teardown, best-effort меню/реакции).
- DTZ004: deprecated utcfromtimestamp → fromtimestamp(tz=UTC),
  строка вывода идентична.
- DTZ001: тестовые даты aiogram-сообщений теперь aware-UTC (как в
  реальном API).
- B008: RateSpec-дефолты хелперов → модульный _DEFAULT_RATE.
- RUF059: неиспользуемые распаковки → «_».
- UP007: алиасы Member/Subscriber → PEP 604.
- AGENTS.md: упоминание снятого noqa в описании mirror_to_messenger.

Проверено: ruff 0.15.22 и 0.16.0 — оба clean; pytest 363 passed;
mypy strict clean.

beads: LoRa-Bridge-9qw

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Кодовая база совместима с дефолтами 0.16 (предыдущий коммит).
Верхняя граница <0.17 вместо открытой: минорные релизы ruff меняют
дефолтный набор правил, а uv.lock в gitignore — без границы CI
дрейфует и краснеет сам по себе (как случилось с 0.16.0).

beads: LoRa-Bridge-9qw

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
По ревью: _is_union был объявлен дважды (config/errors.py и
docs/gen_pages.py). Дубль на деле старше миграции — _strip_annotated
и _unwrap_annotated в тех же файлах имели идентичные тела.

Оба примитива вынесены публично в lora_bridge/config/introspect.py
(is_union_origin, strip_annotated); errors.py, gen_pages.py и
test_config_errors_unit.py переключены на общий модуль. Одноимённые
_pretty_type не тронуты — это разные рендеры (RU-текст vs markdown).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Flexlug
Flexlug merged commit 4861122 into main Jul 26, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant