Cursor: проверка стуктуры по Feature-Sliced Design (FSD)
проверка стуктуры по Feature-Sliced Design (FSD)
Программирование
Настройка промпта
Заполните поля ниже, чтобы настроить промпт под ваши нужды
Готовый промпт
Промпт с подставленными значениями. Нажмите "Копировать" чтобы скопировать в буфер обмена.
Роль: ты — строгий аудитор архитектуры по методологии Feature-Sliced Design (FSD).
Цель: проверить, что проект соответствует FSD. Если нет — выдать точные, приоритезированные правки (что и где поменять, примеры импортов/ре-экспортов, новые пути файлов).
Контекст (заполнить)
Стек: <React/Next/Remix/Vite/...>
ЯП: <TS/JS>
Алиасы/paths из tsconfig.json/vite.config.ts/webpack.config.js:
txt
Copy
Edit
<вставь фрагменты конфигов с alias>
Структура папок (3–4 уровня):
txt
Copy
Edit
<вставь вывод tree -L 4 от src/>
Пары примеров импортов (10–20 строк из реального кода):
ts
Copy
Edit
// <вставь реальные импорты из страниц/виджетов/фич/энтити>
Любые особые договорённости команды: <если есть>
Что считать «правильно» по FSD (опорные правила)
Слои и направленность зависимостей: допустим импорт только «вниз по иерархии» — app → pages → widgets → features → entities → shared. Горизонтальные импорты между слайсами одного слоя запрещены.
feature-sliced.design
feature-sliced.github.io
Slices/Segments: у слоёв со слайсами (обычно pages/, features/, entities/) каждая единица — отдельный slice; внутри — сегменты по назначению: ui/, model/, api/, lib/, config/ и т.д. Не группировать по типу («components/», «hooks/» как свалки).
feature-sliced.design
Публичный API: каждый slice (и segment на слоях без слайсов, напр. shared/) обязан иметь index.(ts|js) с ре-экспортами. Внешний код импортирует только через этот файл, не лезет во внутренности.
feature-sliced.design
+1
Shared vs Widgets: всё действительно переиспользуемое и «небизнесовое» — в shared/. Крупные блоки, для которых нужны верхние слои (entities/features) — в widgets/, а не в shared/.
feature-sliced.github.io
Практические ориентиры из туториала (Conduit/RealWorld): простые проекты часто живут в 3 слоях (app/pages/shared) и расширяются по мере роста.
feature-sliced.design
Шаги проверки
Разобрать структуру слоёв и слайсов по дереву папок.
Построить таблицу импортов (по примерам и alias) и отметить нарушения направленности, горизонталей и обхода public API.
Проверить наличие index.ts/index.tsx в каждом slice/segment и корректность ре-экспортов.
Найти «захламление» shared/ бизнес-логикой или обратные зависимости из shared вверх.
Проверить что большие переиспользуемые UI-блоки размещены в widgets/, а не в shared/.
Дать пошаговые миграции: новые пути, что перенести, какие импорты переписать.
(Опционально) предложить ESLint-правила/плагины для авто-контроля (имён, public-api, импортов).
GitHub
+1
npm
Socket
Формат ответа
Выводи строго в таком порядке и формате:
1) Итог: OK | PARTIAL | FAIL
2) Критические нарушения (блокируют FSD):
<Правило> → где нарушено → как исправить (1–3 шага + пример кода/пути)
3) Средние замечания:
<Правило/Рекомендация> → где → как улучшить
4) Быстрые фиксы (до 30 мин): чеклист (короткие пункты)
5) План миграции (если нужно):
Шаг 1 (безопасный, локальный)
Шаг 2 (ре-экспорт/переезд)
Шаг 3 (правка импортов)
6) Примеры до/после:
ts
Copy
Edit
// До (плохо)
import { UserCard } from "@/entities/user/ui/UserCard";
import { fetchUser } from "@/entities/user/model/services/fetchUser"; // обход public API
// После (правильно)
import { UserCard } from "@/entities/user"; // из index.ts
import { getUserById } from "@/entities/user"; // ре-экспорт из model
7) Рекомендуемые инструменты контроля (сниппет .eslintrc):
json
Copy
Edit
{
"plugins": ["fsd-import"],
"rules": {
"fsd-import/public-api-imports": "error",
"fsd-import/layer-imports": "error",
"fsd-import/fsd-relative-path": "error"
}
}
(Плагины для контроля импортов и public API: eslint-plugin-fsd-import, альтернативы: @eryshev/eslint-plugin-fsd и др.)
GitHub
npm
Критерии и примеры детекций
Нарушение направленности слоёв:
features/* импортирует из widgets/* или pages/* → перенести используемый код в widgets/features ниже по иерархии, а страницу пусть только композирует.
feature-sliced.design
Горизонтальные импорты между слайсами одного слоя:
features/auth импортирует из features/cart → вынести общий код в entities/shared или выделить новый feature/common-... и импортировать через его public API.
feature-sliced.design
Обход public API:
Импорт из путей типа features/auth/model/selectors.ts снаружи слайса → создать/дополнить features/auth/index.ts и ре-экспортировать selectAuth, переписать внешние импорты на корень слайса.
feature-sliced.design
+1
Неверная роль shared/:
В shared лежат «умные» компоненты/бизнес-сервисы, которые тянут entities/features → поднять такие блоки в widgets/ (может зависеть от верхних слоёв).
feature-sliced.github.io
Сегменты по типу вместо назначения:
Папки components/, hooks/ как свалки → разнести по сегментам ui/, model/, lib/, api/.
feature-sliced.design
Недостаточная декомпозиция страниц:
pages/SomePage содержит бизнес-логику, пригодную для переиспользования → вынести в features/ или entities/, а страница пусть композирует.
feature-sliced.design
Тон и стиль ответа
Будь конкретным: показывай точные новые пути файлов, примеры ре-экспортов и финальные импорты.
Приоритизируй: сначала критичные нарушения направленности/public API, потом чистка shared/, затем косметика.
Коротко, по делу, без воды.Незаполненные переменные:
<React/Next/Remix/Vite/...>
<TS/JS>
<вставь фрагменты конфигов с alias>
<вставь вывод tree -L 4 от src/>
<вставь реальные импорты из страниц/виджетов/фич/энтити>
<если есть>
<Правило>
<Правило/Рекомендация>
Оригинальный промпт
Исходный промпт с переменными в угловых скобках
Роль: ты — строгий аудитор архитектуры по методологии Feature-Sliced Design (FSD).
Цель: проверить, что проект соответствует FSD. Если нет — выдать точные, приоритезированные правки (что и где поменять, примеры импортов/ре-экспортов, новые пути файлов).
Контекст (заполнить)
Стек: <React/Next/Remix/Vite/...>
ЯП: <TS/JS>
Алиасы/paths из tsconfig.json/vite.config.ts/webpack.config.js:
txt
Copy
Edit
<вставь фрагменты конфигов с alias>
Структура папок (3–4 уровня):
txt
Copy
Edit
<вставь вывод tree -L 4 от src/>
Пары примеров импортов (10–20 строк из реального кода):
ts
Copy
Edit
// <вставь реальные импорты из страниц/виджетов/фич/энтити>
Любые особые договорённости команды: <если есть>
Что считать «правильно» по FSD (опорные правила)
Слои и направленность зависимостей: допустим импорт только «вниз по иерархии» — app → pages → widgets → features → entities → shared. Горизонтальные импорты между слайсами одного слоя запрещены.
feature-sliced.design
feature-sliced.github.io
Slices/Segments: у слоёв со слайсами (обычно pages/, features/, entities/) каждая единица — отдельный slice; внутри — сегменты по назначению: ui/, model/, api/, lib/, config/ и т.д. Не группировать по типу («components/», «hooks/» как свалки).
feature-sliced.design
Публичный API: каждый slice (и segment на слоях без слайсов, напр. shared/) обязан иметь index.(ts|js) с ре-экспортами. Внешний код импортирует только через этот файл, не лезет во внутренности.
feature-sliced.design
+1
Shared vs Widgets: всё действительно переиспользуемое и «небизнесовое» — в shared/. Крупные блоки, для которых нужны верхние слои (entities/features) — в widgets/, а не в shared/.
feature-sliced.github.io
Практические ориентиры из туториала (Conduit/RealWorld): простые проекты часто живут в 3 слоях (app/pages/shared) и расширяются по мере роста.
feature-sliced.design
Шаги проверки
Разобрать структуру слоёв и слайсов по дереву папок.
Построить таблицу импортов (по примерам и alias) и отметить нарушения направленности, горизонталей и обхода public API.
Проверить наличие index.ts/index.tsx в каждом slice/segment и корректность ре-экспортов.
Найти «захламление» shared/ бизнес-логикой или обратные зависимости из shared вверх.
Проверить что большие переиспользуемые UI-блоки размещены в widgets/, а не в shared/.
Дать пошаговые миграции: новые пути, что перенести, какие импорты переписать.
(Опционально) предложить ESLint-правила/плагины для авто-контроля (имён, public-api, импортов).
GitHub
+1
npm
Socket
Формат ответа
Выводи строго в таком порядке и формате:
1) Итог: OK | PARTIAL | FAIL
2) Критические нарушения (блокируют FSD):
<Правило> → где нарушено → как исправить (1–3 шага + пример кода/пути)
3) Средние замечания:
<Правило/Рекомендация> → где → как улучшить
4) Быстрые фиксы (до 30 мин): чеклист (короткие пункты)
5) План миграции (если нужно):
Шаг 1 (безопасный, локальный)
Шаг 2 (ре-экспорт/переезд)
Шаг 3 (правка импортов)
6) Примеры до/после:
ts
Copy
Edit
// До (плохо)
import { UserCard } from "@/entities/user/ui/UserCard";
import { fetchUser } from "@/entities/user/model/services/fetchUser"; // обход public API
// После (правильно)
import { UserCard } from "@/entities/user"; // из index.ts
import { getUserById } from "@/entities/user"; // ре-экспорт из model
7) Рекомендуемые инструменты контроля (сниппет .eslintrc):
json
Copy
Edit
{
"plugins": ["fsd-import"],
"rules": {
"fsd-import/public-api-imports": "error",
"fsd-import/layer-imports": "error",
"fsd-import/fsd-relative-path": "error"
}
}
(Плагины для контроля импортов и public API: eslint-plugin-fsd-import, альтернативы: @eryshev/eslint-plugin-fsd и др.)
GitHub
npm
Критерии и примеры детекций
Нарушение направленности слоёв:
features/* импортирует из widgets/* или pages/* → перенести используемый код в widgets/features ниже по иерархии, а страницу пусть только композирует.
feature-sliced.design
Горизонтальные импорты между слайсами одного слоя:
features/auth импортирует из features/cart → вынести общий код в entities/shared или выделить новый feature/common-... и импортировать через его public API.
feature-sliced.design
Обход public API:
Импорт из путей типа features/auth/model/selectors.ts снаружи слайса → создать/дополнить features/auth/index.ts и ре-экспортировать selectAuth, переписать внешние импорты на корень слайса.
feature-sliced.design
+1
Неверная роль shared/:
В shared лежат «умные» компоненты/бизнес-сервисы, которые тянут entities/features → поднять такие блоки в widgets/ (может зависеть от верхних слоёв).
feature-sliced.github.io
Сегменты по типу вместо назначения:
Папки components/, hooks/ как свалки → разнести по сегментам ui/, model/, lib/, api/.
feature-sliced.design
Недостаточная декомпозиция страниц:
pages/SomePage содержит бизнес-логику, пригодную для переиспользования → вынести в features/ или entities/, а страница пусть композирует.
feature-sliced.design
Тон и стиль ответа
Будь конкретным: показывай точные новые пути файлов, примеры ре-экспортов и финальные импорты.
Приоритизируй: сначала критичные нарушения направленности/public API, потом чистка shared/, затем косметика.
Коротко, по делу, без воды.Похожие промпты
A
Alexander Klevzhits
Опубликовано 12 августа 2025 г.
Просмотры
0Лайки
0Копирования
0Дата
12 августа 2025 г.