coding style conventions
3
总安装量
0
周安装量
#62149
全站排名
安装命令
npx skills add https://github.com/fwrite0920/android-skills --skill 'Coding Style Conventions'
Skill 文档
Coding Style Conventions (代ç è§è)
Instructions
- ç¡®è®¤éæ±å±äºæ¬æè½èå´ï¼å½åãæ ¼å¼ãæ£æ ¸ï¼
- ä¾ç §ä¸æ¹ç« è顺åºå¥ç¨
- 䏿¬¡åªè°æ´ä¸ç±»è§èï¼é¿å æ··æåæ´
- 宿åå¯¹ç § Quick Checklist
When to Use
- Scenario Aï¼æ°é¡¹ç®å建è§è
- Scenario Cï¼æ§é¡¹ç®ç°ä»£ååºå
Example Prompts
- “请åèæ¬æè½ç Naming Conventionsï¼æ£æ¥è¿æ®µ Kotlin 代ç å½åæ¯å¦ä¸è´”
- “ä¾ç § Detekt ä¸ Ktlint é ç½®ç« èï¼å¸®æå建项ç®è§è”
- “è¯·ç¨ Code Review Checklist 审è§è¿ä¸ª PR ç飿 ¼é®é¢”
Workflow
- å å¯¹ç § Naming Conventions 设置å½åè§å
- åä¾ Detekt / Ktlint é ç½®è½å®å°é¡¹ç®
- æåç¨ Code Review Checklist éªæ¶
Practical Notes (2026)
- CI Gate ä» é坹忴æä»¶è¿è¡ Lint/Detekt/Ktlint
- è§èè°æ´ä¸åè½åæ´åå¼æäº¤ï¼æ¹ä¾¿å溯
- Code Review 以 Checklist ä½ä¸ºç¡¬æ§éªæ¶
Minimal Template
ç®æ :
éç¨èå´:
è§èéç¹:
æ£æ ¸æ¹å¼:
éªæ¶: Quick Checklist
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 "1.23.4"
}
// 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 "12.0.3"
}
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>
Code Review Checklist
Naming & Style
- å½åæ¯å¦éµå¾ªä¸è¿°è§åï¼
- Compose 彿°æ¯å¦ç¨ PascalCaseï¼
- æ¯å¦æ Magic Numberï¼
Structure
- 彿°æ¯å¦è¿é¿ (> 30 è¡)ï¼
- åæ°æ¯å¦è¿å¤ (> 6 个)ï¼
- æ¯å¦æ God Class å¾åï¼
Safety
- Nullable å¤çæ¯å¦å®å ¨ï¼
- æ¯å¦ææ½å¨ç NPEï¼
- å¼å¸¸å¤çæ¯å¦å®åï¼
Compose Specific
- Modifier æ¯å¦ä¸ºç¬¬ä¸ä¸ªå¯éåæ°ï¼
- State æ¯å¦æ£ç¡® hoistï¼
- æ¯å¦æ unstable ç忰坼è´ä¸å¿ è¦éç»ï¼