codemod
Codemod Best Practices
Comprehensive best practices guide for Codemod (JSSG, ast-grep, workflows), designed for AI agents and LLMs. Contains 48 rules across 11 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
- Writing new codemods with JSSG or ast-grep
- Designing workflow configurations for migrations
- Debugging pattern matching or AST traversal issues
- Reviewing codemod code for performance and safety
- Setting up test fixtures for transform validation
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | AST Understanding | CRITICAL | ast- |
| 2 | Pattern Efficiency | CRITICAL | pattern- |
| 3 | Parsing Strategy | CRITICAL | parse- |
| 4 | Node Traversal | HIGH | traverse- |
| 5 | Semantic Analysis | HIGH | semantic- |
| 6 | Edit Operations | MEDIUM-HIGH | edit- |
| 7 | Workflow Design | MEDIUM-HIGH | workflow- |
| 8 | Testing Strategy | MEDIUM | test- |
| 9 | State Management | MEDIUM | state- |
| 10 | Security and Capabilities | LOW-MEDIUM | security- |
| 11 | Package Structure | LOW | pkg- |
Quick Reference
1. AST Understanding (CRITICAL)
ast-explore-before-writing- Use AST Explorer before writing patternsast-understand-named-vs-anonymous- Understand named vs anonymous nodesast-use-kind-for-precision- Use kind constraint for precisionast-field-access-for-structure- Use field access for structural queriesast-check-null-before-access- Check null before property access
2. Pattern Efficiency (CRITICAL)
pattern-use-meta-variables- Use meta variables for flexible matchingpattern-avoid-overly-generic- Avoid overly generic patternspattern-combine-with-rules- Combine patterns with rule operatorspattern-use-constraints- Use constraints for reusable matching logicpattern-use-relational-patterns- Use relational patterns for contextpattern-ensure-idempotency- Ensure patterns are idempotent
3. Parsing Strategy (CRITICAL)
parse-select-correct-parser- Select the correct parser for file typeparse-handle-embedded-languages- Handle embedded languages with parseAsyncparse-provide-pattern-context- Provide context for ambiguous patternsparse-early-return-non-applicable- Early return for non-applicable files
4. Node Traversal (HIGH)
traverse-use-find-vs-findall- Use find() for single match, findAll() for multipletraverse-single-pass-collection- Collect multiple patterns in single traversaltraverse-use-stopby-for-depth- Use stopBy to control traversal depthtraverse-use-siblings-efficiently- Use sibling navigation efficientlytraverse-cache-repeated-lookups- Cache repeated node lookups
5. Semantic Analysis (HIGH)
semantic-use-file-scope-first- Use file scope semantic analysis firstsemantic-check-null-results- Handle null semantic analysis resultssemantic-verify-file-ownership- Verify file ownership before cross-file editssemantic-cache-cross-file-results- Cache semantic analysis results
6. Edit Operations (MEDIUM-HIGH)
edit-batch-before-commit- Batch edits before committingedit-preserve-formatting- Preserve surrounding formatting in editsedit-handle-overlapping-ranges- Handle overlapping edit rangesedit-use-flatmap-for-conditional- Use flatMap for conditional editsedit-add-imports-correctly- Add imports at correct position
7. Workflow Design (MEDIUM-HIGH)
workflow-order-nodes-by-dependency- Order nodes by dependencyworkflow-use-matrix-for-parallelism- Use matrix strategy for parallelismworkflow-use-manual-gates- Use manual gates for critical stepsworkflow-validate-before-run- Validate workflows before runningworkflow-use-conditional-steps- Use conditional steps for dynamic workflows
8. Testing Strategy (MEDIUM)
test-use-fixture-pairs- Use input/expected fixture pairstest-cover-edge-cases- Cover edge cases in test fixturestest-use-strictness-levels- Choose appropriate test strictness leveltest-update-fixtures-intentionally- Update test fixtures intentionallytest-run-on-subset-first- Test on file subset before full run
9. State Management (MEDIUM)
state-use-for-resumability- Use state for resumable migrationsstate-make-transforms-idempotent- Make transforms idempotent for safe rerunsstate-log-progress-for-observability- Log progress for long-running migrations
10. Security and Capabilities (LOW-MEDIUM)
security-minimize-capabilities- Minimize requested capabilitiessecurity-validate-external-inputs- Validate external inputs before usesecurity-review-before-running-third-party- Review third-party codemods before running
11. Package Structure (LOW)
pkg-use-semantic-versioning- Use semantic versioning for packagespkg-write-descriptive-metadata- Write descriptive package metadatapkg-organize-by-convention- Organize package by convention
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Full Compiled Document
For a complete guide with all rules expanded, see AGENTS.md.
More from pproenca/dot-skills
zod
Zod schema validation best practices for type safety, parsing, and error handling. This skill should be used when defining z.object schemas, using z.string validations, safeParse, or z.infer. This skill does NOT cover React Hook Form integration patterns (use react-hook-form skill) or OpenAPI client generation (use orval skill).
2.0Kclean-architecture
Clean Architecture principles and best practices from Robert C. Martin's book. This skill should be used when designing software systems, reviewing code structure, or refactoring applications to achieve better separation of concerns. Triggers on tasks involving layers, boundaries, dependency direction, entities, use cases, or system architecture.
1.4Kemilkowal-animations
Emil Kowalski's animation best practices for web interfaces. Use when writing, reviewing, or implementing animations in React, CSS, or Framer Motion. Triggers on tasks involving transitions, easing, gestures, toasts, drawers, or motion.
918vitest
Vitest testing framework patterns for test setup, async testing, mocking with vi.*, snapshots, and test performance (formerly test-vitest). This skill should be used when writing or debugging Vitest tests. This skill does NOT cover TDD methodology (use test-tdd skill), API mocking with MSW (use test-msw skill), or Jest-specific APIs.
907typescript
This skill should be used when the user asks to "optimize TypeScript performance", "speed up tsc compilation", "configure tsconfig.json", "fix type errors", "improve async patterns", or encounters TS errors (TS2322, TS2339, "is not assignable to"). Also triggers on .ts, .tsx, .d.ts file work involving type definitions, module organization, or memory management. Does NOT cover TypeScript basics, framework-specific patterns, or testing.
821nuqs
nuqs (type-safe URL query state) best practices for Next.js applications. This skill should be used when writing, reviewing, or refactoring code that uses nuqs for URL state management. Triggers on tasks involving useQueryState, useQueryStates, search params, URL state, query parameters, nuqs parsers, or Next.js routing with state.
735