| name | dev-standards |
| description | Стандарты разработки и имплементации кода. Использовать при написании кода, code review, рефакторинге, TDD разработке на любом языке (TypeScript, Python, C#, и др.). Включает метрики качества, стоп-сигналы сложности, TDD workflow, правила тестирования. |
Стандарт разработки
Базовые принципы (ВЫСШИЙ ПРИОРИТЕТ)
- Писать элегантный код, решающий задачу
- Не добавлять обратную совместимость без явного запроса
- После каждого блока кода: линтинг → компиляция → тесты → запуск
- Предпочитать правку существующего вместо добавления нового
- Качество превыше скорости — лучше потратить время на качественный код
- При неуверенности — спросить с озвучиванием рекомендаций
Метрики качества (ОБЯЗАТЕЛЬНО)
| Метрика | Лимит |
|---|
| Cyclomatic Complexity | < 10 |
| Длина функции | < 30 строк |
| Длина класса | < 200 строк |
| Параметры функции | < 5 (объект для >5) |
| Вложенность | < 4 уровней |
Правило 3-х альтернатив
- Придумать 3 решения
- Выбрать простейшее работающее
- Избегать первого пришедшего в голову
Code Review вопросы (ВСЕГДА задавать себе)
- "Можно ли это сделать проще?"
- "Зачем эта сложность?" (для функций >30 строк)
- "Есть ли стандартное решение?"
- "Понятно ли junior разработчику?"
Стоп-сигналы сложности 🚨
Остановиться и пересмотреть решение при:
- "Это очень умное решение" 🚩
- "Только я понимаю как это работает" 🚩
- "Потом разберёмся" 🚩
- "Тут нужно быть осторожным" 🚩
- Требуется объяснение одного и того же 2+ раза 🚩
Анти-паттерны (ИЗБЕГАТЬ)
- Преждевременная абстракция — абстрагировать только при реальном дублировании
- Generic hell — избегать
T<K<V<U>>>
- God-функции — функция делает >3 разных вещей
- Callback ад — >3 уровней вложенности callbacks
- Магические значения — числа/строки без объяснения
Триггеры рефакторинга
| Ситуация | Действие |
|---|
| Дебаг >30 мин | Упростить код |
| Тест сложнее кода | Упростить код |
| Страшно менять | Упростить архитектуру |
| Повторяешь объяснение | Добавить комментарий или упростить |
Процесс работы с пользователем
- Обсуждение → исследовать варианты → уточняющие вопросы
- ТЗ → сформулировать → разбить на задачи → получить подтверждение
- Реализация → спросить "Приступаем к реализации?" → дождаться подтверждения
TDD (КРИТИЧНО)
Главное правило: Код подстраивается под тест. НИКОГДА не менять тест для исправления ошибок компиляции.
❌ ЗАПРЕЩЕНО: Изменить expect() чтобы тест прошёл
✅ ПРАВИЛЬНО: Изменить имплементацию чтобы соответствовать expect()
Цикл (обязателен для каждой фичи):
- RED — написать тест ПЕРВЫМ → он должен упасть
- GREEN — минимальный код → тест проходит
- REFACTOR — улучшить → тесты остаются зелёными
→ Детали и примеры: references/tdd-workflow.md
Тестирование
Покрытие:
- 100% — критическая логика (платежи, безопасность, заказы)
- 80% — основная бизнес-логика
- 60% — вспомогательный код
Именование тестов:
✅ "should return user when found"
✅ "should throw ValidationError for invalid email"
❌ "test getUser"
❌ "works correctly"
→ Паттерны тестирования: references/testing-patterns.md
Верификация перед завершением
lint
typecheck
test
coverage
Задача НЕ завершена если:
- ❌ Тесты не проходят
- ❌ Есть ошибки линтера/компиляции
- ❌ Покрытие ниже требуемого
- ❌ TDD цикл не соблюдён