--- name: rust-code-navigator description: "Navigate Rust code using LSP. Triggers on: /navigate, go to definition, find references, where is defined, 跳转定义, 查找引用, 定义在哪, 谁用了这个" argument-hint: " [in file.rs:line]" allowed-tools: ["LSP", "Read", "Glob"] --- # Rust Code Navigator Navigate large Rust codebases efficiently using Language Server Protocol. ## Usage ``` /rust-code-navigator [in file.rs:line] ``` **Examples:** - `/rust-code-navigator parse_config` - Find definition of parse_config - `/rust-code-navigator MyStruct in src/lib.rs:42` - Navigate from specific location ## LSP Operations ### 1. Go to Definition Find where a symbol is defined. ``` LSP( operation: "goToDefinition", filePath: "src/main.rs", line: 25, character: 10 ) ``` **Use when:** - User asks "where is X defined?" - User wants to understand a type/function - Ctrl+click equivalent ### 2. Find References Find all usages of a symbol. ``` LSP( operation: "findReferences", filePath: "src/lib.rs", line: 15, character: 8 ) ``` **Use when:** - User asks "who uses X?" - Before refactoring/renaming - Understanding impact of changes ### 3. Hover Information Get type and documentation for a symbol. ``` LSP( operation: "hover", filePath: "src/main.rs", line: 30, character: 15 ) ``` **Use when:** - User asks "what type is X?" - User wants documentation - Quick type checking ## Workflow ``` User: "Where is the Config struct defined?" │ ▼ [1] Search for "Config" in workspace LSP(operation: "workspaceSymbol", ...) │ ▼ [2] If multiple results, ask user to clarify │ ▼ [3] Go to definition LSP(operation: "goToDefinition", ...) │ ▼ [4] Show file path and context Read surrounding code for context ``` ## Output Format ### Definition Found ``` ## Config (struct) **Defined in:** `src/config.rs:15` ​```rust #[derive(Debug, Clone)] pub struct Config { pub name: String, pub port: u16, pub debug: bool, } ​``` **Documentation:** Configuration for the application server. ``` ### References Found ``` ## References to `Config` (5 found) | Location | Context | |----------|---------| | src/main.rs:10 | `let config = Config::load()?;` | | src/server.rs:25 | `fn new(config: Config) -> Self` | | src/server.rs:42 | `self.config.port` | | src/tests.rs:15 | `Config::default()` | | src/cli.rs:8 | `config: Option` | ``` ## Common Patterns | User Says | LSP Operation | |-----------|---------------| | "Where is X defined?" | goToDefinition | | "Who uses X?" | findReferences | | "What type is X?" | hover | | "Find all structs" | workspaceSymbol | | "What's in this file?" | documentSymbol | ## Error Handling | Error | Cause | Solution | |-------|-------|----------| | "No LSP server" | rust-analyzer not running | Suggest: `rustup component add rust-analyzer` | | "Symbol not found" | Typo or not in scope | Search with workspaceSymbol first | | "Multiple definitions" | Generics or macros | Show all and let user choose | ## Related Skills | When | See | |------|-----| | Call relationships | rust-call-graph | | Project structure | rust-symbol-analyzer | | Trait implementations | rust-trait-explorer | | Safe refactoring | rust-refactor-helper |