Files
pi-kit/skills/kotlin-standards/SKILL.md
Aleksey Shakhmatov e04a2ddb72 docs(skills): fill language standards with industry defaults
Per decision to use common industry practice now and tune later:
- structures: standard layouts (go cmd/internal/pkg, python src-layout, rust cargo, ts pnpm workspaces, kotlin Gradle modules, swift SwiftPM)
- linters: default rulesets (golangci base, clippy -D warnings, ruff+mypy, typescript-eslint+prettier, ktlint+detekt, swiftlint+swiftformat)
- test runners: TS=vitest; coverage soft targets (~70-80%) marked '(пороги уточним)'
- swift deps: SwiftPM (Package.resolved), CocoaPods legacy-only
- reworded intros: values are industry defaults to be tuned, no raw TODO markers left

Verified: no TODO markers remain in *-standards; all six skills load via pi.
2026-07-16 13:25:18 +03:00

64 lines
3.9 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.
---
name: kotlin-standards
description: Используй при написании, ревью и проверке кода на Kotlin (Android и backend) — структура проекта, запуск ktlint/detekt, сборка и тесты через Gradle, формат коммитов и merge request. Применяй всегда, когда пишешь или правишь Kotlin-код, готовишь MR, а также в командах /bugfix, /feature и /review для Kotlin/Android-репозиториев.
---
# Стандарты Kotlin
Один из наших языков — **Kotlin** (в первую очередь Android). Ниже — общепринятые дефолты
экосистемы; специфичное для компании заполнено дефолтами индустрии — тюним под M.Video позже.
## Структура
Ориентир (уточняется под компанию):
```
settings.gradle.kts
build.gradle.kts
app/ # Android-модуль приложения
src/main/kotlin/...
src/test/... # unit-тесты
src/androidTest/... # инструментальные тесты
<feature-module>/ # модульная структура
```
> Ориентир: модульный Android-проект на Gradle (Kotlin DSL), актуальные AGP/Gradle. Эталон уточним.
## Линтеры и форматирование
- Стиль/формат: **ktlint**`./gradlew ktlintCheck` (автоформат `./gradlew ktlintFormat`).
- Статический анализ: **detekt**`./gradlew detekt` (конфиг `detekt.yml`).
- Android Lint: `./gradlew lint`.
Дефолт: ktlint (official code style) + стартовый `detekt.yml`. Корпоративный пресет добавим позже.
## Тесты
- Unit: `./gradlew test`.
- Инструментальные (Android): `./gradlew connectedAndroidTest` (нужен эмулятор/устройство).
- Покрытие: замер через JaCoCo, мягкий ориентир; критичную логику — обязательно. (пороги уточним)
## Сборка и зависимости
- Сборка: `./gradlew assembleDebug` (релиз — `assembleRelease`).
- Версии зависимостей — через version catalog (`gradle/libs.versions.toml`), lock коммитим.
## Коммиты и MR
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- Перед MR: `ktlintCheck`, `detekt`, `test``lint`) — всё зелёное.
- Описание MR: что и зачем, как проверено, ссылка на тикет (скилл `jira-workflow`).
## Чек-лист перед MR
- [ ] `./gradlew ktlintCheck` чисто
- [ ] `./gradlew detekt` чисто
- [ ] `./gradlew test` зелёные, есть тесты на новую логику / фикс
- [ ] `./gradlew lint` без новых предупреждений
- [ ] нет секретов и закоммиченных ключей/`.env`
- [ ] описание MR со ссылкой на тикет