| name | tidy |
| description | Performs small structural code cleanups (tidyings). Use when preparing code changes, removing dead code, reducing nesting, or cleaning up before feature work. |
Tidy
Kent Beck์ "Tidy First?" ๋ฐฉ๋ฒ๋ก ์ผ๋ก ์์ ๊ตฌ์กฐ์ ์ ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
ํต์ฌ ์ฒ ํ
- Tidying โ Refactoring: ๋ช ๋ถ ๋ด ์๋ฃ๋๋ ์์ ์ ๋ฆฌ โ "Tidying is geek self-care"
- ๊ตฌ์กฐ ๋ณ๊ฒฝ(S) vs ํ๋ ๋ณ๊ฒฝ(B) ๋ถ๋ฆฌ: ํ๋์ ๋ณ๊ฒฝ์ ๊ตฌ์กฐ์ ํ๋์ ์์ง ์๋๋ค
- 1 tidying = 1 commit: ๊ฐ tidying์ ๋ฐ๋์ ๋ณ๋ ์ปค๋ฐ
- ์ฐ์ ์คํ ๊ฐ๋ฅ: ์ฌ๋ฌ tidying ์ํ ์ ์ฌ๋ฌ ์ปค๋ฐ ์์ฑ
- ๊ฐ์ญ์ฑ ์์น: ๋๋ถ๋ถ์ SW ์ค๊ณ ๊ฒฐ์ ์ ์ฝ๊ฒ ๋๋๋ฆด ์ ์๋ค โ ๊ฐ์ญ์ ๊ฒฐ์ ์ ๋น ๋ฅด๊ฒ ๋ด๋ฆฐ๋ค
WHY: 1 tidying = 1 commit
- ๋๋๋ฆฌ๊ธฐ ์ฌ์ด ๋จ์
- ๊ฐ ๋ณ๊ฒฝ์ ๊ฐ๋ณ ์ถ์ ๊ฐ๋ฅ
- ๋ฌธ์ ๋ฐ์ ์ ํน์ tidying๋ง revert
DECISION: ๋ณ๋ ์ปค๋ฐ
- ์ด์ : revert ์ฉ์ด, ๋ฆฌ๋ทฐ ๋ช
ํ
- ๋์: ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ปค๋ฐ (๊ฑฐ๋ถ: ๋ฌธ์ ์์ธ ์ถ์ ์ด๋ ค์)
์๋ ํธ๋ฆฌ๊ฑฐ
| ์กฐ๊ฑด | ์์ |
|---|
| "tidy" + ์์
๋์ฌ | "์ฝ๋ ์ ๋ฆฌํด์ค", "tidy ํด์ค" |
| ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์ ์ ๋ฆฌ ์์ฒญ | "์ด๊ฑฐ ์์ ์ ์ ์ข ์ ๋ฆฌํ๊ณ ์ถ์ด" |
| ํน์ ํจํด ์ธ๊ธ | "guard clause๋ก ๋ฐ๊ฟ์ค", "dead code ์ ๊ฑฐ" |
Instructions
์ํฌํ๋ก์ฐ 1: ์์
์์ญ ํ์
-
๊ธฐ์ค ์ปค๋ฐ ํ์ธ (tidy ์ปค๋ฐ ์ ์ธ)
git log --format='%H %s' --grep='^tidy:' --invert-grep -n 1
์ด ์ปค๋ฐ์ด ํ
์คํธ ํต๊ณผ์ ๊ธฐ์ค์ ์ด ๋ฉ๋๋ค.
-
์ปจํ
์คํธ ํ์ธ
git status
git diff --stat
-
๋์ ํ์ผ ํน์ (์ฐ์ ์์ ์)
- ์ฌ์ฉ์๊ฐ ๋ช
์ํ ํ์ผ
- git diff์ ์๋ ์์ ํ์ผ โ ์ ์ฒด ๋์์ผ๋ก ์๋ ์งํ
- git diff๊ฐ ๋น์ด์๊ณ ๋ช
์ ํ์ผ๋ ์๋ ๊ฒฝ์ฐ์๋ง โ AskUserQuestion
-
ํ์ผ ๋ถ์ (code-analysis.md ์ค์)
- < 200์ค: ์ ์ฒด Read ํ์ฉ
- 200-500์ค: ast-grep ๋๋ ๋ถ๋ถ Read
- 500์ค+: Explore subagent ํ์
์ํฌํ๋ก์ฐ 2: ์ ์ฒด Survey
๋์ ํ์ผ ์ ์ฒด๋ฅผ ์ค์บํ์ฌ ์ ์ฉ ๊ฐ๋ฅํ tidying ํ๋ณด๋ฅผ ํ๋ฒ์ ์์งํ๋ค.
ํ์ ์ฐ์ ์์:
| ์ฐ์ ์์ | ํจํด | ๊ฐ์ง ์ ํธ | ์ ํ ์ด์ |
|---|
| 1 | Guard Clause | ๊น์ ์ค์ฒฉ, if-else ์ฒด์ธ | ์ค์ฒฉ ๊ฐ์๋ก ๋ฒ๊ทธ ์ถ์ ์ฉ์ด |
| 2 | Dead Code | ๋ฏธ์ฌ์ฉ ํจ์/๋ณ์, ์ฃผ์ ์ฝ๋ | ํผ๋ ์ ๊ฑฐ, ์คํ ๋ฐฉ์ง |
| 3 | Explaining Variable | ๋ณต์กํ ์กฐ๊ฑด๋ฌธ | ์๋ ๋ช
ํํ |
| 4 | Explaining Constant | ๋งค์ง ๋๋ฒ/๋ฌธ์์ด | ์๋ฏธ ๋ถ์ฌ |
| 5 | Normalize Symmetries | ๋น์ผ๊ด์ ํจํด | ์ผ๊ด์ฑ ํ๋ณด (โ ๏ธ ์ฐ์ฐํ ์ ์ฌ์ฑ ์ฃผ์) |
| 6 | Chunk Statements | ๋น ์ค ์๋ ๊ธด ๋ฌธ์ฅ ๋์ด | ๋
ผ๋ฆฌ ๋จ์ ์๊ฐํ |
| 7 | Explicit Parameters | ์ ์ญ/์ปจํ
์คํธ ์๋ฌต ์์กด | ์์กด์ฑ ๋ช
์ํ |
| 8 | Extract Helper | 3ํ+ ๋ฐ๋ณต ์ฝ๋ | ์ค๋ณต ์ ๊ฑฐ |
| 9 | Reading Order | ํจ์ ์์ ๋ถ์ผ์น | ํ๋ฆ ๊ฐ์ |
| 10 | Cohesion Order | ๊ด๋ จ ์ฝ๋ ๋ถ์ฐ | ์์ง๋ ํฅ์ |
Dead Code ํ์ง (์์
ํ์ผ ๋ฒ์ ๋ด):
- ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋ ๋ธ๋ก
- ํ์ผ ๋ด ๋ฏธํธ์ถ private ํจ์
- ๋ฏธ์ฌ์ฉ ๋ก์ปฌ ๋ณ์
- ์ ์ฒด ํ๋ก์ ํธ ์ค์บ์ ๋ฒ์ ์ด๊ณผ โ ๋ณ๋ ์์
์ผ๋ก
์์ธ ํจํด: resources/01-tidying-patterns.md ์ฐธ์กฐ
โ ๏ธ ์ฐ์ฐํ ์ ์ฌ์ฑ vs ์ง์ง ์ค๋ณต
| ๊ตฌ๋ถ | ์ง์ง ์ค๋ณต | ์ฐ์ฐํ ์ ์ฌ์ฑ |
|---|
| ์ ์ | ๋์ผ ๋น์ฆ๋์ค ๋ก์ง | ๊ตฌํ ์ ์ฌ, ๋๋ฉ์ธ ์์ด |
| ํน์ง | ๋ณ๊ฒฝ ์ ํจ๊ป ๋ฐ๋ | ๋
๋ฆฝ ์งํ ๊ฐ๋ฅ |
| ํ๋ | ํตํฉ | ์ ์ง |
ํตํฉ ๊ธ์ง ์ ํธ: ๋ค๋ฅธ ์ํฐํฐ/๋๋ฉ์ธ, ์ ๋ค๋ฆญ ํ์, ์กฐ๊ฑด๋ฌธ ์ฆ๊ฐ
Survey ๊ฒฐ๊ณผ ํ์ โ ๋ฐ๊ฒฌ๋ ํ๋ณด๋ฅผ ๋ฒํธ ๋งค๊ธด ํ
์ด๋ธ๋ก ์ถ๋ ฅ:
## Tidying Survey
| # | ํจํด | ์์น | ๋ณ๊ฒฝ ์์ฝ | ์ํฅ๋ |
|---|------|------|-----------|--------|
| 1 | Guard Clause | auth.ts:42 | 3๋จ ์ค์ฒฉ โ early return | ๊ฐ๋
์ฑ โ |
| 2 | Dead Code | auth.ts:78-85 | ์ฃผ์ ์ฝ๋ ๋ธ๋ก ์ ๊ฑฐ | ํผ๋ โ |
| 3 | Explaining Variable | order.ts:15 | ๋ณตํฉ ์กฐ๊ฑด โ ๋ณ์ ์ถ์ถ | ์๋ ๋ช
ํ |
| ... | ... | ... | ... | ... |
์ด {N}๊ฐ ๋ฐ๊ฒฌ. ์ด๋ป๊ฒ ์งํํ ๊น์?
๋์ ํ์ผ์ด ๋ง์ ๊ฒฝ์ฐ: Explore subagent๋ฅผ ํ์ฉํ์ฌ ๋ณ๋ ฌ ์ค์บํ๋ค.
ํ๋จ ๊ฐ์ด๋: ์ธ์ ์ ๋ฆฌํ ๊ฒ์ธ๊ฐ (Part II)
Survey ํ ์ ์ฉ ์ , ํ์ด๋ฐ์ ํ๋จํ๋ค:
| ํ์ด๋ฐ | ์กฐ๊ฑด | ํ๋ |
|---|
| First | ๋ค์ ๋ณ๊ฒฝ์ด ์ ๋ฆฌํ๋ฉด ์ฌ์์ง ๋ | ์ง๊ธ ์ ๋ฆฌ ํ ๋ณ๊ฒฝ |
| After | ๋ณ๊ฒฝ ์๋ฃ ํ ๊ตฌ์กฐ ๊ฐ์ ๊ธฐํ ๋ฐ๊ฒฌ | ๋ณ๊ฒฝ ์ปค๋ฐ ํ ๋ณ๋ ์ ๋ฆฌ |
| Later | ๊ด๋ จ ์์ง๋ง ๋ฐ๊ฒฌํ ๋ฌธ์ | ๋ชฉ๋ก์ ๊ธฐ๋ก, ๋์ค์ ์ฒ๋ฆฌ |
| Never | ๋น์ฉ > ๊ฐ์น, ๋๋ ์ฝ๋๊ฐ ์์ ์ | ์ ๋ฆฌํ์ง ์์ |
๋ฆฌ๋ฌ: 1์๊ฐ ์ด์ ์ ๋ฆฌ์ ๋น ์ง๋ฉด โ ๋ ์์ ์ต์ ๋ณ๊ฒฝ์ ๋์ณค์ ๊ฐ๋ฅ์ฑ. ๋ฉ์ถ๊ณ ์ฌํ๊ฐ.
๋ฐฐ์น ํฌ๊ธฐ: ๋น์ฅ ํ์ํ ๋ฒ์๋ง ์ ๋ฆฌ. ํ๋ ํ ๋ถํฌ โ ์์์ ์ ๋ฆฌ๊ฐ ๋๋ถ๋ถ์ ๊ฐ์น๋ฅผ ์ ๊ณต.
์์ธ: resources/02-managing-tidyings.md
์ํฌํ๋ก์ฐ 3: ์ ํ ๋ฐ ์ ์ฉ
-
์ฌ์ฉ์ ์ ํ ๋๊ธฐ
Survey ํ
์ด๋ธ ์ถ๋ ฅ ํ AskUserQuestion์ผ๋ก ์งํ ๋ฐฉ์ ํ์ธ:
- ์ ์ฒด ์ ์ฉ โ ๋ชจ๋ ํ๋ณด๋ฅผ ์์๋๋ก ์ ์ฉ
- ๋ฒํธ ์ ํ โ ํน์ ๋ฒํธ๋ง ์ ํ (์: "1, 3, 5")
- ํจํด ์ ํ โ ํน์ ํจํด๋ง (์: "Guard Clause๋ง")
- ์ทจ์
-
์์ฐจ ์ ์ฉ
์ ํ๋ ํ๋ณด๋ฅผ ์์๋๋ก ์ ์ฉ. ๊ฐ tidying๋ง๋ค:
- ๋ณ๊ฒฝ ์ ์ฉ
- ํ
์คํธ ํ์ธ (์ค์ ์์น ์ฐธ์กฐ)
- ์ปค๋ฐ:
git add {ํ์ผ} && git commit -m "tidy: {ํจํด๋ช
} in {ํ์ผ๋ช
}"
- ์คํจ ์:
git restore {ํ์ผ} + ํด๋น ํญ๋ชฉ skip ๋ณด๊ณ ํ ๋ค์์ผ๋ก
์ง๋ฌธ ์์ด ์ฐ์ ์ ์ฉ: ์ฌ์ฉ์๊ฐ ์ ํํ ํญ๋ชฉ์ ๊ฐ๋ณ ํ์ธ ์์ด ์ฐ์ ์งํํ๋ค.
-
์๋ฃ ๋ณด๊ณ
## Tidy ์๋ฃ
| # | ํจํด | ์์น | ์ํ |
|---|------|------|------|
| 1 | Guard Clause | auth.ts:42 | โ ์ปค๋ฐ๋จ |
| 2 | Dead Code | auth.ts:78 | โ ์ปค๋ฐ๋จ |
| 3 | Explaining Variable | order.ts:15 | โ ํ
์คํธ ์คํจ (skip) |
{N}๊ฐ ์ค {M}๊ฐ ์ ์ฉ, {K}๊ฐ ์ปค๋ฐ ์์ฑ๋จ
์ํฌํ๋ก์ฐ 4: ํน์ ํจํด ์ ์ฉ
์ฌ์ฉ์๊ฐ ํน์ ํจํด์ ์์ฒญํ ๊ฒฝ์ฐ:
User: "guard clause๋ก ๋ฐ๊ฟ์ค"
โ Guard Clause ํจํด๋ง ์ง์ค ํ์
โ ํด๋น ํจํด ์ ์ฉ
์ค์ ์์น
- cost(SW) โ coupling (Constantine's Equivalence): ์ํํธ์จ์ด ๋น์ฉ์ ๋๋ถ๋ถ์ ๊ฒฐํฉ๋์์ ์จ๋ค. ์ ๋ฆฌ์ ๊ถ๊ทน์ ๋ชฉํ๋ ๋ถํ์ํ ๊ฒฐํฉ ๊ฐ์. ์์ธ:
resources/03-theory.md
- ๋์ ๋ณ๊ฒฝ ๊ธ์ง: tidying์ ๊ตฌ์กฐ๋ง ๋ณ๊ฒฝ, ๋์์ ๊ทธ๋๋ก
- ํ
์คํธ ํต๊ณผ ์ ์ง: ๊ธฐ์ค ์ปค๋ฐ(tidy ์ ์ธ ์ต๊ทผ ์ปค๋ฐ)๊ณผ ๋์ผํ ํ
์คํธ ๊ฒฐ๊ณผ ์ ์ง
- ์ํฌํ๋ก์ฐ 1์์ ํ์ธํ ๊ธฐ์ค ์ปค๋ฐ์ ํ
์คํธ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํจ
- export/public ํจ์ ์์ ์: ์ ์ฒด ํ
์คํธ (Task subagent)
- ๋ด๋ถ ๋ก์ง๋ง ๋ณ๊ฒฝ ์: ํด๋น ํ์ผ ํ
์คํธ๋ง
- ํ
์คํธ ์๋ ๊ฒฝ์ฐ: WARNING ํ ๊ณ์
- ์คํจ ์: ์๋
git restore {ํ์ผ} + ๋ณด๊ณ
- 1 tidying = 1 commit: ์ฌ๋ฌ tidying ์คํ ์ ๊ฐ๊ฐ ๋ณ๋ ์ปค๋ฐ
- ๋๋๋ฆฌ๊ธฐ ์ฝ๊ฒ: ๋
๋ฆฝ์ ์ธ ์ปค๋ฐ์ผ๋ก ๊ฐ๋ณ revert ๊ฐ๋ฅ
Examples
๊ธฐ๋ณธ ์ฌ์ฉ
User: "์ด ํจ์ ์ ๋ฆฌํด์ค"
โ ์ํฌํ๋ก์ฐ 1: ๋์ ํ์ผ ๋ถ์
โ ์ํฌํ๋ก์ฐ 2: ์ ์ฒด Survey โ 5๊ฐ ํ๋ณด ํ
์ด๋ธ ์ถ๋ ฅ
โ User: "์ ์ฒด ์ ์ฉ"
โ ์ํฌํ๋ก์ฐ 3: 5๊ฐ ์ฐ์ ์ ์ฉ โ 5๊ฐ ์ปค๋ฐ
โ ์๋ฃ ๋ณด๊ณ ํ
์ด๋ธ
์ ํ ์ ์ฉ
User: "/tidy"
โ ์ํฌํ๋ก์ฐ 1 โ 2: 8๊ฐ ํ๋ณด Survey
โ User: "1, 3, 5๋ฒ๋ง"
โ ์ํฌํ๋ก์ฐ 3: 3๊ฐ ์ฐ์ ์ ์ฉ โ 3๊ฐ ์ปค๋ฐ
โ ์๋ฃ ๋ณด๊ณ
ํน์ ํจํด ์์ฒญ
User: "guard clause๋ก ๋ฐ๊ฟ์ค"
โ ์ํฌํ๋ก์ฐ 4: Guard Clause ํจํด๋ง Survey
โ 2๊ฐ ๋ฐ๊ฒฌ โ ํ
์ด๋ธ ์ถ๋ ฅ
โ User: "์ ์ฒด ์ ์ฉ"
โ 2๊ฐ ์ฐ์ ์ ์ฉ โ 2๊ฐ ์ปค๋ฐ
ํ
์คํธ ์คํจ ์
User: "์ ์ฒด ์ ์ฉ"
โ #1 Guard Clause โ โ ์ปค๋ฐ
โ #2 Dead Code โ โ ํ
์คํธ ์คํจ โ restore โ skip
โ #3 Rename โ โ ์ปค๋ฐ
โ ์๋ฃ ๋ณด๊ณ : 3๊ฐ ์ค 2๊ฐ ์ ์ฉ, 1๊ฐ skip
Technical Details
์ปค๋ฐ ๋ฉ์์ง ํ์
tidy: {ํจํด๋ช
} in {ํ์ผ๋ช
}
- {๊ตฌ์ฒด์ ๋ณ๊ฒฝ ๋ด์ฉ}
์์:
tidy: guard clause in auth.ts
- Convert nested if-else to early returns
- Reduce nesting depth from 4 to 1
tidy-commit agent์์ ๊ด๊ณ
| tidy skill | tidy-commit agent |
|---|
| ์ฝ๋ ๊ตฌ์กฐ ์ ๋ฆฌ | ์ปค๋ฐ ๋จ์ ์ ๋ฆฌ |
| ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์ | ์์
์๋ฃ ํ |
| ์ฌ์ฉ์ ์ง์ ํธ์ถ | proactive ํธ์ถ |
์กฐํฉ ์ฌ์ฉ:
/tidy โ ์ฝ๋ ์ ๋ฆฌ โ ๊ธฐ๋ฅ ๊ตฌํ โ tidy-commit โ ์ปค๋ฐ ์ ๋ฆฌ
๋ฆฌ์์ค
resources/01-tidying-patterns.md: 15๊ฐ์ง tidying ํจํด ์์ธ
resources/02-managing-tidyings.md: Part II โ ์ ๋ฆฌ ์์ ๊ณผ ๊ด๋ฆฌ
resources/03-theory.md: Part III โ ๊ตฌ์กฐ, ๊ฒฐํฉ, ๊ฒฝ์ ํ