Каталог правил
Все правила имеют префикс feod-structure/ и одинаково работают в ESLint и Oxlint. В таблице приведён состав статических пресетов. createConfig и configFromProject дополнительно включают опциональные проверки согласно политикам проекта.
error — правило включено; off — выключено. Autofix отсутствует у всех правил: изменение архитектурных границ требует решения разработчика.
| Правило | Назначение | recommended | strict |
|---|---|---|---|
| layer-imports | Направления зависимостей и публичные API модулей | error | error |
| no-common-index | Запрет index-файлов и их импорта в common | error | error |
| no-common-deep | Ограничение глубины каталогов common | error | error |
| no-zigzag-imports | Относительные импорты внутренних файлов другого модуля | error | error |
| no-unknown-files | Файлы вне известных слоёв | error | error |
| no-submodule-of-submodule | Доступ к глубоким подмодулям только владельцу и непосредственным parent/child | error | error |
| pages-private-modules | Область доступа приватных модулей страниц | error | error |
| visibility-levels | Глубина внешних импортов для выбранных каталогов | off | error |
| global-files | Допустимые пути файлов глобального слоя | off | off |
| module-names | Запрещённые имена владельцев модулей | off | off |
| module-entries | Наличие публичного entry-файла на диске | off | off |
| no-module-cycles | Циклы зависимостей между модулями | off | off |
| no-file-cycles | Циклы зависимостей между файлами | off | off |
| large-files | Размер файлов и реестр планируемого разбиения | off | off |
| confine | Ограничение импортов и строк выбранными файлами | off | off |
visibility-levels без настроенного списка levels не ограничивает глубину, даже когда включён. no-submodule-of-submodule входит в оба пресета.
Когда включаются опциональные правила
| Политика проекта | Правило | Дополнительное условие |
|---|---|---|
globals.allowedFiles — непустой список | global-files | Слой с ролью global |
modules.forbiddenNames — непустой список | module-names | Слой с ролью modules |
modules.requirePublicEntry: true | module-entries | Слой с ролью modules |
cycles.modules: true | no-module-cycles | Слой с ролью modules |
cycles.files: true | no-file-cycles | — |
extra.largeFiles — задан объект | large-files | — |
extra.confine — непустой список | confine | — |
Построитель включает правило как error, если оно нужно хотя бы одному корню, и передаёт каждому корню его options. Для warn сохраняйте эти options: ESLint, Oxlint.
Как читать примеры
В деревьях зачёркнуты запрещённые файлы или имена; значки рядом с ними содержат пояснения. В CodeView выберите файл в дереве, чтобы увидеть его код и границы зависимостей. На узком экране дерево и код переключаются кнопкой в панели. Маркеры у строк открывают пояснения при наведении или нажатии; подсветка «− / +» показывает, что удалить и чем заменить при исправлении.
Если не указано иное, используется стандартная структура src, конфигурация по умолчанию и настроенный парсер TypeScript. Комментарий с путём перед кодом показывает расположение файла. Импортируемые файлы в примерах предполагаются существующими. «Корректно» означает отсутствие нарушения рассматриваемого правила: другие правила могут накладывать дополнительные ограничения.
Раздел «Настройка» на странице правила показывает объект для createConfig. В ESLint функция импортируется из корня пакета, в Oxlint — из /configs. В feod.config.json записывается только объект, переданный первым аргументом.
Общие параметры прямого подключения
Параметры ниже передаются в options правила при ручном подключении. Не каждое правило принимает весь список: поддерживаемые группы указаны на его странице.
| Группа | Параметр | Значение по умолчанию | Назначение |
|---|---|---|---|
| Пути | rootDir | process.cwd() | Корень проекта |
| Пути | srcRoot | "src" | Корень исходников относительно rootDir |
| Пути | ignore | Пустой список | Glob или массив исключений от rootDir |
| Алиасы | aliasPrefix | "@" | Алиас корня вида @/… |
| Алиасы | aliasRoot | srcRoot | Цель алиаса корня |
| Алиасы | layerAliases | @app, @pages, @modules, @common, @global | Алиасы слоёв; цели от rootDir |
layerDirs переопределяет каталоги FEOD-ролей относительно корня исходников. Допустимые ключи зависят от правила. layers задаёт полный набор слоёв только для правил, которые принимают эту опцию. Проще использовать проектную конфигурацию: она передаёт каждому правилу нужные параметры.
Явные roots ограничивают область архитектуры; при вложенности файл принадлежит ближайшему корню. FEOD ignore может исключать и импортирующий файл, и цель; подробности и отличия от files линтера — в руководстве по миграции.