chore: finish frontend ESLint migration #18

Enable every plugin recommended preset and replace Biome with ESLint formatting.

Preserve API contracts and JSX whitespace; verify source, tests, builds and tooling.
This commit is contained in:
2026-09-28 16:36:40 +03:00
committed by ksv741
parent 57630102e4
commit 72d7835227
253 changed files with 10059 additions and 8864 deletions
+18 -21
View File
@@ -81,32 +81,29 @@ npm run verify
```
Команда проверяет, что generated OpenAPI types соответствуют committed snapshot,
затем запускает strict TypeScript, Biome, ESLint и проверку его конфигурации,
затем запускает strict TypeScript, ESLint и проверку его конфигурации,
один coverage-backed запуск Vitest,
Knip, dependency rules приложения и stories, сборки приложения и Storybook.
`npm run lint` объединяет `lint:biome` и `lint:eslint`. Biome сохраняет
форматирование, сортировку импортов, magic numbers и accessibility-проверки.
[ESLint](eslint.config.mjs) добавляет typed linting, React Compiler/hooks,
Fast Refresh, TanStack Query, выбранные Unicorn-правила и проверки тестов/stories.
Prettier не добавлен. `npm run test:lint` проверяет правила на ошибочных примерах
и исключение generated/build artifacts. `lint:eslint` сначала собирает private
packages, чтобы анализ типов использовал их актуальные declarations.
`npm run lint` запускает ESLint с `--max-warnings=0`; `npm run lint:fix`
применяет автофиксы. [Конфигурация](eslint.config.mjs) подключает рекомендованные
наборы всех установленных плагинов: TypeScript, React, Hooks, Refresh, Query,
Unicorn, import-x, SonarJS, RegExp, Security, Perfectionist, Stylistic,
Vitest, Testing Library, jest-dom и Storybook. Правила React, тестов и stories
применяются к соответствующим файлам; generated/build artifacts исключены.
Пересекающиеся hook-диагностики принадлежат официальному `react-hooks`.
Testing Library проверяет async-корректность; DOM structure/geometry tests
сохраняют прямой доступ к узлам. Async doubles допускаются без искусственного
`await`; Vitest допускает второй аргумент сообщения и ветвления фиксированных
`it.each` сценариев. React event handlers допускают Promise, но их тела остаются
под `no-floating-promises`. Локальные исключения объясняют сохранение wire
ProblemDetails, generated query keys и раннее подключение rejection assertions
в race-тестах. Плагин Query не доказывает корректность всех generated/custom
обёрток: transport/cache сценарии по-прежнему проверяют MSW-тесты.
Stylistic отвечает за форматирование JS/TS/TSX, Perfectionist — за сортировку.
Сохраняются табы, двойные кавычки и точки с запятой. Biome удалён; Prettier
не используется. CSS, JSON и Markdown не форматируются через ESLint.
`lint-staged` исправляет JS/TS/TSX перед commit. `lint:eslint` сначала собирает
private packages, чтобы анализ типов использовал актуальные declarations.
`npm run test:lint` проверяет действующие presets и ошибочные примеры.
Дополнительные `no-unnecessary-condition` и `no-deprecated` пока не включены:
первому нужна отдельная оценка индексного доступа и защитных runtime guards,
второму — отдельная миграция API зависимостей. Пакеты второй волны и
`jsx-a11y` без заявленной поддержки ESLint 10 отложены в
Точечные исключения в исходниках объясняют контракты и ограничения статического
анализа; изменение nullable API fields, query keys или порядка race-операций
ради линтера недопустимо. Архитектуру проверяет dependency-cruiser, поведение —
Vitest/MSW и Chromium. Линтеры не заменяют semantic/security review.
`jsx-a11y` без поддержки ESLint 10 остаётся отложенным в
[workspace issue #18](https://git.personal.ksv741.ru/WealthLedger/main/issues/18).
Vitest включает JSDOM-тесты и проверку геометрии секций позиций в headless