ESLint и Oxlint
Плагины o-feod проверяют архитектуру по расположению файлов и зависимостям между ними: направления импортов, публичные API модулей, приватные подмодули и структуру слоёв. ESLint и Oxlint используют одну реализацию правил, резолвер и конфигурацию FEOD.
Начните с подключения ESLint или Oxlint, затем выберите настройки в справочнике конфигурации. Для существующего проекта есть руководство по постепенной миграции.
Что выбрать
| ESLint | Oxlint | |
|---|---|---|
| Пакет | @o-feod/eslint-structure-plugin | @o-feod/oxlint-structure-plugin |
| Подключение | Flat config, plugins | jsPlugins |
| Имена правил | feod-structure/* | feod-structure/* |
| TypeScript и Vue | Парсеры настраивает проект | Используется парсер Oxlint; проверяются script-блоки Vue |
| Конфигурация архитектуры | Общие roots, layers, aliases и политики | Те же настройки |
FEOD-пресеты включают только архитектурные правила. Правила языка, форматирование, проверки Vue/React и настройки сборщика подключаются отдельно.
Версия документации
Раздел описывает реализацию в исходниках репозитория. При подключении сверяйте экспорты и README установленной версии: в 0.1.0 ещё нет createConfig, configFromProject и части расширенных проверок, описанных здесь.
Пресеты
recommended включает семь правил основной структуры. strict добавляет visibility-levels, но без levels эта проверка не ограничивает глубину. Опциональные правила выключены в обоих статических пресетах; createConfig и configFromProject включают их по заданным политикам.
Каталог правил показывает состав обоих пресетов и условия включения. Каждая страница правила содержит назначение, ошибочные и корректные примеры, параметры, ограничения и ссылки на реализацию и тесты.
Как устроена проверка
По умолчанию корень исходников — src, слои — app, pages, modules, common, global. Через layers можно задать собственный граф зависимостей; role подключает к выбранным слоям специальные проверки FEOD. Несколько корней могут иметь разные наборы слоёв и направленные зависимости.
Проверки импортов распознают import, реэкспорты, TypeScript import types и import-equals, незатенённый require() и динамический import() со статическим путём. Поддерживаются строковые литералы, шаблоны без подстановок и форма import(new URL('./file.ts', import.meta.url).href) с незатенённым URL. Вычисляемые пути по умолчанию пропускаются; imports.computed: "forbid" позволяет запретить их в layer-imports.
Плагин анализирует пути и зависимости, а не смысл бизнес-логики. Он не выбирает модуль за разработчика и не перестраивает файловую систему автоматически. Архитектурные правила не имеют autofix.