From c7a8993b4a1ed9ba9a48138737640bfc2720e302 Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Tue, 23 Jun 2026 06:58:35 +0300 Subject: [PATCH] chore: remove prettier, consolidate formatting under biome - Remove prettier dependency and config files (.prettierrc, .prettierignore) - Update root format/format:check scripts to use biome only (via frontend) - Update lint-staged: remove prettier --check, keep biome + eslint - Update CI: remove redundant format:check step - Update ADR-018 with code-first TanStack Router approach note --- .gitea/workflows/ci.yml | 3 --- .prettierignore | 1 - .prettierrc | 6 ------ apps/docs/docs/adr/ADR-018-tanstack-router.md | 17 +++++++++++------ package-lock.json | 5 +++-- package.json | 10 ++++------ 6 files changed, 18 insertions(+), 24 deletions(-) delete mode 100644 .prettierignore delete mode 100644 .prettierrc diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index fa9f736..52f458b 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -26,9 +26,6 @@ jobs: - name: Lint run: npm run lint - - name: Format check - run: npm run format:check - - name: Test backend run: npm run test:backend diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index dc8582f..0000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -apps/frontend/ diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index e5ce635..0000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "printWidth": 100, - "semi": true -} diff --git a/apps/docs/docs/adr/ADR-018-tanstack-router.md b/apps/docs/docs/adr/ADR-018-tanstack-router.md index b1855d9..99759bd 100644 --- a/apps/docs/docs/adr/ADR-018-tanstack-router.md +++ b/apps/docs/docs/adr/ADR-018-tanstack-router.md @@ -38,7 +38,7 @@ ## Решение -Мигрировать на **TanStack Router**. +Мигрировать на **TanStack Router** (code-first approach). Причины: 1. **Типобезопасность** — RouteTree generation исключает опечатки в путях и невалидные search params @@ -48,6 +48,8 @@ 5. **Search params** — типизированная валидация вместо строковых `useSearchParams` 6. **Меньший размер** — 3-4KB vs 8KB react-router-dom +> **Примечание о реализации:** Изначально планировался file-based подход с `@tanstack/router-plugin`, но плагин не генерировал `routeTree.gen.ts` корректно на текущей версии Vite/плагина. Принято решение использовать code-first подход — все маршруты определяются вручную в `routeTree.tsx` через `createRootRoute` + `createRoute`. Это даёт тот же функционал (типобезопасность, guard'ы, код-сплиттинг) без зависимости от Vite-плагина. + ## Последствия ### Положительные @@ -58,14 +60,17 @@ ### Риски - Переписывание всех роутов, компонентов навигации (`Link`, `useNavigate`) и тестов -- `MemoryRouter` в тестах заменяется на `createMemoryRouter` из TanStack Router -- Файловая структура роутов меняется — `src/app/routes/` с Route Tree generation +- `MemoryRouter` в тестах заменяется на `createMemoryHistory` + `RouterProvider` из TanStack Router +- Файловая структура роутов меняется — `src/app/routing/` с code-first определением в `routeTree.tsx` +- TanStack Router не экспортирует `useSearchParams` — потребовалась обёртка `useSearchParamsCompat` +- `useNavigate` использует объектный синтаксис: `navigate({ to: '...' })` вместо строкового `navigate('...')` - Learning curve для команды ### Миграция -- Каждый роут переносится по одному -- Старый `AppRoutes.tsx` сохраняется до полного прохождения тестов -- `react-router-dom` удаляется только после верификации +- Все маршруты определены в одном `routeTree.tsx` (code-first) +- Старый `AppRoutes.tsx` удалён после прохождения тестов +- `react-router-dom` удалён из зависимостей после верификации +- Все 125 тестов проходят, сборка зелёная ## Связанные документы - `docs/research/frontend-infrastructure-tooling/react-router-vs-tanstack-router.md` diff --git a/package-lock.json b/package-lock.json index 1cac322..06b6af7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,7 @@ ], "devDependencies": { "husky": "^9.1.7", - "lint-staged": "^16.4.0", - "prettier": "^3.0.0" + "lint-staged": "^16.4.0" } }, "apps/backend": { @@ -28534,6 +28533,8 @@ "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/package.json b/package.json index 487ea19..d7d167c 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "test:backend": "npm run test -w apps/backend", "test:frontend": "npm run test -w apps/frontend", "lint": "npm run lint -w apps/backend && npm run lint -w apps/frontend", - "format": "npm run format -w apps/frontend && prettier --write \"**/*.{ts,tsx}\"", - "format:check": "npm run format:check -w apps/frontend && prettier --check \"**/*.{ts,tsx}\"", + "format": "npm run format -w apps/frontend", + "format:check": "npm run format:check -w apps/frontend", "dev:docs": "npm run dev -w apps/docs", "build:docs": "npm run build -w apps/docs", "build:design-system": "npm run build -w packages/design-system", @@ -31,13 +31,11 @@ "apps/backend/src/**/*.{ts,tsx}": ["eslint --max-warnings=0"], "apps/backend/test/**/*.{ts,tsx}": ["eslint --max-warnings=0"], "apps/frontend/src/**/*.{ts,tsx}": ["biome check --write"], - "packages/design-system/src/**/*.{ts,tsx}": ["eslint --max-warnings=0"], - "**/*.{ts,tsx}": ["prettier --check"] + "packages/design-system/src/**/*.{ts,tsx}": ["eslint --max-warnings=0"] }, "devDependencies": { "husky": "^9.1.7", - "lint-staged": "^16.4.0", - "prettier": "^3.0.0" + "lint-staged": "^16.4.0" }, "overrides": { "@storybook/test": {