BetaДокументация для beta‑теста, возможны ошибки и неточности.
Перейти к содержимому

feod-structure/no-submodule-of-submodule ​

Доступ к глубоким подмодулям только владельцу и непосредственным parent/child.

Включено как error в recommended и strict. Autofix отсутствует. Поддерживается ESLint и Oxlint.

Зачем нужно ​

Сохраняет локальность глубокой иерархии: публичный index глубокого подмодуля не делает его доступным из любого места проекта.

Что проверяет ​

Обычные подмодули распознаются по Parent/modules/Child/modules/Leaf. Для цели глубже первого подмодуля (depth > 1) импорт разрешён только её владельцу, непосредственному родителю или непосредственному ребёнку. Сосед, посторонний модуль и предок через несколько уровней не получают доступ.

Примеры ​

  • Parent
    • index.ts
    • modules
      • Child
        • index.ts
        • modules
          • Leaf
            • index.ts
            • view.ts

Leaf находится на глубине 2. Ему не запрещено существовать: правило ограничивает, кто может обращаться к нему напрямую.

Ошибка ​

ts
// src/modules/Other/index.ts
import { leaf } from '../Parent/modules/Child/modules/Leaf'; 

// src/modules/Parent/index.ts
import { leaf } from './modules/Child/modules/Leaf'; // пропущен уровень Child

Корректно ​

ts
// src/modules/Parent/modules/Child/index.ts
import { leaf } from './modules/Leaf'; // непосредственный родитель

// src/modules/Parent/modules/Child/modules/Leaf/view.ts
import { state } from './state'; // собственный владелец

Настройка ​

js
createConfig({ layerDirs: { modules: 'features' } });

Отдельного числового лимита у правила нет. Прямые options принимают группы пути, алиасы, layerDirs: { modules: '…' }. Вложенный разделитель modules остаётся соглашением распознавателя; переименование верхнего слоя не меняет его.

Связанные ограничения ​

Правило входит и в recommended, и в strict. Оно не запрещает создавать глубокие подмодули — ограничивает доступ к ним. Политики parentImports, childImportsParent и visibility задаются в layer-imports. Разрешение непосредственного parent/child здесь не отменяет проверки публичного API там. Если архитектура намеренно открывает глубокие модули наружу, это правило можно отключить отдельно.

Реализация ​

Исходный код · Тесты · Все правила