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.
This commit is contained in:
@@ -7,7 +7,7 @@ description: Используй при написании, ревью и про
|
|||||||
|
|
||||||
Наш основной стек — **Go**. Скилл описывает, как писать, проверять и оформлять код.
|
Наш основной стек — **Go**. Скилл описывает, как писать, проверять и оформлять код.
|
||||||
Реалистичные общепринятые дефолты приведены ниже; то, что специфично для компании,
|
Реалистичные общепринятые дефолты приведены ниже; то, что специфично для компании,
|
||||||
помечено `TODO` — уточняй, не выдумывай.
|
заполнено дефолтами индустрии — тюним под M.Video позже.
|
||||||
|
|
||||||
## Структура сервиса
|
## Структура сервиса
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ pkg/ # переиспользуемый публичный
|
|||||||
api/ # спецификации API (proto/openapi)
|
api/ # спецификации API (proto/openapi)
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: заполнить реальной эталонной структурой сервиса компании -->
|
> Ориентир по индустрии: `cmd/` + `internal/` + `pkg/`. Эталон под M.Video уточним позже.
|
||||||
|
|
||||||
## Линтеры
|
## Линтеры
|
||||||
|
|
||||||
@@ -29,13 +29,15 @@ api/ # спецификации API (proto/openapi)
|
|||||||
- Статический анализ: `go vet ./...`.
|
- Статический анализ: `go vet ./...`.
|
||||||
- Основной линтер: **golangci-lint** — `golangci-lint run ./...`.
|
- Основной линтер: **golangci-lint** — `golangci-lint run ./...`.
|
||||||
Набор линтеров задаётся в `.golangci.yml` в корне репозитория.
|
Набор линтеров задаётся в `.golangci.yml` в корне репозитория.
|
||||||
<!-- TODO: указать корпоративный .golangci.yml / общий пресет, если он есть -->
|
Базовый набор: `govet`, `staticcheck`, `errcheck`, `ineffassign`, `gosimple`, `unused`.
|
||||||
|
Корпоративный `.golangci.yml` добавим позже.
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|
||||||
- Прогон всех тестов: `go test ./...`.
|
- Прогон всех тестов: `go test ./...`.
|
||||||
- С гонками и покрытием: `go test -race -cover ./...`.
|
- С гонками и покрытием: `go test -race -cover ./...`.
|
||||||
- Требования к покрытию и обязательные виды тестов: `<!-- TODO: пороги покрытия, интеграционные тесты -->`.
|
- Покрытие: мягкий ориентир ~70%+ для бизнес-логики, критичные пути — обязательно;
|
||||||
|
интеграционные тесты для внешних зависимостей. (пороги уточним)
|
||||||
- Именование: `TestXxx`, табличные тесты приветствуются.
|
- Именование: `TestXxx`, табличные тесты приветствуются.
|
||||||
|
|
||||||
## Коммиты и MR
|
## Коммиты и MR
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
|
|||||||
# Стандарты Kotlin
|
# Стандарты Kotlin
|
||||||
|
|
||||||
Один из наших языков — **Kotlin** (в первую очередь Android). Ниже — общепринятые дефолты
|
Один из наших языков — **Kotlin** (в первую очередь Android). Ниже — общепринятые дефолты
|
||||||
экосистемы; специфичное для компании помечено `TODO` — уточняй, не выдумывай.
|
экосистемы; специфичное для компании заполнено дефолтами индустрии — тюним под M.Video позже.
|
||||||
|
|
||||||
## Структура
|
## Структура
|
||||||
|
|
||||||
@@ -22,20 +22,20 @@ app/ # Android-модуль приложения
|
|||||||
<feature-module>/ # модульная структура
|
<feature-module>/ # модульная структура
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: заполнить реальной эталонной структурой проекта/модулей и версией AGP/Gradle -->
|
> Ориентир: модульный Android-проект на Gradle (Kotlin DSL), актуальные AGP/Gradle. Эталон уточним.
|
||||||
|
|
||||||
## Линтеры и форматирование
|
## Линтеры и форматирование
|
||||||
|
|
||||||
- Стиль/формат: **ktlint** — `./gradlew ktlintCheck` (автоформат `./gradlew ktlintFormat`).
|
- Стиль/формат: **ktlint** — `./gradlew ktlintCheck` (автоформат `./gradlew ktlintFormat`).
|
||||||
- Статический анализ: **detekt** — `./gradlew detekt` (конфиг `detekt.yml`).
|
- Статический анализ: **detekt** — `./gradlew detekt` (конфиг `detekt.yml`).
|
||||||
- Android Lint: `./gradlew lint`.
|
- Android Lint: `./gradlew lint`.
|
||||||
<!-- TODO: корпоративные конфиги ktlint/detekt (общий пресет), если есть -->
|
Дефолт: ktlint (official code style) + стартовый `detekt.yml`. Корпоративный пресет добавим позже.
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|
||||||
- Unit: `./gradlew test`.
|
- Unit: `./gradlew test`.
|
||||||
- Инструментальные (Android): `./gradlew connectedAndroidTest` (нужен эмулятор/устройство).
|
- Инструментальные (Android): `./gradlew connectedAndroidTest` (нужен эмулятор/устройство).
|
||||||
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
|
- Покрытие: замер через JaCoCo, мягкий ориентир; критичную логику — обязательно. (пороги уточним)
|
||||||
|
|
||||||
## Сборка и зависимости
|
## Сборка и зависимости
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
|
|||||||
# Стандарты Python
|
# Стандарты Python
|
||||||
|
|
||||||
Один из наших языков — **Python**. Ниже — общепринятые дефолты экосистемы; специфичное для
|
Один из наших языков — **Python**. Ниже — общепринятые дефолты экосистемы; специфичное для
|
||||||
компании помечено `TODO` — уточняй, не выдумывай.
|
компании заполнено дефолтами индустрии — тюним под M.Video позже.
|
||||||
|
|
||||||
## Структура
|
## Структура
|
||||||
|
|
||||||
@@ -19,19 +19,19 @@ src/<package>/ # src-layout
|
|||||||
tests/
|
tests/
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: заполнить реальной эталонной структурой / шаблоном (менеджер зависимостей — uv) -->
|
> Ориентир: src-layout, `pyproject.toml`, окружение через uv. Эталон уточним.
|
||||||
|
|
||||||
## Линтеры и форматирование
|
## Линтеры и форматирование
|
||||||
|
|
||||||
- Линтер + форматтер: **ruff** — `ruff check .` и `ruff format --check .`
|
- Линтер + форматтер: **ruff** — `ruff check .` и `ruff format --check .`
|
||||||
(локально `ruff format .`). Конфиг — в `pyproject.toml` (`[tool.ruff]`).
|
(локально `ruff format .`). Конфиг — в `pyproject.toml` (`[tool.ruff]`).
|
||||||
- Типы: **mypy** — `mypy .` (конфиг `[tool.mypy]`).
|
- Типы: **mypy** — `mypy .` (конфиг `[tool.mypy]`).
|
||||||
<!-- TODO: корпоративный набор правил ruff/mypy (строгость), если есть -->
|
Дефолт: ruff (правила `E`,`F`,`I`,`UP`,`B`) + mypy строгий для нового кода. Корпоративный пресет уточним.
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|
||||||
- Прогон: **pytest** — `pytest` (с покрытием — `pytest --cov`).
|
- Прогон: **pytest** — `pytest` (с покрытием — `pytest --cov`).
|
||||||
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
|
- Покрытие: `uv run pytest --cov`, мягкий ориентир ~80% для бизнес-логики. (пороги уточним)
|
||||||
|
|
||||||
## Окружение и зависимости
|
## Окружение и зависимости
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
|
|||||||
# Стандарты Rust
|
# Стандарты Rust
|
||||||
|
|
||||||
Один из наших языков — **Rust**. Ниже — общепринятые дефолты экосистемы; специфичное для
|
Один из наших языков — **Rust**. Ниже — общепринятые дефолты экосистемы; специфичное для
|
||||||
компании помечено `TODO` — уточняй, не выдумывай.
|
компании заполнено дефолтами индустрии — тюним под M.Video позже.
|
||||||
|
|
||||||
## Структура
|
## Структура
|
||||||
|
|
||||||
@@ -21,20 +21,20 @@ tests/ # интеграционные тесты
|
|||||||
benches/ # бенчмарки (если есть)
|
benches/ # бенчмарки (если есть)
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: заполнить реальной эталонной структурой crate/workspace компании -->
|
> Ориентир: стандартный cargo-лейаут (`src/`, `tests/`), workspace при нескольких crate. Эталон уточним.
|
||||||
|
|
||||||
## Линтеры и форматирование
|
## Линтеры и форматирование
|
||||||
|
|
||||||
- Форматирование: `cargo fmt --all` (проверка в CI — `cargo fmt --all -- --check`).
|
- Форматирование: `cargo fmt --all` (проверка в CI — `cargo fmt --all -- --check`).
|
||||||
- Линтер: **clippy** — `cargo clippy --all-targets --all-features -- -D warnings`.
|
- Линтер: **clippy** — `cargo clippy --all-targets --all-features -- -D warnings`.
|
||||||
Настройки — в `clippy.toml` / атрибутах crate.
|
Настройки — в `clippy.toml` / атрибутах crate.
|
||||||
<!-- TODO: корпоративный набор clippy-lints, если есть -->
|
Дефолт: clippy с `-D warnings`; точечные `allow` — только с комментарием. Корпоративный набор уточним.
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|
||||||
- Прогон: `cargo test --all-features`.
|
- Прогон: `cargo test --all-features`.
|
||||||
- Для workspace: `cargo test --workspace`.
|
- Для workspace: `cargo test --workspace`.
|
||||||
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
|
- Покрытие: `cargo-llvm-cov` (или tarpaulin), мягкий ориентир ~70%+. (пороги уточним)
|
||||||
|
|
||||||
## Сборка и зависимости
|
## Сборка и зависимости
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
|
|||||||
# Стандарты Swift
|
# Стандарты Swift
|
||||||
|
|
||||||
Один из наших языков — **Swift** (iOS/macOS). Ниже — общепринятые дефолты экосистемы;
|
Один из наших языков — **Swift** (iOS/macOS). Ниже — общепринятые дефолты экосистемы;
|
||||||
специфичное для компании помечено `TODO` — уточняй, не выдумывай.
|
значения под M.Video заполнены дефолтами индустрии — тюним позже.
|
||||||
|
|
||||||
## Структура
|
## Структура
|
||||||
|
|
||||||
@@ -18,24 +18,24 @@ Sources/<Target>/...
|
|||||||
Tests/<Target>Tests/...
|
Tests/<Target>Tests/...
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: заполнить реальной эталонной структурой (SwiftPM vs Xcodeproj, менеджер зависимостей: SPM/CocoaPods) -->
|
> Ориентир: SwiftPM-пакет (`Package.swift`), `Sources/` + `Tests/`. Эталон уточним.
|
||||||
|
|
||||||
## Линтеры и форматирование
|
## Линтеры и форматирование
|
||||||
|
|
||||||
- Форматирование: **swiftformat** — `swiftformat --lint .` (автоформат `swiftformat .`).
|
- Форматирование: **swiftformat** — `swiftformat --lint .` (автоформат `swiftformat .`).
|
||||||
- Линтер: **swiftlint** — `swiftlint` (конфиг `.swiftlint.yml`), в CI `swiftlint --strict`.
|
- Линтер: **swiftlint** — `swiftlint` (конфиг `.swiftlint.yml`), в CI `swiftlint --strict`.
|
||||||
<!-- TODO: корпоративные конфиги swiftformat/swiftlint (общий пресет), если есть -->
|
Дефолт: SwiftLint + SwiftFormat (дефолтные конфиги). Корпоративный пресет уточним.
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|
||||||
- SwiftPM: `swift test`.
|
- SwiftPM: `swift test`.
|
||||||
- Xcode-проект: `xcodebuild test -scheme <Scheme> -destination 'platform=iOS Simulator,name=iPhone 15'`.
|
- Xcode-проект: `xcodebuild test -scheme <Scheme> -destination 'platform=iOS Simulator,name=iPhone 15'`.
|
||||||
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
|
- Покрытие: `swift test --enable-code-coverage`, мягкий ориентир. (пороги уточним)
|
||||||
|
|
||||||
## Сборка и зависимости
|
## Сборка и зависимости
|
||||||
|
|
||||||
- Сборка: `swift build` (или `xcodebuild build -scheme <Scheme>`).
|
- Сборка: `swift build` (или `xcodebuild build -scheme <Scheme>`).
|
||||||
- Зависимости: `<!-- TODO: SwiftPM / CocoaPods -->` — lock (`Package.resolved`/`Podfile.lock`) коммитим.
|
- Зависимости: **SwiftPM** (`Package.resolved` коммитим); CocoaPods — только для легаси.
|
||||||
|
|
||||||
## Коммиты и MR
|
## Коммиты и MR
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
|
|||||||
# Стандарты TypeScript
|
# Стандарты TypeScript
|
||||||
|
|
||||||
Один из наших языков — **TypeScript** (фронтенд и Node-сервисы). Ниже — общепринятые дефолты
|
Один из наших языков — **TypeScript** (фронтенд и Node-сервисы). Ниже — общепринятые дефолты
|
||||||
экосистемы; специфичное для компании помечено `TODO` — уточняй, не выдумывай.
|
экосистемы; значения под M.Video заполнены дефолтами индустрии — тюним позже.
|
||||||
|
|
||||||
## Структура
|
## Структура
|
||||||
|
|
||||||
@@ -21,19 +21,19 @@ src/
|
|||||||
test/ | *.test.ts # рядом с кодом или в test/
|
test/ | *.test.ts # рядом с кодом или в test/
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: заполнить реальной эталонной структурой / шаблоном проекта (менеджер пакетов — pnpm) -->
|
> Ориентир: TS-проект/монорепо на pnpm workspaces, strict `tsconfig`. Эталон уточним.
|
||||||
|
|
||||||
## Линтеры и форматирование
|
## Линтеры и форматирование
|
||||||
|
|
||||||
- Типы: `tsc --noEmit` — без ошибок типов.
|
- Типы: `tsc --noEmit` — без ошибок типов.
|
||||||
- Линтер: **ESLint** — `eslint .` (конфиг `.eslintrc*` / `eslint.config.*`).
|
- Линтер: **ESLint** — `eslint .` (конфиг `.eslintrc*` / `eslint.config.*`).
|
||||||
- Форматирование: **Prettier** — `prettier --check .` (в CI), `prettier --write .` локально.
|
- Форматирование: **Prettier** — `prettier --check .` (в CI), `prettier --write .` локально.
|
||||||
<!-- TODO: корпоративный конфиг eslint/prettier (общий пресет?), если есть -->
|
Дефолт: typescript-eslint (recommended) + Prettier (дефолтный конфиг). Корпоративный пресет уточним.
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|
||||||
- Прогон: `<!-- TODO: vitest / jest / node --test -->` — напр. `pnpm test`.
|
- Прогон: **vitest** — `pnpm test` (покрытие `pnpm test --coverage`).
|
||||||
- Требования к покрытию: `<!-- TODO -->`.
|
- Покрытие: мягкий ориентир ~80% для бизнес-логики. (пороги уточним)
|
||||||
|
|
||||||
## Сборка и зависимости
|
## Сборка и зависимости
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user