3.9 KiB
ADR-017: Biome как единый инструмент линтинга и форматирования
Дата: 2026-06-23 Статус: Принято Автор: AI Agent (codex/frontend-infrastructure-tooling)
Контекст
Проект использует ESLint v8 + Prettier для линтинга и форматирования. ESLint 8 устарел: ESLint 9 имеет полностью изменённый конфиг, миграция потребует переписывания .eslintrc. Оба инструмента написаны на JavaScript и работают медленно на больших кодовых базах.
Появились современные Rust-альтернативы, объединяющие линтинг и форматирование в одном CLI со значительным приростом производительности.
Рассмотренные варианты
Biome v2.5
- Linter + Formatter в одном CLI
- 500+ правил (ESLint + TypeScript ESLint + others)
- 97% совместимость форматтера с Prettier
- ~35x быстрее Prettier, ~35x быстрее ESLint
- Поддержка: JS, TS, JSX, TSX, JSON, HTML, CSS, GraphQL
- Стабильный LTS, продакшн у AWS, Google, Vercel
- Встроенная миграция:
biome migrate eslint
Oxlint + Oxfmt (Oxc Project)
- Linter отдельно (800+ правил, 50-100x быстрее ESLint)
- Formatter отдельно (Oxfmt, beta, 3x быстрее Biome, 30x быстрее Prettier)
- Type-aware linting через tsgo
- Два отдельных инструмента с разными конфигами
- Oxfmt в статусе beta
Оставить ESLint + Prettier
- Знакомый стек
- Медленная производительность
- Необходимость мигрировать на ESLint 9 в любом случае
- Два набора конфигов
Решение
Перейти на Biome как единый инструмент для линтинга и форматирования.
Причины:
- Один инструмент вместо двух — меньше конфигов, один CI-степ, одна команда
- Production-ready — стабильный LTS, используется крупными компаниями
- Плавная миграция —
biome migrate eslintпереносит правила автоматически - Производительность — ~35x быстрее как линтинг, так и форматирование
- Встроенный import sorting — замена
eslint-plugin-import
Ограничения
FSD-правила из @conarti/eslint-plugin-feature-sliced не имеют аналога в Biome. Если не удаётся портировать через plugin system — сохраняется минимальный .eslintrc.cjs только для FSD layer boundaries.
Последствия
Положительные
- Единый конфиг
biome.jsonвместо.eslintrc.cjs+.prettierrc - Ускорение CI (lint + format за один проход)
- Автоматический import sorting
- Меньше зависимостей в
package.json
Риски
- FSD-правила могут не портироваться — потребуется костыль с минимальным ESLint
- Biome может не поддерживать какое-то редкое правило ESLint — потребуется адаптация
- Команде нужно привыкнуть к новому CLI
Связанные документы
docs/research/frontend-infrastructure-tooling/biome-vs-oxlint.mddocs/features/frontend-infrastructure-tooling/plan.md(Phase 2)