inline-rule
Replace a grammar rule with its definition at all reference sites, removing helper rules and simplifying ANTLR4 grammars.
Instructions
Inline a rule by replacing all references with its definition, then delete the original rule.
When to use:
Remove "pass-through" or helper rules
Simplify grammar structure
Clean up unnecessary indirection
Inverse of extract-fragment refactoring
How it works:
Validates rule can be inlined (no circular references, not recursive, actually used)
Extracts rule body (removes labels, actions preserved)
Finds all references to the rule
Replaces references with rule body (adds parentheses if needed)
Removes original rule definition
Example - Simple pass-through: rule_name: "additiveExpression" // Before: expression: additiveExpression; // additiveExpression: term ((PLUS | MINUS) term); // After: expression: term ((PLUS | MINUS) term);
Example - Helper rule: rule_name: "value" // Before: assignment: ID ASSIGN value SEMI; // value: NUMBER | STRING | ID; // After: assignment: ID ASSIGN (NUMBER | STRING | ID) SEMI;
Features:
Circular reference detection
Smart parenthesization
Multi-reference support
Dry-run mode available
Detailed statistics
Returns:
Modified grammar with rule inlined
Number of references replaced
List of affected rules
Original rule definition
Validates:
Rule exists
Not self-recursive
No circular dependencies
Actually used somewhere
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, shows what would change without modifying grammar | |
| from_file | No | Optional: path to a grammar file to read. Required if using write_to_file. | |
| rule_name | Yes | Name of the rule to inline (e.g., "helper", "value") | |
| write_to_file | No | If true, writes modified grammar back to from_file (requires from_file to be set) | |
| grammar_content | No | The ANTLR4 grammar file content | |
| preserve_parentheses | No | If true, always wrap inlined body in parentheses (safer but verbose). Default: auto-detect |