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 г.