-
Notifications
You must be signed in to change notification settings - Fork 0
Refactoring Configuration
Mo Abualruz edited this page Dec 5, 2025
·
1 revision
Status: ✅ Complete
Last Updated: December 5, 2025
The Refactoring Engine uses YAML configuration files to define language-specific refactoring rules and transformations. This enables unlimited language support without code changes.
Configurations are loaded in priority order (highest to lowest):
- Runtime Overrides - CLI flags, API calls
-
Project-Level Config -
./.agent/refactoring/languages/*.yaml -
User-Level Config -
~/.ricecoder/refactoring/languages/*.yaml - Built-in Config - Bundled with ricecoder-storage
- Fallback - Generic text-based refactoring
language: rust
extensions:
- .rs
parser_plugin: tree-sitter-rust
rules:
- name: "unused_variable"
pattern: "let \\w+ = .*;"
refactoring_type: "RemoveUnused"
enabled: true
transformations:
- name: "rename_function"
from_pattern: "fn old_name"
to_pattern: "fn new_name"
description: "Rename function from old_name to new_name"| Field | Type | Required | Description |
|---|---|---|---|
language |
string | Yes | Language name (e.g., "rust", "typescript", "python") |
extensions |
array | Yes | File extensions for this language (e.g., [".rs", ".toml"]) |
parser_plugin |
string | No | Tree-sitter parser plugin name |
rules |
array | No | Refactoring rules for this language |
transformations |
array | No | Transformation patterns |
provider |
string | No | Reference to external provider |
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Rule name (unique within language) |
pattern |
string | Yes | Pattern to match (regex or AST pattern) |
refactoring_type |
string | Yes | Type of refactoring (Rename, Extract, Inline, etc.) |
enabled |
boolean | No | Whether rule is enabled (default: true) |
description |
string | No | Rule description |
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Transformation name |
from_pattern |
string | Yes | Pattern to match |
to_pattern |
string | Yes | Replacement pattern |
description |
string | No | Transformation description |
language: rust
extensions:
- .rs
parser_plugin: tree-sitter-rust
rules:
- name: "unused_variable"
pattern: "let \\w+ = .*;"
refactoring_type: "RemoveUnused"
enabled: true
- name: "unused_import"
pattern: "use \\w+;"
refactoring_type: "RemoveUnused"
enabled: true
transformations:
- name: "rename_function"
from_pattern: "fn {{old_name}}"
to_pattern: "fn {{new_name}}"
description: "Rename function"
- name: "extract_method"
from_pattern: "// Extract this block"
to_pattern: "self.extracted_method()"
description: "Extract code block into separate method"language: typescript
extensions:
- .ts
- .tsx
parser_plugin: tree-sitter-typescript
rules:
- name: "unused_variable"
pattern: "let \\w+ = .*;"
refactoring_type: "RemoveUnused"
enabled: true
- name: "unused_import"
pattern: "import .* from .*;"
refactoring_type: "RemoveUnused"
enabled: true
transformations:
- name: "rename_function"
from_pattern: "function {{old_name}}"
to_pattern: "function {{new_name}}"
description: "Rename function"
- name: "rename_class"
from_pattern: "class {{old_name}}"
to_pattern: "class {{new_name}}"
description: "Rename class"language: python
extensions:
- .py
parser_plugin: tree-sitter-python
rules:
- name: "unused_variable"
pattern: "\\w+ = .*"
refactoring_type: "RemoveUnused"
enabled: true
- name: "unused_import"
pattern: "import \\w+"
refactoring_type: "RemoveUnused"
enabled: true
transformations:
- name: "rename_function"
from_pattern: "def {{old_name}}"
to_pattern: "def {{new_name}}"
description: "Rename function"
- name: "rename_class"
from_pattern: "class {{old_name}}"
to_pattern: "class {{new_name}}"
description: "Rename class"Use standard regex syntax for text-based matching:
transformations:
- name: "rename_variable"
from_pattern: "let (\\w+) ="
to_pattern: "let new_name ="
description: "Rename variable"Use tree-sitter AST patterns for structural matching:
transformations:
- name: "extract_method"
from_pattern: "(function_declaration name: (identifier) @name)"
to_pattern: "extracted_method"
description: "Extract method"Use double-brace placeholders for parameterized patterns:
transformations:
- name: "rename_function"
from_pattern: "fn {{old_name}}"
to_pattern: "fn {{new_name}}"
description: "Rename function"Configurations are validated on load:
let config = ConfigManager::load_language_config("rust").await?;
config.validate()?;Validation checks:
- Language name is not empty
- Extensions list is not empty
- Rules have valid patterns
- Transformations have valid patterns
- No duplicate rule names
- No duplicate transformation names
Configuration changes are detected and reloaded automatically:
let config_manager = ConfigManager::new();
// Configuration changes are automatically detected and reloadedCreate ./.agent/refactoring/languages/custom.yaml:
language: custom
extensions:
- .custom
rules:
- name: "custom_rule"
pattern: "pattern"
refactoring_type: "Rename"
enabled: trueCreate ~/.ricecoder/refactoring/languages/custom.yaml:
language: custom
extensions:
- .custom
rules:
- name: "custom_rule"
pattern: "pattern"
refactoring_type: "Rename"
enabled: true- Check file path is correct
- Verify YAML syntax is valid
- Check file permissions
- Review logs for error messages
- Verify rule is enabled
- Check pattern matches your code
- Verify language is detected correctly
- Check file extension is in configuration
- Simplify patterns to reduce matching time
- Disable unused rules
- Use specific patterns instead of broad ones
- Consider breaking large configurations into smaller ones
- Refactoring-Engine.md - Main refactoring guide
- Refactoring-Architecture.md - Architecture documentation
- Refactoring-Patterns.md - Pattern guide
Last updated: December 5, 2025