Files
everything-claude-code/rules/common/coding-style.md
2026-04-05 15:49:43 -07:00

2.5 KiB

Coding Style

Immutability (CRITICAL)

ALWAYS create new objects, NEVER mutate existing ones:

// Pseudocode
WRONG:  modify(original, field, value) → changes original in-place
CORRECT: update(original, field, value) → returns new copy with change

Rationale: Immutable data prevents hidden side effects, makes debugging easier, and enables safe concurrency.

Core Principles

KISS (Keep It Simple)

  • Prefer the simplest solution that actually works
  • Avoid premature optimization
  • Optimize for clarity over cleverness

DRY (Don't Repeat Yourself)

  • Extract repeated logic into shared functions or utilities
  • Avoid copy-paste implementation drift
  • Introduce abstractions when repetition is real, not speculative

YAGNI (You Aren't Gonna Need It)

  • Do not build features or abstractions before they are needed
  • Avoid speculative generality
  • Start simple, then refactor when the pressure is real

File Organization

MANY SMALL FILES > FEW LARGE FILES:

  • High cohesion, low coupling
  • 200-400 lines typical, 800 max
  • Extract utilities from large modules
  • Organize by feature/domain, not by type

Error Handling

ALWAYS handle errors comprehensively:

  • Handle errors explicitly at every level
  • Provide user-friendly error messages in UI-facing code
  • Log detailed error context on the server side
  • Never silently swallow errors

Input Validation

ALWAYS validate at system boundaries:

  • Validate all user input before processing
  • Use schema-based validation where available
  • Fail fast with clear error messages
  • Never trust external data (API responses, user input, file content)

Naming Conventions

  • Variables and functions: camelCase with descriptive names
  • Booleans: prefer is, has, should, or can prefixes
  • Interfaces, types, and components: PascalCase
  • Constants: UPPER_SNAKE_CASE
  • Custom hooks: camelCase with a use prefix

Code Smells to Avoid

Deep Nesting

Prefer early returns over nested conditionals once the logic starts stacking.

Magic Numbers

Use named constants for meaningful thresholds, delays, and limits.

Long Functions

Split large functions into focused pieces with clear responsibilities.

Code Quality Checklist

Before marking work complete:

  • Code is readable and well-named
  • Functions are small (<50 lines)
  • Files are focused (<800 lines)
  • No deep nesting (>4 levels)
  • Proper error handling
  • No hardcoded values (use constants or config)
  • No mutation (immutable patterns used)