import/no-internal-modules (со слов @Krakazybik) не может отследить место , откуда вызывается импорт
Из-за этого для плагина импорты типа entities/foo/ui/bar - то же, что и ./ui/bar внутри сущности foo
И из-за этого "весь умный линтинг" со стороны DX сводится к "ставь реэкспорты везде где можно, независимо от слоев"
Idea
Разделения на "уровни строгости" вряд ли удастся достичь в рамках конфига. Но хотелось бы тем или иным путем - отключить триггеринг на отсутствие внутренних реэкспортов
(да, это все еще считается плохой практикой, лезть во внутренности внутри внутренностей, но это не так критично, по сравнению с Slices PublicAPI и Segments PublicAPI)
Solution
Как вариант - заиспользовать no-restricted-imports как более общую альтернативу no-internal-modules
При этом попытаться переосмыслить, как можно запретить линтинг внутренностей слайсов, но чтобы это можно было делать внутри самих слайсов 🤔
Example
// describe("Slices PublicAPI")
// 👎 Fail
import { Issues } from "pages/issues/ui";
import { IssueDetails } from "widgets/issue-details/ui/details"
import { AuthForm } from "features/auth-form/ui/form"
import { Button } from "shared/ui/button/button";
import { saveOrder } from "entities/order/model/actions";
import { orderModel } from "entities/order/model";
import { TicketCard } from "@/entities/ticket/ui";
// 👍 Pass
import { Issues } from "pages/issues";
import { IssueDetails } from "widgets/issue-details"
import { AuthForm } from "features/auth-form"
import { Button } from "shared/ui/button";
import { orderModel } from "entities/order";
import { TicketCard } from "@/entities/ticket";
import { AuthForm } from "features/auth/form"
import { Button } from "shared/ui";
// describe("Allow internal deep-imports")
// 👍 Pass (то же, что и Fail у SlicesAPI, но "место использования" тут влияет)
/** @path widgets/issue-details/index.ts */
import { IssueDetails } from "./ui/details"
/** @path features/auth-form/index.ts */
import { AuthForm } from "./ui/form"
/** @path features/auth-form/ui/form/content.tsx */
import * as authModel from "../../model";
/** @path shared/ui */
import { Button } from "./button/button";
/** @path entities/order/index.ts */
import { saveOrder } from "./model/actions";
import { orderModel } from "./model";
import { TicketCard } from "@/entities/ticket/ui";
Problem
import/no-internal-modules
(со слов @Krakazybik) не может отследить место , откуда вызывается импортИз-за этого для плагина импорты типа
entities/foo/ui/bar
- то же, что и./ui/bar
внутри сущностиfoo
И из-за этого "весь умный линтинг" со стороны DX сводится к "ставь реэкспорты везде где можно, независимо от слоев"
Idea
Разделения на "уровни строгости" вряд ли удастся достичь в рамках конфига. Но хотелось бы тем или иным путем - отключить триггеринг на отсутствие внутренних реэкспортов (да, это все еще считается плохой практикой, лезть во внутренности внутри внутренностей, но это не так критично, по сравнению с Slices PublicAPI и Segments PublicAPI)
Solution
no-restricted-imports
как более общую альтернативуno-internal-modules
Example
Reference
https://github.com/feature-sliced/eslint-config/discussions/75#discussioncomment-2036841