chore: update lint rules

This commit is contained in:
2026-09-25 15:52:30 +05:00
parent ebb2176a2c
commit c1d2957ba5
13 changed files with 268 additions and 116 deletions
+4 -4
View File
@@ -57,10 +57,10 @@
- registry нового UI содержит 122 инструмента;
- `pnpm --dir web check` проходит без ошибок и предупреждений;
- `pnpm --dir web lint:all` завершается с 0 errors, но с 188 warnings
`i18n/dict-consistency` и 4 unused design tokens;
- unit/e2e результаты считать актуальными только после отдельного прогона;
исторические числа в `docs/archive/` не являются baseline.
- `pnpm --dir web lint:all` завершается с 0 errors и 0 i18n warnings; остаются 4
unused design tokens от token audit;
- `pnpm verify` проходит; unit/e2e результаты считать актуальными только после
отдельного прогона, исторические числа в `docs/archive/` не являются baseline.
Baseline и следующий шаг поддерживаются в `docs/plan-codebase-quality.md`.
+4 -2
View File
@@ -5,8 +5,8 @@
- [x] Кросс-языковой линтер словарей (warn-only: паритет ключей, пустые
значения, совпадение `{placeholder}`-переменных между всеми локалями) —
правило `i18n/dict-consistency`, детали в §Фаза 8
`docs/plan-preview-i18n.md`. Правило реализовано; доведение baseline до
zero-warning вынесено в Q2 `docs/plan-codebase-quality.md`.
`docs/plan-preview-i18n.md`. Правило реализовано; Q2 перевёл i18n baseline
к zero-warning через policy-aware fallback, не меняя `/v1`.
- [ ] проверка дублирования кода html - div с одинаковым классом и т.д. (глянуть
что за `SonarLint` или написать кастомный линтер)
- [ ] проверка текстов в svelte\ts\html - всё тексты должны быть через i18n
@@ -14,6 +14,8 @@
- [ ] консистентность комментариев - если есть описание к одному инструменту -
оно должно быть у всех или объяснено, почему этот инструмент такой
особенный и заслуживает комментарий
- [ ] удалить legacy `tools.*.params` из root i18n после проверки потребителей;
до этого Q2 держит pattern-based policy-исключение
## Мелочи всякие
+15 -14
View File
@@ -112,21 +112,22 @@ pnpm --dir web test:e2e
### Q2. Политика i18n и zero-warning baseline
**Оценка:** M. **Зависимости:** Q0, Q1.
**Статус:** готов к ревью. **Проверено:** i18n lint даёт 0 warnings, rule-тесты
и полный `pnpm verify` проходят. **Оценка:** M. **Зависимости:** Q0, Q1.
- Решить, являются ли `registry.title/description` физическими ключами словарей
или допустимым английским fallback.
- Не исправлять расхождения массовым allowlist-ом. Сначала классифицировать их
на реальные пропуски и осознанные fallback-источники.
- Дополнить словари до согласованной схемы, включая реальные пропуски в `ru.ts`.
- После очистки включить zero-warning gate.
- Отдельно проверить, что изменения в i18n не требуют синхронного изменения
`v1`-словарей: новая и legacy-ветки изолированы.
- Не начинать plural-формы до решения модели `string | PluralForms`
(`docs/plan-preview-i18n.md:289-307`).
**Готово, когда:** dictionary linter даёт ноль несогласованностей без
молчаливого подавления ошибок, а тесты словарей проходят в обеих локалях.
- `BASE_LOCALE` — единственный источник registry-English fallback для
`tools.*.title` и `tools.*.description`; остальные локали требуют физические
ключи.
- Legacy `tools.*.params` исключён pattern-based policy до отдельной очистки
мёртвого словаря; пустые значения и placeholders не подавляются.
- Исправлены три реальных RU option-label gaps и удалены неиспользуемые legacy
option-группы из `ru.ts`.
- Исправлен tie-break placeholder parity: при равенстве голосов выбирается
`BASE_LOCALE`.
- `lint-all` запускает ESLint с `--max-warnings=0`; token audit пока оставляет 4
unused-token warnings отдельным debt.
- Plural-формы остаются отдельной задачей после Q2 и не смешиваются с этим
этапом.
### Q3. Тестовый контракт e2e
+8 -8
View File
@@ -1,9 +1,9 @@
# План: i18n в preview (новый UI)
> Статус: **частично выполнен** — базовая i18n-инфраструктура нового UI,
> локализация ошибок и `i18n/dict-consistency` уже реализованы; zero-warning
> baseline и plural-формы остаются Q2. Актуальные решения и ограничения — в
> `docs/plan-codebase-quality.md`.
> локализация ошибок, `i18n/dict-consistency` и zero-warning baseline Q2
> реализованы; plural-формы остаются отдельной задачей. Актуальные решения и
> ограничения — в `docs/plan-codebase-quality.md`.
## 1. Что получается
@@ -279,11 +279,11 @@
`empty value "x.y" in en`.
- **Паритет плейсхолдеров**: у одинакового ключа набор `{name}` одинаковый во
всех локалях — поймать потерянную при переводе переменную.
- **8.3** Цель — zero-warn. Сейчас `en.ts` неполный (в `tools` только
результаты-помощники, остальной английский — из реестра), поэтому после
включения будет много warn'ов: доводим `en.ts` до полноты `ru.ts` (секции +
`tools` полностью, source — registry-English, без дрейфа). До достижения цели
допускается allowlist-механизм в ядре правила для осознанных отклонений.
- **8.3** Политика источников: `tools.*.title` и `tools.*.description` в
`BASE_LOCALE` намеренно берутся из registry English fallback; остальные локали
обязаны иметь физические переводы. Старый `tools.*.params` не используется
новым UI и пока исключён policy-pattern, а не списком id. Target — zero-warn
без молчаливых подавлений.
- **8.4** Тесты правила — фикстуры в `web/eslint-plugins/__fixtures__/`, док в
`web/eslint-plugins/README.md`; включение в `eslint.config.js` как `"warn"`.
+9 -6
View File
@@ -50,12 +50,15 @@ baseline; после закрытия известных ошибок его м
## Errors и warnings
- `errors` завершают соответствующий инструмент ненулевым кодом.
- `warnings` не завершают текущий lint автоматически, пока не включён строгий
режим.
- На baseline Q0 `lint:all` даёт 0 errors, 188 `i18n/dict-consistency` warnings
и 4 unused-token warnings. Это известные долги, а не чистый результат.
- После Q2 parity-линтер должен перейти к zero-warning, после чего можно
включить `--max-warnings=0` без обходных allowlist-ов.
- После Q2 ESLint запускается с `--max-warnings=0`: новые ESLint warnings
блокируют gate.
- Token audit пока оставляет unused-token warnings отдельным неблокирующим
сообщением.
- `lint:all` по-прежнему сообщает 4 unused-token warnings отдельным
предупреждением token audit; это следующий debt Q6.
- `dict-consistency` использует base-locale fallback для registry metadata и
pattern-based policy для legacy `tools.*.params`; это не молчаливый
`allowPaths`-список.
## CI