coding style conventions

Coding Style Conventions (代码规范)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "coding style conventions" with this command: npx skills add fwrite0920/android-skills/fwrite0920-android-skills-coding-style-conventions

Coding Style Conventions (代码规范)

Instructions

  • 确认需求属于本技能范围(命名、格式、检核)

  • 先填写 Required Inputs(规则范围、模块、门槛)并冻结

  • 依照下方章节顺序套用

  • 一次只调整一类规范,避免混杂变更

  • 完成后对照 Quick Checklist

When to Use

  • Scenario A:新项目创建规范

  • Scenario C:旧项目现代化基准

Example Prompts

  • "请参考本技能的 Naming Conventions,检查这段 Kotlin 代码命名是否一致"

  • "依照 Detekt 与 Ktlint 配置章节,帮我创建项目规范"

  • "请用 Quick Checklist 审视这个 PR 的风格问题"

Workflow

  • 先确认 Required Inputs(适用模块、规则级别、阻挡条件)

  • 对照 Naming Conventions 设置命名规则

  • 依 Detekt / Ktlint 配置落实到项目

  • 执行 Style Gate,再用 Quick Checklist 验收

Practical Notes (2026)

  • CI Gate 仅针对变更文件运行 Lint/Detekt/Ktlint

  • 规范调整与功能变更分开提交,方便回溯

  • Code Review 以 Checklist 作为硬性验收

  • 禁止在功能 PR 临时放宽规则,规则变更需独立 PR

  • Baseline 只减不增,新增违规必须当次修复

Minimal Template

目标: 适用范围: 阻挡门槛: Baseline 策略: 规范重点: 检核方式: 验收: Quick Checklist

Required Inputs (执行前输入)

  • 适用范围 (全仓 / 模块 / feature)

  • 规则门槛 (warning / error / 阻挡合并)

  • Baseline 策略 (是否允许、收敛节奏)

  • CI 执行范围 (全量或仅变更文件)

  • 代码审查口径 (review 必查项)

Deliverables (完成后交付物)

  • .editorconfig 与命名规范文档

  • detekt.yml / ktlint 配置与 baseline

  • CI style gate (lint/detekt/ktlint)

  • PR 模板 (包含风格验收条目)

  • 规则变更记录 (说明原因与影响)

Style Gate (验收门槛)

./gradlew lint ./gradlew detekt ./gradlew ktlintCheck

旧项目使用 baseline 时,必须在 PR 说明中写明本次减少了哪些 baseline 项目。

Naming Conventions (命名规则)

类型 规则 范例

Class / Interface PascalCase

UserRepository , Drawable

Function / Method camelCase

getUserById() , onClick()

Variable / Property camelCase

userName , isLoading

Constant (top-level/object) SCREAMING_SNAKE_CASE

MAX_RETRY_COUNT

Package lowercase (no underscores) com.example.feature.auth

@Composable Function PascalCase

LoginScreen() , UserCard()

Backing Property _camelCase

private val _uiState

Compose Specific

// ✅ Composable 函数用 PascalCase (像 Class) @Composable fun UserProfileCard(user: User, modifier: Modifier = Modifier) { }

// ✅ State holder 用 remember + camelCase val scrollState = rememberScrollState()

// ✅ Event callback 用 on 前缀 onUserClick: (User) -> Unit

Detekt Configuration

安装与设置

// build.gradle.kts (project-level) plugins { id("io.gitlab.arturbosch.detekt") version "<project-verified-version>" }

// build.gradle.kts (app-level) detekt { buildUponDefaultConfig = true config.setFrom("$rootDir/config/detekt/detekt.yml") baseline = file("$rootDir/config/detekt/baseline.xml") }

建议规则集 (detekt.yml)

complexity: LongMethod: threshold: 30 LongParameterList: functionThreshold: 6 constructorThreshold: 8

naming: FunctionNaming: excludes: ['/composables/'] # Compose 用 PascalCase

style: MaxLineLength: maxLineLength: 120 WildcardImport: active: true MagicNumber: ignorePropertyDeclaration: true ignoreCompanionObjectPropertyDeclaration: true

Baseline 机制 (旧项目适用)

生成 baseline,忽略现有问题

./gradlew detektBaseline

之后只检查新代码的违规

./gradlew detekt

Ktlint Configuration

安装

// build.gradle.kts plugins { id("org.jlleitschuh.gradle.ktlint") version "<project-verified-version>" }

ktlint { android.set(true) outputColorName.set("RED") }

.editorconfig (与 IDE 同步)

[*.{kt,kts}] max_line_length = 120 indent_size = 4 insert_final_newline = true

Ktlint specific

ktlint_standard_no-wildcard-imports = enabled ktlint_standard_trailing-comma-on-call-site = enabled ktlint_standard_trailing-comma-on-declaration-site = enabled

Documentation Standards (KDoc)

何时该写

  • ✅ Public API (SDK, Library)

  • ✅ 复杂的业务逻辑

  • ✅ 非直观的参数或回传值

  • ✅ 重要的设计决策

何时不该写

  • ❌ 自解释的代码 (e.g., fun getUserName(): String )

  • ❌ 覆写的方法 (继承父类文档)

  • ❌ 简单的 CRUD 操作

范例

/**

  • 根据优先级排序并过滤过期的任务。
  • @param tasks 待处理的任务列表
  • @param now 用于判断过期的时间点,默认为当前时间
  • @return 依优先级排序的有效任务,过期任务会被过滤
  • @throws IllegalArgumentException 如果 tasks 包含 null 元素 */ fun filterAndSort(tasks: List<Task>, now: Instant = Instant.now()): List<Task>

Quick Checklist

  • Required Inputs 已填写并冻结(范围/门槛/baseline)

Naming & Style

  • 命名是否遵循上述规则?

  • Compose 函数是否用 PascalCase?

  • 是否有 Magic Number?

Structure

  • 函数是否过长 (> 30 行)?

  • 参数是否过多 (> 6 个)?

  • 是否有 God Class 倾向?

Safety

  • Nullable 处理是否安全?

  • 是否有潜在的 NPE?

  • 异常处理是否完善?

Compose Specific

  • Modifier 是否为第一个可选参数?

  • State 是否正确 hoist?

  • 是否有 unstable 的参数导致不必要重组?

  • Style Gate(lint/detekt/ktlintCheck)已执行并通过

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

crash monitoring

No summary provided by upstream source.

Repository SourceNeeds Review
General

navigation patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

android skill index

No summary provided by upstream source.

Repository SourceNeeds Review