rust-refactor-helper

zhanghandong/rust-skills · updated Apr 10, 2026

$npx skills add https://github.com/zhanghandong/rust-skills --skill rust-refactor-helper
0 commentsdiscussion
summary

Safe Rust refactoring with LSP-driven impact analysis and dry-run preview.

  • Supports four refactoring actions: rename symbol, extract function, inline function, and move to module
  • Performs pre-refactor analysis using LSP operations (find references, go to definition, call hierarchy) to identify all affected code locations
  • Generates detailed impact reports showing definition location, all references categorized by file, and potential issues like documentation updates or public API chan
skill.md

Rust Refactor Helper

Perform safe refactoring with comprehensive impact analysis.

Usage

/rust-refactor-helper <action> <target> [--dry-run]

Actions:

  • rename <old> <new> - Rename symbol
  • extract-fn <selection> - Extract to function
  • inline <fn> - Inline function
  • move <symbol> <dest> - Move to module

Examples:

  • /rust-refactor-helper rename parse_config load_config
  • /rust-refactor-helper extract-fn src/main.rs:20-35
  • /rust-refactor-helper move UserService src/services/

LSP Operations Used

Pre-Refactor Analysis

# Find all references before renaming
LSP(
  operation: "findReferences",
  filePath: "src/lib.rs",
  line: 25,
  character: 8
)

# Get symbol info
LSP(
  operation: "hover",
  filePath: "src/lib.rs",
  line: 25,
  character: 8
)

# Check call hierarchy for move operations
LSP(
  operation: "incomingCalls",
  filePath: "src/lib.rs",
  line: 25,
  character: 8
)

Refactoring Workflows

1. Rename Symbol

User: "Rename parse_config to load_config"
[1] Find symbol definition
    LSP(goToDefinition)
[2] Find ALL references
    LSP(findReferences)
[3] Categorize by file
[4] Check for conflicts
    - Is 'load_config' already used?
    - Are there macro-generated uses?
[5] Show impact analysis (--dry-run)
[6] Apply changes with Edit tool

Output:

## Rename: parse_config → load_config

### Impact Analysis

**Definition:** src/config.rs:25
**References found:** 8

| File | Line | Context | Change |
|------|------|---------|--------|
| src/config.rs | 25 | `pub fn parse_config(` | Definition |
| src/config.rs | 45 | `parse_config(path)?` | Call |
| src/main.rs | 12 | `config::parse_config` | Import |
| src/main.rs | 30 | `let cfg = parse_config(` | Call |
| src/lib.rs | 8 | `pub use config::parse_config` | Re-export |
| tests/config_test.rs | 15 | `parse_config("test.toml")` | Test |
| tests/config_test.rs | 25 | `parse_config("")` | Test |
| docs/api.md | 42 | `parse_config` | Documentation |

### Potential Issues

⚠️ **Documentation reference:** docs/api.md:42 may need manual update
⚠️ **Re-export:** src/lib.rs:8 - public API change

### Proceed?
- [x] --dry-run (preview only)
- [ ] Apply changes

2. Extract Function

User: "Extract lines 20-35 in main.rs to a function"
[1] Read the selected code block
[2] Analyze variables
    - Which are inputs? (used but not defined in block)
    - Which are outputs? (defined and used after block)
    - Which are local? (defined and used only in block)
[3] Determine function signature
[4] Check for early returns, loops, etc.
[5] Generate extracted function
[6] Replace original code with call

Output:

## Extract Function: src/main.rs:20-35

### Selected Code
​```rust
let file = File::open(&path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
let config: Config = toml::from_str(&contents)?;
validate_config(&config)?;
​```

### Analysis

**Inputs:** path: &Path
**Outputs:** config: Config
**Side Effects:** File I/O, may return error

### Extracted Function

​```rust
fn load_and_validate_config(path: &Path) -> Result<Config> {
    let file = File::open(path)?;
    let mut contents = String::new();
    file.read_to_string(&mut contents)?;
    let config: Config = toml::from_str(&contents)?;
    validate_config(&config)?;
    Ok(config)
}
​```

### Replacement

​```rust
let config = load_and_validate_config(&path)?;
​```

3. Move Symbol

User: "Move UserService to src/services/"
[1] Find symbol and all its dependencies
[2] Find all references (callers)
    LSP(findReferences)
[3] Analyze import changes needed
[4] Check for circular dependencies
[5] Generate move plan

Output:

## Move: UserService → src/services/user.rs

### Current Location
src/handlers/auth.rs:50-120

### Dependencies (will be moved together)
- struct UserService (50-80)
- impl UserService (82-120)
- const DEFAULT_TIMEOUT (48)

### Import Changes Required

| File | Current | New |
|------|---------|-----|
| src/main.rs | `use handlers::auth::UserService` | `use services::user::UserService` |
| src/handlers/api.rs | `use super::auth::UserService` | `use crate::services::user::UserService` |
| tests/auth_test.rs | `use crate::handlers::auth::UserService` | `use crate::services::user::UserService` |

### New File Structure

​```
src/
├── services/
│   ├── mod.rs (NEW - add `pub mod user;`)
│   └── user.rs (NEW - UserService moved here)
├── handlers/
│   └── auth.rs (UserService removed)
​```

### Circular Dependency Check
✅ No circular dependencies detected

Safety Checks

Check Purpose
Reference completeness Ensure all uses are found
Name conflicts Detect existing symbols with same name
Visibility changes Warn if pub/private scope changes
Macro-generated code Warn about code in macros
Documentation Flag doc comments mentioning symbol
Test coverage Show affected tests

Dry Run Mode

Always use --dry-run first to preview changes:

/rust-refactor-helper rename old_name new_name --dry-run

This shows all changes without applying them.

Related Skills

When See
Navigate to symbol rust-code-navigator
Understand call flow rust-call-graph
Project structure rust-symbol-analyzer
Trait implementations rust-trait-explorer

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.855 reviews
  • Nikhil Liu· Dec 20, 2024

    Registry listing for rust-refactor-helper matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Amelia Okafor· Dec 20, 2024

    rust-refactor-helper has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Carlos Khanna· Dec 16, 2024

    rust-refactor-helper is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Nikhil Chen· Dec 16, 2024

    rust-refactor-helper reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Nikhil Martinez· Dec 12, 2024

    Useful defaults in rust-refactor-helper — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Amelia Haddad· Nov 19, 2024

    Keeps context tight: rust-refactor-helper is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Maya Abbas· Nov 11, 2024

    Useful defaults in rust-refactor-helper — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Amelia Chen· Nov 11, 2024

    rust-refactor-helper fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Daniel Ghosh· Nov 7, 2024

    I recommend rust-refactor-helper for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Aisha Johnson· Nov 7, 2024

    rust-refactor-helper is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

showing 1-10 of 55

1 / 6