Back to skills

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.

11 stars
0 votes
0 copies
0 views
Added 12/19/2025
data-aigobashnodeexpressrefactoringgitapidocumentation

Works with

api

Install via CLI

$openskills install sunholo-data/ailang
Download Zip
Files
SKILL.md
---
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:**
```bash
# 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

```bash
# 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:

1. **Run baseline tests**: `make test`
2. **Identify natural boundaries**:
   - Expression parsing vs statement parsing
   - Type inference vs type checking
   - Different AST node types
   - Public API vs internal helpers

3. **Plan file names** (match to primary functions):
   - `expressions.go` → `parseExpression()`, `parseCall()`
   - `statements.go` → `parseStatement()`, `parseLetDecl()`
   - `helpers.go` → utility functions

4. **Check for circular dependency risks**

### Step 3: Execute Split

```bash
# 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

```bash
# 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:**
1. DO NOT COMMIT
2. Analyze failure (missing import? broken reference?)
3. Fix issue
4. Re-run tests
5. Only commit when tests pass

### Step 5: Document & Commit

Update package documentation:
```go
// 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:
```bash
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:

1. **Identify cycle**: File A imports B, File B imports A
2. **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)

### 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)

Comments (0)

No comments yet. Be the first to comment!