AgentSkillsCN

clean-code

秉持务实的编码标准——简洁明了、直击要害、杜绝过度设计、避免冗余注释。

SKILL.md
--- frontmatter
name: clean-code
description: Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments
version: 1.0

Clean Code Skill

When to use

  • Applying clean code principles to any codebase (Go, TypeScript, etc.)
  • Refactoring code to improve readability and maintainability
  • Reviewing code for clarity, simplicity, and adherence to standards
  • Ensuring consistent naming, structure, and organization
  • Removing unnecessary complexity, comments, or abstractions

Core Principles

PrincipleRule
SRPSingle Responsibility - each function/class does ONE thing
DRYDon't Repeat Yourself - extract duplicates, reuse
KISSKeep It Simple - simplest solution that works
YAGNIYou Aren't Gonna Need It - don't build unused features
Boy ScoutLeave code cleaner than you found it

Naming Rules

ElementConvention
VariablesReveal intent: userCount not n
FunctionsVerb + noun: getUserById() not user()
BooleansQuestion form: isActive, hasPermission, canEdit
ConstantsSCREAMING_SNAKE: MAX_RETRY_COUNT

Rule: If you need a comment to explain a name, rename it.


Function Rules

RuleDescription
SmallMax 20 lines, ideally 5-10
One ThingDoes one thing, does it well
One LevelOne level of abstraction per function
Few ArgsMax 3 arguments, prefer 0-2
No Side EffectsDon't mutate inputs unexpectedly

Code Structure

PatternApply
Guard ClausesEarly returns for edge cases
Flat > NestedAvoid deep nesting (max 2 levels)
CompositionSmall functions composed together
ColocationKeep related code close

AI Coding Style

SituationAction
User asks for featureWrite it directly
User reports bugFix it, don't explain
No clear requirementAsk, don't assume

Anti-Patterns (DON'T)

❌ Pattern✅ Fix
Comment every lineDelete obvious comments
Helper for one-linerInline the code
Factory for 2 objectsDirect instantiation
utils.ts with 1 functionPut code where used
"First we import..."Just write code
Deep nestingGuard clauses
Magic numbersNamed constants
God functionsSplit by responsibility

🔴 Before Editing ANY File (THINK FIRST!)

Before changing a file, ask yourself:

QuestionWhy
What imports this file?They might break
What does this file import?Interface changes
What tests cover this?Tests might fail
Is this a shared component?Multiple places affected

Quick Check:

code
File to edit: UserService.ts
└── Who imports this? → UserController.ts, AuthController.ts
└── Do they need changes too? → Check function signatures

🔴 Rule: Edit the file + all dependent files in the SAME task. 🔴 Never leave broken imports or missing updates.


Summary

DoDon't
Write code directlyWrite tutorials
Let code self-documentAdd obvious comments
Fix bugs immediatelyExplain the fix first
Inline small thingsCreate unnecessary files
Name things clearlyUse abbreviations
Keep functions smallWrite 100+ line functions

Remember: The user wants working code, not a programming lesson.


Self-Check Before Completing

Before saying "task complete", verify:

CheckQuestion
Goal met?Did I do exactly what user asked?
Files edited?Did I modify all necessary files?
Code works?Did I test/verify the change?
No errors?Lint and type checks pass?
Nothing forgotten?Any edge cases missed?

References

FilePurpose
.cursor/rules/go-style-guide.mdcGo coding standards, naming conventions, error handling, context usage, domain layer design, service patterns, testing conventions
.cursor/rules/frontend-patterns.mdcTypeScript standards, React patterns, state management, code organization, unused imports/variables rules, control flow statement braces