Codebase Organizer
Monitor and refactor large files into smaller, AI-friendly modules. Use when user asks to check file sizes, split large files, or organize the codebase. Ensures tests pass before and after refactoring.
$ 安裝
git clone https://github.com/sunholo-data/ailang /tmp/ailang && cp -r /tmp/ailang/.claude/skills/codebase-organizer ~/.claude/skills/ailang// tip: Run this command in your terminal to install the skill
name: Codebase Organizer description: Monitor and refactor large files into smaller, AI-friendly modules. Use when user asks to check file sizes, split large files, or organize the codebase. Ensures tests pass before and after refactoring.
Codebase Organizer
Maintain optimal file sizes for AI-assisted development by splitting large files into focused modules.
Quick Start
Most common usage:
# Check file sizes
make report-file-sizes
# If files >800 lines found:
# 1. Analyze structure
# 2. Plan split
# 3. Execute with test validation
When to Use This Skill
Invoke when user says:
- "Check file sizes" / "report file sizes"
- "Split this file" / "refactor large file"
- "Organize the codebase"
- "Make files AI-friendly"
File Size Targets
| Size | Status | Action |
|---|---|---|
| 200-500 lines | Sweet spot | None needed |
| 500-800 lines | Acceptable | Consider splitting |
| >800 lines | CRITICAL | Must split |
Workflow
Step 1: Status Check
# Find all large files
make report-file-sizes
# Or manually:
find internal -name "*.go" -exec wc -l {} \; | awk '$1 > 500 {print}' | sort -rn
Output format:
=== File Size Report ===
CRITICAL (>800 lines):
internal/types/typechecker_core.go: 2736 lines
internal/parser/parser.go: 2518 lines
WARNING (500-800 lines):
internal/eval/eval_core.go: 765 lines
Step 2: Plan the Split
Before ANY refactoring:
-
Run baseline tests:
make test -
Identify natural boundaries:
- Expression parsing vs statement parsing
- Type inference vs type checking
- Different AST node types
- Public API vs internal helpers
-
Plan file names (match to primary functions):
expressions.go→parseExpression(),parseCall()statements.go→parseStatement(),parseLetDecl()helpers.go→ utility functions
-
Check for circular dependency risks
Step 3: Execute Split
# 1. Create new files with clear names
# 2. Move related functions together (maintain cohesion)
# 3. Update imports in all affected files
# 4. Keep main struct in pkg.go
Keep together:
- Tightly coupled functions
- Helper functions used by one main function
- Functions that share complex state
Step 4: Validate
# MUST run after every split
make test # All tests must pass
make lint # No linting errors
make check-file-sizes # Verify all <800 lines
If tests fail:
- DO NOT COMMIT
- Analyze failure (missing import? broken reference?)
- Fix issue
- Re-run tests
- Only commit when tests pass
Step 5: Document & Commit
Update package documentation:
// Package parser implements AILANG source code parsing.
//
// # Architecture
//
// The parser is split into several files:
// - parser.go: Main struct and entry points
// - expressions.go: Expression parsing
// - statements.go: Statement parsing
Commit with descriptive message:
git add internal/path/*.go
git commit -m "Split path/file.go into N files (AI-friendly)
- parser.go: Main struct (200 lines)
- expressions.go: Expression parsing (450 lines)
..."
Error Handling
Circular Dependency
If split creates circular dependency:
- Identify cycle: File A imports B, File B imports A
- Solutions:
- Extract shared code to new file (e.g.,
types.go) - Use interfaces to break dependency
- Restructure to have one-way dependency
- Merge files if truly inseparable (<800 lines combined)
- Extract shared code to new file (e.g.,
Test Failures
Common issues after split:
- Missing import in new file
- Function moved but still referenced in old location
- Test file not updated to match new structure
Example Session
User: "Check codebase organization"
Response:
Running make report-file-sizes...
=== File Size Report ===
CRITICAL (>800 lines):
internal/parser/parser.go: 2518 lines
WARNING (500-800 lines):
internal/eval/eval_core.go: 765 lines
Recommendation: Split internal/parser/parser.go into ~6 focused files.
Would you like me to analyze and propose a split plan?
User: "Yes, split parser.go"
Response:
Analyzing internal/parser/parser.go (2518 lines)...
Proposed split:
parser.go (200 lines) - Main struct, entry points
expressions.go (450 lines) - Expression parsing
statements.go (400 lines) - Declaration parsing
types.go (300 lines) - Type annotation parsing
patterns.go (350 lines) - Pattern parsing
modules.go (300 lines) - Module system
helpers.go (200 lines) - Utilities
Proceed? Tests will run before and after.
Success Metrics
After refactoring:
- 0 files over 800 lines
- <5 files between 500-800 lines
- Average file size: 300-400 lines
- 100% test pass rate maintained
Important Reminders
- ALWAYS run tests before and after refactoring
- NEVER commit if tests fail
- One refactoring at a time (easier to debug)
- Show plan before executing (get user approval)
- Keep related functions together (maintain cohesion)
Repository
