Форматирование перед PR: ESLint + Prettier и npm run format (#29) #30

Merged
aep merged 1 commits from feat/29-format-tooling into test 2026-10-15 17:23:22 +03:00
Owner

Closes #29. Bounded-задача, дизайн согласован в чате 15.10.2026.

Что сделано

  • npm run format (make format) — одна команда перед PR: eslint --fix → biome check --write → prettier --write по src/. Повторный запуск ничего не меняет.
  • Prettier (.prettierrc.json) — единственный форматтер: табы, ширина 140, одинарные кавычки (в CSS — двойные, как было), bracketSameLine, trailing comma.
  • ESLint (eslint.config.js, flat config) — @eslint/js + typescript-eslint + react-hooks recommended и правила, повторяющие biome.json; eslint-config-prettier последним.
  • biome остаётся линтером и сортирует импорты; его форматтер выключен (formatter.enabled: false), чтобы не спорить с Prettier.
  • npm run lint = eslint src && prettier --check src; входит в make lint и, значит, в make check.
  • README («Форматирование и линтеры») и CLAUDE.md обновлены.

Изменения кода (без изменения поведения)

  • Переформатированы Prettier'ом: index.tsx, ConsoleTable.tsx, OsvTable.tsx, Sidebar.tsx, Sidebar/styles.module.css.
  • Array<A | B> / ReadonlyArray<…> → (A | B)[] / readonly (…)[] в tableTypes.ts, useTableFilters.ts, money.ts.
  • ConsoleTable/flatten.ts: убран мёртвый ?? null после new Date(…) (no-constant-binary-expression).
  • ConsoleTable/useGrouping.ts: тернарник-инструкция → if/else (no-unused-expressions).

Rulings I made

  • R-1 Prettier и biome расходятся в 4 местах TS/TSX и в transition CSS — настройками не убрать. Решение владельца в чате: Prettier — единственный форматтер. — fixed a8a6da0
  • R-2 @typescript-eslint/array-type в режиме array: строже biome useConsistentArrayType (shorthand), но совместим; режим array-simple конфликтовал с biome ({…}[] → Array<{…}>). — fixed a8a6da0
  • R-3 Две находки ESLint recommended в ConsoleTable исправлены в коде, а не выключением правил. — fixed a8a6da0
  • R-4 Порядок в format: ESLint → biome → Prettier последним, чтобы форматирование всегда было за Prettier (biome при сортировке импортов переписывает строки). — fixed a8a6da0
  • R-5 Версии зафиксированы точно и не новые (eslint 9.17.0, prettier 3.3.3, typescript-eslint 8.18.2, eslint-plugin-react 7.37.3, eslint-plugin-react-hooks 5.1.0, eslint-config-prettier 9.1.0, globals 15.14.0) — ради зеркала Nexus банка (там, например, vitest ≤ 3.1.4). — fixed a8a6da0
  • R-6 Не перенесены в ESLint правила biome без простого аналога: useAtIndex, useCollapsedIf, noSkippedTests, noDuplicateProperties (CSS), a11y recommended (нет jsx-a11y). Их по-прежнему проверяет biome в make lint. — rejected: дублирование без пользы, biome остаётся
  • R-7 Pre-commit хука нет — решение владельца. — rejected: решение владельца

Наблюдения

  • O-1 guard-main блокирует запись в scratchpad, когда cwd оболочки — main-checkout другого репозитория (смотрит на cwd, а не на путь записи). Не обходил; проба Prettier выполнена в worktree. — deferred (обвязка)
  • O-2 После sync-web в arm-core/web приедут .prettierrc.json, eslint.config.js, новый biome.json и devDependencies; если какой-то из пакетов R-5 отсутствует в Nexus, npm install в контуре упадёт. — deferred (проверить в контуре)

Проверка

  • make check — rc=0: biome 0 ошибок / 7 предупреждений (как было), ESLint 0 ошибок / 9 предупреждений (any, зависимости хуков), All matched files use Prettier code style!, vitest 24 файла / 138 тестов, tsc --noEmit чисто, rsbuild build ок.
  • npm run format на чистом дереве — изменений нет (write-tree совпал).
  • Испорченный файл: npm run lint → rc=1; npm run format → приведён к export const zzz = { a: 1, b: 'x' };.

Findings

Маркер Суть Статус
R-1 Prettier — единственный форматтер fixed a8a6da0
R-2 array-type: режим array fixed a8a6da0
R-3 находки ESLint в ConsoleTable исправлены в коде fixed a8a6da0
R-4 порядок format: ESLint → biome → Prettier fixed a8a6da0
R-5 точные нестарые версии ради Nexus fixed a8a6da0
R-6 правила biome без аналога в ESLint не перенесены rejected: проверяет biome
R-7 без pre-commit хука rejected: решение владельца
O-1 guard-main и запись в scratchpad при cwd на main deferred
O-2 доступность новых пакетов в Nexus для arm-core/web deferred

🤖 Generated with Claude Code

Closes #29. Bounded-задача, дизайн согласован в чате 15.10.2026. ## Что сделано - **`npm run format`** (`make format`) — одна команда перед PR: `eslint --fix` → `biome check --write` → `prettier --write` по `src/`. Повторный запуск ничего не меняет. - **Prettier** (`.prettierrc.json`) — единственный форматтер: табы, ширина 140, одинарные кавычки (в CSS — двойные, как было), `bracketSameLine`, trailing comma. - **ESLint** (`eslint.config.js`, flat config) — `@eslint/js` + `typescript-eslint` + `react-hooks` recommended и правила, повторяющие `biome.json`; `eslint-config-prettier` последним. - **biome** остаётся линтером и сортирует импорты; его форматтер выключен (`formatter.enabled: false`), чтобы не спорить с Prettier. - **`npm run lint`** = `eslint src && prettier --check src`; входит в `make lint` и, значит, в `make check`. - README («Форматирование и линтеры») и CLAUDE.md обновлены. ## Изменения кода (без изменения поведения) - Переформатированы Prettier'ом: `index.tsx`, `ConsoleTable.tsx`, `OsvTable.tsx`, `Sidebar.tsx`, `Sidebar/styles.module.css`. - `Array<A | B>` / `ReadonlyArray<…>` → `(A | B)[]` / `readonly (…)[]` в `tableTypes.ts`, `useTableFilters.ts`, `money.ts`. - `ConsoleTable/flatten.ts`: убран мёртвый `?? null` после `new Date(…)` (no-constant-binary-expression). - `ConsoleTable/useGrouping.ts`: тернарник-инструкция → `if/else` (no-unused-expressions). ## Rulings I made - **R-1** Prettier и biome расходятся в 4 местах TS/TSX и в `transition` CSS — настройками не убрать. Решение владельца в чате: Prettier — единственный форматтер. — fixed a8a6da0 - **R-2** `@typescript-eslint/array-type` в режиме `array`: строже biome `useConsistentArrayType` (shorthand), но совместим; режим `array-simple` конфликтовал с biome (`{…}[]` → `Array<{…}>`). — fixed a8a6da0 - **R-3** Две находки ESLint recommended в `ConsoleTable` исправлены в коде, а не выключением правил. — fixed a8a6da0 - **R-4** Порядок в `format`: ESLint → biome → Prettier последним, чтобы форматирование всегда было за Prettier (biome при сортировке импортов переписывает строки). — fixed a8a6da0 - **R-5** Версии зафиксированы точно и не новые (eslint 9.17.0, prettier 3.3.3, typescript-eslint 8.18.2, eslint-plugin-react 7.37.3, eslint-plugin-react-hooks 5.1.0, eslint-config-prettier 9.1.0, globals 15.14.0) — ради зеркала Nexus банка (там, например, vitest ≤ 3.1.4). — fixed a8a6da0 - **R-6** Не перенесены в ESLint правила biome без простого аналога: `useAtIndex`, `useCollapsedIf`, `noSkippedTests`, `noDuplicateProperties` (CSS), a11y recommended (нет `jsx-a11y`). Их по-прежнему проверяет biome в `make lint`. — rejected: дублирование без пользы, biome остаётся - **R-7** Pre-commit хука нет — решение владельца. — rejected: решение владельца ## Наблюдения - **O-1** guard-main блокирует запись в scratchpad, когда cwd оболочки — main-checkout другого репозитория (смотрит на cwd, а не на путь записи). Не обходил; проба Prettier выполнена в worktree. — deferred (обвязка) - **O-2** После `sync-web` в arm-core/web приедут `.prettierrc.json`, `eslint.config.js`, новый `biome.json` и devDependencies; если какой-то из пакетов R-5 отсутствует в Nexus, `npm install` в контуре упадёт. — deferred (проверить в контуре) ## Проверка - `make check` — rc=0: biome 0 ошибок / 7 предупреждений (как было), ESLint 0 ошибок / 9 предупреждений (`any`, зависимости хуков), `All matched files use Prettier code style!`, vitest 24 файла / 138 тестов, `tsc --noEmit` чисто, `rsbuild build` ок. - `npm run format` на чистом дереве — изменений нет (write-tree совпал). - Испорченный файл: `npm run lint` → rc=1; `npm run format` → приведён к `export const zzz = { a: 1, b: 'x' };`. ## Findings | Маркер | Суть | Статус | |---|---|---| | R-1 | Prettier — единственный форматтер | fixed a8a6da0 | | R-2 | array-type: режим `array` | fixed a8a6da0 | | R-3 | находки ESLint в ConsoleTable исправлены в коде | fixed a8a6da0 | | R-4 | порядок format: ESLint → biome → Prettier | fixed a8a6da0 | | R-5 | точные нестарые версии ради Nexus | fixed a8a6da0 | | R-6 | правила biome без аналога в ESLint не перенесены | rejected: проверяет biome | | R-7 | без pre-commit хука | rejected: решение владельца | | O-1 | guard-main и запись в scratchpad при cwd на main | deferred | | O-2 | доступность новых пакетов в Nexus для arm-core/web | deferred | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-15 16:15:40 +03:00
- Prettier — единственный форматтер (табы, 140, одинарные кавычки, в CSS — двойные);
  форматтер biome выключен, biome остаётся линтером и сортирует импорты.
- ESLint (flat config): js/typescript-eslint/react-hooks recommended + правила biome.json,
  eslint-config-prettier последним.
- npm run format / make format: eslint --fix → biome check --write → prettier --write.
- npm run lint: eslint + prettier --check; входит в make lint и make check.
- Разовое переформатирование 4 файлов, `(A | B)[]` вместо Array<…> в 3 местах,
  две находки ESLint в ConsoleTable (лишний `?? null`, тернарник-инструкция).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 5acb6ef3c3 into test 2026-10-15 17:23:22 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-web#30
No description provided.