Files
nextjs-style-guide/CONTRIBUTING.md

156 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Правила написания документации
Как писать и редактировать разделы стайлгайда.
## Типы разделов
### Базовые правила (`basics/`)
**Отвечает на вопрос:** «Каким должен быть любой код?»
Универсальные стандарты, не привязанные к конкретной области.
Правило базовое, если оно применимо ко всему коду одинаково.
**Граница:** если правило касается только одной области — оно прикладное.
### Прикладные разделы (`applied/`)
**Отвечает на вопрос:** «Как работать с X?»
Полное описание конкретной области: структура файлов, правила, именование, типизация, примеры.
**Граница:** не дублирует базовые правила. Если правило уже описано в базовых — ссылается, но не повторяет.
### Триггеры (`triggers/`)
**Отвечает на вопрос:** «Как выполнить задачу X?»
Конкретная инструкция: какие разделы прочитать, какие шаги выполнить. Триггер ссылается на basics/ и applied/, но не дублирует их. Группируются по роли: `triggers/develop/`, `triggers/review/`, `triggers/architect/`.
Структура триггера:
- **Заголовок** — глагол + объект ("Создать компонент", "Добавить иконку")
- **Описание** — одно предложение: что делает триггер
- **Прочитай перед началом** — ссылки на basics/ и applied/
- **Шаги** — нумерованный список действий со ссылками
- **Смежные триггеры** — ссылки на связанные задачи
- **Проверь себя** — чеклист из 2-5 пунктов для самопроверки
### Фреймворк-специфичные (`{framework}/`)
Разделы и триггеры, которые применимы только к конкретному фреймворку. Те же категории — `applied/` и `triggers/`.
**Граница:** если правило одинаково для всех фреймворков — оно в `base/`.
## Frontmatter
Каждый `.md`-файл начинается с YAML frontmatter:
```yaml
---
title: Название раздела
scope: basics | applied | triggers
keywords: [ключевое слово 1, ключевое слово 2]
when: "Когда агенту читать этот раздел"
---
```
| Поле | Описание |
|------|----------|
| `title` | Название раздела. Совпадает с `h1` в файле |
| `scope` | Тип: `basics`, `applied` или `triggers` |
| `keywords` | Ключевые слова для поиска агентом |
| `when` | Описание ситуации, когда раздел релевантен |
## Структура прикладного раздела
Раздел включает только релевантные секции — пустые не создаются.
```markdown
# {Название}
Краткое описание: о чём раздел.
## Что нужно знать
Неочевидная вводная информация (если есть).
## Структура
Файловая организация. Обязательно — дерево файлов.
## Правила
### Реализация
Как писать код: синтаксис, паттерны, API.
### Организация
Где что лежит: файловые границы, зоны ответственности, экспорт.
## Именование
Специфичные для области соглашения (не покрытые в basics/naming).
## Типизация
Специфичные для области правила (не покрытые в basics/typing).
## Документирование
Специфичные для области правила (не покрытые в basics/documentation).
## Примеры
Полноценные примеры кода с путями к файлам.
```
Порядок фиксированный: контекст -> структура -> правила -> специализации базовых -> примеры.
## Конвенции оформления
### Заголовки
- Один `h1` на файл — совпадает с `title` из frontmatter.
- Сразу после `h1` — вводный абзац.
- Основные секции — `h2`. Подсекции — `h3`. `h4` не используется.
### Примеры кода
- Блоки кода с указанием языка: ` ```tsx `, ` ```css `, ` ```bash `, ` ```text `.
- Путь к файлу — перед блоком кода или комментарием внутри.
- Дерево файлов — ` ```text ` с символами `├──`, `└──`, `│`.
### Блоки «Хорошо / Плохо»
```markdown
**Хорошо:**
\`\`\`tsx
// правильный код
\`\`\`
**Плохо:**
\`\`\`tsx
// неправильный код
\`\`\`
```
### Таблицы
Формат — стандартный Markdown: `| Ключ | Описание |`.
### Ссылки между разделами
Ссылаться можно, дублировать содержимое — нет.
## Принципы
1. **Не дублировать.** Одна мысль — одно место. Остальные ссылаются.
2. **Базовое vs прикладное.** Применимо ко всему коду — базовое. К одной области — прикладное.
3. **Общее vs специфичное.** Одинаково для всех фреймворков — в `base/`. Для одного — в `{framework}/`.
4. **Пустые секции не создавать.**
5. **Примеры обязательны.** Прикладной раздел без примеров — незавершён.