Facebook/Meta jscodeshift Best Practices
Comprehensive best practices guide for jscodeshift codemod development, designed for AI agents and LLMs. Contains 40 rules across 8 categories, prioritized by impact from critical (parser configuration, AST traversal) to incremental (advanced patterns). Each rule includes detailed explanations, real-world examples, and specific impact metrics.
When to Apply
Reference these guidelines when:
-
Writing new jscodeshift codemods for code migrations
-
Debugging transform failures or unexpected behavior
-
Optimizing codemod performance on large codebases
-
Reviewing codemod code for correctness
-
Testing codemods for edge cases and regressions
Rule Categories by Priority
Priority Category Impact Prefix
1 Parser Configuration CRITICAL parser-
2 AST Traversal Patterns CRITICAL traverse-
3 Node Filtering HIGH filter-
4 AST Transformation HIGH transform-
5 Code Generation MEDIUM codegen-
6 Testing Strategies MEDIUM test-
7 Runner Optimization LOW-MEDIUM runner-
8 Advanced Patterns LOW advanced-
Quick Reference
- Parser Configuration (CRITICAL)
-
parser-typescript-config
-
Use correct parser for TypeScript files
-
parser-flow-annotation
-
Use Flow parser for Flow-typed code
-
parser-babel5-compat
-
Avoid default babel5compat for modern syntax
-
parser-export-declaration
-
Export parser from transform module
-
parser-astexplorer-match
-
Match AST Explorer parser to jscodeshift parser
- AST Traversal Patterns (CRITICAL)
-
traverse-find-specific-type
-
Use specific node types in find() calls
-
traverse-two-pass-pattern
-
Use two-pass pattern for complex transforms
-
traverse-early-return
-
Return early when no transformation needed
-
traverse-find-filter-pattern
-
Use find() with filter object over filter() chain
-
traverse-closest-scope
-
Use closestScope() for scope-aware transforms
-
traverse-avoid-repeated-find
-
Avoid repeated find() calls for same node type
- Node Filtering (HIGH)
-
filter-path-parent-check
-
Check parent path before transformation
-
filter-import-binding
-
Track import bindings for accurate usage detection
-
filter-nullish-checks
-
Add nullish checks before property access
-
filter-jsx-context
-
Distinguish JSX context from regular JavaScript
-
filter-computed-properties
-
Handle computed property keys in filters
- AST Transformation (HIGH)
-
transform-builder-api
-
Use builder API for creating AST nodes
-
transform-replacewith-callback
-
Use replaceWith callback for context-aware transforms
-
transform-insert-import
-
Insert imports at correct position
-
transform-preserve-comments
-
Preserve comments when replacing nodes
-
transform-renameto
-
Use renameTo for variable renaming
-
transform-remove-unused-imports
-
Remove unused imports after transformation
- Code Generation (MEDIUM)
-
codegen-tosource-options
-
Configure toSource() for consistent formatting
-
codegen-preserve-style
-
Preserve original code style with recast
-
codegen-template-literals
-
Use template literals for complex node creation
-
codegen-print-width
-
Set appropriate print width for long lines
- Testing Strategies (MEDIUM)
-
test-inline-snapshots
-
Use defineInlineTest for input/output verification
-
test-negative-cases
-
Write negative test cases first
-
test-dry-run-exploration
-
Use dry run mode for codebase exploration
-
test-fixture-files
-
Use fixture files for complex test cases
-
test-parse-errors
-
Test for parse error handling
- Runner Optimization (LOW-MEDIUM)
-
runner-parallel-workers
-
Configure worker count for optimal parallelization
-
runner-ignore-patterns
-
Use ignore patterns to skip non-source files
-
runner-extensions-filter
-
Filter files by extension
-
runner-batch-processing
-
Process large codebases in batches
-
runner-verbose-output
-
Use verbose output for debugging transforms
- Advanced Patterns (LOW)
-
advanced-compose-transforms
-
Compose multiple transforms into pipelines
-
advanced-scope-analysis
-
Use scope analysis for safe variable transforms
-
advanced-multi-file-state
-
Share state across files with options
-
advanced-custom-collections
-
Create custom collection methods
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 single comprehensive document containing all rules, see AGENTS.md.
Reference Files
File Description
AGENTS.md Complete compiled guide with all rules
references/_sections.md Category definitions and ordering
assets/templates/_template.md Template for new rules
metadata.json Version and reference information