lint-audit
npx skills add https://github.com/ssiumha/dots --skill lint-audit
Agent 安装分布
Skill 文档
Lint Audit
íë¡ì í¸ lint/íì /ìì ìí를 측ì íê³ ê°ì ë°©í¥ì ì ìíë ì¤í¬ì ëë¤.
lint-audit vs code-metrics
| í목 | lint-audit | code-metrics |
|---|---|---|
| 측ì ëì | ë구 ê¸°ë° ê²ì¬ ê²°ê³¼ | ì½ë 구조 ë©í¸ë¦ |
| ìì | lint ì¤ë¥, íì ì¤ë¥, 죽ì ì½ë | ë³µì¡ë, ê²°í©ë, ìì§ë |
| ë구 | eslint, tsc, mypy, knip | ast-grep |
| ì¶ë ¥ | ì¤ë¥ ì + ì°ì ìì 리í¬í¸ | ì«ì í ì´ë¸ |
| ì¬ì© ìì | PR ì , CI, ì 기 ì ê² | 리í©í ë§ íë¨, ì¤ê³ ê²í |
íµì¬ ì² í:
- 측ì íì§ ìì¼ë©´ ê°ì í ì ìë¤
- ì¤í¬ë¦½í¸ë¡ ë§ë¤ ì ìë ê±´ ì¤í¬ë¦½í¸ë¡
- ì ì§ì ê°ì (í ë²ì 모ë ê² X)
íµì¬ ìì¹
| ìì¹ | ì¤ëª | 측ì ëì |
|---|---|---|
| íì§ ì§í | ìì¹ë¡ íí© íì | ë¹ë ì¤ë¥, Lint ê²½ê³ /ì¤ë¥, ì¤ë¥ ë°ë |
| Tidy ì»¤ë° | 커ë°ì ë¨ì¼ 목ì , ììì , ëª íí´ì¼ | íì¼ ì, ë³ê²½ ì í, ë©ìì§ ëª íì± |
| 죽ì ì½ë | ì¬ì©íì§ ìë ì½ëë ë¶ì± | 미ì¬ì© íì¼/export/dependency |
| ìëí | ë°ë³µ 측ì ì ìëí | hook, CI, 커맨ë ì¡´ì¬ ì¬ë¶ |
Tidyíì§ ìì ì»¤ë° ê¸°ì¤: íì¼ 10ê° ì´ê³¼, ë³ê²½ ì í í¼í© (feat+fix), 모í¸í ë©ìì§
Instructions
Phase 1: íë¡ì í¸ ë¶ì
# 1. 기ì ì¤í ê°ì§
Glob package.json pyproject.toml Cargo.toml go.mod
# 2. CI/CD ì¤ì íì¸
Glob .github/workflows/** Justfile Makefile
# 3. íì§ ë구 ì¤ì íì¸
Grep "eslint\|prettier\|ruff\|mypy\|clippy" package.json pyproject.toml
íì¸ í목: 기ì ì¤í, CI íì´íë¼ì¸, íì§ ë구
Phase 1 ê²°ê³¼ ìì:
Stack: TypeScript (package.json)
CI: GitHub Actions (.github/workflows/ci.yml)
Tools: ESLint â, tsc â, knip â (ì¤ì¹ íì)
Phase 2: íí© ì§ë¨
2.1 ë구 íì¸
ëêµ¬ê° ìì¼ë©´ ì¤ì¹ ê°ì´ëì í¨ê» ì¬ì©ììê² ì림:
# íì ë구 íì¸
check_tool() {
if ! command -v "$1" &>/dev/null; then
echo "Missing: $1 - Install: $2"
return 1
fi
}
# TypeScript íë¡ì í¸
check_tool tsc "npm install -D typescript"
check_tool eslint "npm install -D eslint"
check_tool knip "npm install -D knip"
ë구 ëë½ ì: Phase 3 리í¬í¸ì ì¤ì¹ ê°ì´ë í¬í¨ í ê³ì ì§í (ê°ë¥í ëêµ¬ë§ ì¤í).
2.2 ì¸ì´ë³ ê²ì¬
| ì¸ì´ | íì ì²´í¬ | Lint | 죽ì ì½ë |
|---|---|---|---|
| TypeScript | npx tsc --noEmit |
npx eslint . --format json |
npx knip |
| Python | mypy . |
ruff check . --output-format json |
vulture . |
| Rust | cargo check |
cargo clippy |
– |
| Go | go build ./... |
golangci-lint run |
– |
2.3 Tidy ì»¤ë° ë¶ì
# ìµê·¼ 20ê° ì»¤ë° ì¤ íì¼ 10ê° ì´ê³¼ ì»¤ë° ìë³
git log --oneline -20 --format="%h %s" | while read hash msg; do
files=$(git show --name-only --format="" "$hash" | wc -l | tr -d ' ')
if [ "$files" -gt 10 ]; then
echo "Untidy: $hash ($files files) - $msg"
fi
done
2.4 ì¤ë¥ ë°ë ê³ì°
# SLOC ê³ì° (ê´í¸ë¡ ì¡°ê±´ 그룹í)
sloc=$(find . \( -name "*.ts" -o -name "*.py" \) -exec cat {} + 2>/dev/null | wc -l)
# ëë cloc ì¬ì© (ê¶ì¥: 주ì/ë¹ì¤ ìë ì ì¸)
if command -v cloc &>/dev/null; then
sloc=$(cloc . --json 2>/dev/null | jq '.SUM.code // 0')
fi
# ë°ë = ì¤ë¥ ì / SLOC
ë°ë í´ì 기ì¤:
- < 0.01: ìí¸
- 0.01-0.05: ê°ì íì
-
0.05: ì¬ê°
Phase 3: 리í¬í¸ ìì±
측ì 결과를 ìì½íì¬ ì ì:
## Quality Audit Report
### íí©
- Lint ì¤ë¥: XXê° (ë°ë: X.XX)
- íì
ì¤ë¥: XXê°
- 죽ì ì½ë: XXê° íì¼
### Tidy ì»¤ë° ë¶ì (ìµê·¼ 20ê°)
- Tidyíì§ ìì 커ë°: Xê°
- #15: "fix: multiple fixes" (12ê° íì¼)
### ê¶ì¥ ì¡°ì¹
1. [ì°ì ] Lint ì¤ë¥ í´ê²°
2. [ì¤ê°] 죽ì ì½ë ì ê±°
3. [ë®ì] ì»¤ë° ë¶ë¦¬ ê°ì
Phase 4: ìëí ì ì
ê°ì ì´ íìí ììì ëí´ ìëí ë구 ì ì:
| ìì | ì ì |
|---|---|
| íì§ ë¦¬í¬í¸ | .claude/commands/quality-report.md |
| Tidy ì²´í¬ | .claude/commands/tidy-check.md |
| 죽ì ì½ë | .claude/commands/dead-code.md |
| ìë ì²´í¬ | .claude/hooks/post-edit.sh |
â ì¬ì©ì ì¹ì¸ í ìì± (rule-creator ì°ë)
Examples
ìì 1: TypeScript íë¡ì í¸ ê°ì¬
User: “íë¡ì í¸ íì§ ì²´í¬í´ì¤”
Flow:
- package.json íì¸ â TypeScript + ESLint ê°ì§
npx tsc --noEmitì¤í â ì¤ë¥ 12ê°npx eslint .ì¤í â ê²½ê³ 45ê°- 리í¬í¸ ìì± + ê¶ì¥ ì¡°ì¹ ì ì
- AskUserQuestion: “ìëí ì¤í¬ë¦½í¸ ìì±í ê¹ì?”
ìì 2: ì»¤ë° íì¤í 리 ì§ë¨
User: “ì»¤ë° íì§ ì²´í¬í´ì¤”
Flow:
- ìµê·¼ 20ê° ì»¤ë° ë¶ì
- tidyíì§ ìì ì»¤ë° ìë³
/tidy-check커맨ë ìì± ì ì
Anti-Patterns
| 문ì | í´ê²° |
|---|---|
| 측ì ìì´ ê°ì ìë | Phase 2 ì§ë¨ 먼ì ì¤í |
| í ë²ì 모ë 문ì í´ê²° | ì°ì ìì ì í´ì ì ì§ì ì ì© |
| íì§ ë구 ìì´ ì²´í¬ | ë구 먼ì íì¸, ìì¼ë©´ ì¤ì¹ ì ì |
Technical Details
ì°ë ì¤í¬:
- code-metrics: ì½ë 구조 ë©í¸ë¦ (ë³µì¡ë, ê²°í©ë) ë¶ì
- rule-creator: ìëí ì¤í¬ë¦½í¸ ìì± ì ì°ë
- devops-local-ci: CI íì§ ì²´í¬ ì¤ì ì 참조