code-metrics
1
总安装量
1
周安装量
#78443
全站排名
安装命令
npx skills add https://github.com/ssiumha/dots --skill code-metrics
Agent 安装分布
amp
1
opencode
1
cursor
1
kimi-cli
1
codex
1
github-copilot
1
Skill 文档
Code Metrics
ì½ë 구조 ë©í¸ë¦ì ì ëì ì¼ë¡ 측ì í©ëë¤. ast-grep 기ë°ì¼ë¡ ì¸ì´ ë 립ì ë¶ì.
íµì¬ ì² í:
- 측ì ê°ë¥í ê²ë§ 측ì (ì¶ì¸¡ X)
- ìì ë¨ì ë¶ì (ì ì²´ ì¤ìº ìµìí)
- ìê³ê°ë³´ë¤ ì¶ì¸ê° ì¤ì
Quick Reference
/code-metrics # ë³ê²½ íì¼ ë¶ì (기본)
/code-metrics --scope=staged # staged íì¼ë§
/code-metrics --scope=all # ì ì²´ (주ì: ë림)
/code-metrics src/api/ # í¹ì ëë í 리
측ì ë©í¸ë¦
| ì¹´í ê³ ë¦¬ | ë©í¸ë¦ | 측ì ë°©ë² | ì미 |
|---|---|---|---|
| ë³µì¡ë | Cyclomatic (ê·¼ì¬) | ë¶ê¸°ë¬¸ ì¹´ì´í¸ | í ì¤í¸ ê²½ë¡ ì |
| LOC | ë¼ì¸ ì | íì¼/í¨ì í¬ê¸° | |
| Nesting | ë¤ì¬ì°ê¸° ê¹ì´ | ê°ë ì± | |
| ê²°í©ë | Efferent (Ce) | import ì | ì¸ë¶ ìì¡´ë |
| í¸ì¶ | Fan-out | í¨ì í¸ì¶ ì | ì± ì ë²ì |
| ìì§ë | Method/Field ë¹ì¨ | í´ëì¤ ë¶ì | ë¨ì¼ ì± ì |
Instructions
Phase 1: ëì íì¼ ìë³
# scopeì ë°ë¼ ëì ê²°ì
--scope=changed â git diff --name-only HEAD
--scope=staged â git diff --cached --name-only
--scope=all â ì ì²´ (Glob)
--scope=<path> â ì§ì ê²½ë¡
ì¸ì´ ê°ì§: íì¥ì ê¸°ë° (.ts, .py, .go ë±)
Phase 2: ë©í¸ë¦ 측ì
ê° íì¼ì ëí´ ë¤ì 측ì ì¤í:
2.1 ë³µì¡ë (Complexity)
# LOC
wc -l <file>
# Cyclomatic (ë¶ê¸°ì ì¹´ì´í¸) - ast-grep
ast-grep --lang typescript -p 'if ($COND) { $$$ }' <file> --json | jq length
ast-grep --lang typescript -p 'for ($INIT; $COND; $UPDATE) { $$$ }' <file> --json | jq length
ast-grep --lang typescript -p 'while ($COND) { $$$ }' <file> --json | jq length
ast-grep --lang typescript -p '$EXPR ? $THEN : $ELSE' <file> --json | jq length
ast-grep --lang typescript -p 'case $VAL:' <file> --json | jq length
ast-grep --lang typescript -p 'catch ($ERR) { $$$ }' <file> --json | jq length
# Cyclomatic = 1 + (if + for + while + ternary + case + catch)
# Nesting depth - ë¤ì¬ì°ê¸° ë¶ì (ëì ê°ì§)
awk '{match($0, /^[ \t]*/); print RLENGTH}' <file> | sort -rn | head -1
ì íë: ê·¼ì¬ì¹ (±20%). Arrow function, IIFE, nested ternary ëë½ ê°ë¥.
2.2 ê²°í©ë (Coupling)
# Efferent Coupling (Ce) - import ì
# TypeScript
ast-grep --lang typescript -p 'import $_ from "$MOD"' <file> --json | jq length
ast-grep --lang typescript -p 'import { $$$ } from "$MOD"' <file> --json | jq length
# Python
ast-grep --lang python -p 'import $MOD' <file> --json | jq length
ast-grep --lang python -p 'from $MOD import $$$' <file> --json | jq length
2.3 í¸ì¶ ê´ê³ (Call Graph)
# Fan-out - í¨ì í¸ì¶ ì
# TypeScript
ast-grep --lang typescript -p '$FN($$$)' <file> --json | jq length
# Python
ast-grep --lang python -p '$FN($$$)' <file> --json | jq length
2.4 ìì§ë (Cohesion) – í´ëì¤ íì¼ë§
# ë©ìë ì
ast-grep --lang typescript -p 'class $NAME { $$$ $METHOD($$$) { $$$ } $$$ }' <file> --json
# íë ì
ast-grep --lang typescript -p 'class $NAME { $$$ $FIELD: $TYPE $$$ }' <file> --json
# ë¹ì¨ = methods / fields (ëììë¡ íì ì¤ì¬)
Phase 3: 리í¬í¸ ì¶ë ¥
Code Metrics Report
âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Scope: changed (5 files)
âââââââââââââââââââââââââââââââ¬âââââââ¬âââââ¬ââââââââ¬âââââ¬ââââââ
â File â LOC â CC â Nest â Ce â Fan â
âââââââââââââââââââââââââââââââ¼âââââââ¼âââââ¼ââââââââ¼âââââ¼ââââââ¤
â src/api/client.ts â 220 â 12 â 4 â 8 â 24 â
â src/utils/parser.ts â 85 â 6 â 3 â 3 â 10 â
â src/models/user.py â 45 â 2 â 2 â 2 â 5 â
âââââââââââââââââââââââââââââââ´âââââââ´âââââ´ââââââââ´âââââ´ââââââ
Summary:
Total LOC: 350
Avg Cyclomatic: 6.7
Max Nesting: 4 (src/api/client.ts)
Avg Ce: 4.3
Notes:
- CC/Ce ìì¹ë ê·¼ì¬ì¹ (±20%)
- ì¶ì¸ ë¹êµì©ì´ë©° ì ë ê¸°ì¤ ìë
ì»¬ë¼ ì¤ëª :
- LOC: Lines of Code
- CC: Cyclomatic Complexity (ê·¼ì¬)
- Nest: ìµë ì¤ì²© ê¹ì´
- Ce: Efferent Coupling (import ì)
- Fan: Fan-out (í¨ì í¸ì¶ ì)
ì¤ì ìì¹
- ê·¼ì¬ì¹ ì¸ì : ast-grep ê¸°ë° ì¸¡ì ì ±20% ì¤ì°¨ ê°ë¥. ì¶ì¸ ë¹êµì©ì´ë©° ì ëê° ë¹êµ ë¶ì í©
- ìì
ë¨ì ì°ì :
--scope=allì í° íë¡ì í¸ìì ë림. ë³ê²½ íì¼ ì주 - ì¸ì´ë³ í¨í´:
resources/patterns/ì ì¸ì´ë³ ast-grep í¨í´ ì ì - ìê³ê° ìì: ì«ìë§ ì ì, íë¨ì ì¬ì©ìê°
Examples
ë³ê²½ íì¼ ë¶ì
User: "/code-metrics"
â Phase 1: git diff â 3 files
â Phase 2: ê° íì¼ ë©í¸ë¦ 측ì
â Phase 3: í
ì´ë¸ 리í¬í¸
í¹ì ëë í 리 ë¶ì
User: "/code-metrics src/api/"
â Phase 1: Glob src/api/**/*.{ts,py}
â Phase 2: ë©í¸ë¦ 측ì
â Phase 3: 리í¬í¸ + Hotspot ìë³
Anti-Patterns
| 문ì | í´ê²° |
|---|---|
| ì ì²´ ì¤ìº ë¨ë° | --scope=changed 기본 ì¬ì© |
| ì ë ìê³ê° ì ì© | ì¶ì¸/ë¹êµë¡ íë¨ |
| ë¨ì¼ ë©í¸ë¦ ìì¡´ | ì¬ë¬ ë©í¸ë¦ ì¢ í© |
Technical Details
ì¸ì´ë³ í¨í´: resources/patterns/{lang}.md
ì¤í¬ë¦½í¸: scripts/measure.sh (ì í)
ì§ì ì¸ì´:
- TypeScript/JavaScript
- Python
- Go (íì¥ ìì )
ì°ë skill:
- ast-grep: ë³µì¡í í¨í´ ìì± ì
- quality-audit: lint/íì ì²´í¬ì ì¡°í©