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.
64 lines
3.9 KiB
Markdown
64 lines
3.9 KiB
Markdown
---
|
||
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 со ссылкой на тикет
|