home / skills / zhanghandong / rust-skills / rust-code-navigator

rust-code-navigator skill

/skills/rust-code-navigator

This skill helps navigate large Rust codebases by locating definitions, references, and hover info via LSP.

npx playbooks add skill zhanghandong/rust-skills --skill rust-code-navigator

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.2 KB
---
name: rust-code-navigator
description: "Navigate Rust code using LSP. Triggers on: /navigate, go to definition, find references, where is defined, 跳转定义, 查找引用, 定义在哪, 谁用了这个"
argument-hint: "<symbol> [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 <symbol> [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<Config>` |
```

## 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 |

Overview

This skill navigates Rust codebases using the Language Server Protocol to locate definitions, references, and type/documentation hover info. It provides file locations, code context, and quick summaries so you can jump to the right code spot without leaving the chat. It supports explicit location hints (file:line) and workspace-wide symbol searches.

How this skill works

The skill issues LSP requests such as workspaceSymbol, goToDefinition, findReferences, and hover to discover symbols and their usages. It resolves ambiguous results by listing candidates and asking for clarification, then reads surrounding source to produce a concise snippet and path. Error cases (missing LSP server, symbol not found) are detected and actionable suggestions are returned.

When to use it

  • Locate where a function, struct, trait, or constant is defined.
  • Find all places a symbol is used before refactoring.
  • Inspect the inferred type or documentation for a symbol via hover.
  • Jump from a specific file:line context to the canonical definition.

Best practices

  • Provide a symbol name and, when possible, the file:line context to disambiguate results.
  • Start with workspaceSymbol if a plain name returns multiple candidates.
  • Use findReferences before mass renames or API changes to estimate impact.
  • Ensure rust-analyzer (or another LSP) is running in the workspace for reliable results.

Example use cases

  • /rust-code-navigator parse_config — jump to the parse_config function definition and show surrounding code.
  • /rust-code-navigator MyStruct in src/lib.rs:42 — resolve which MyStruct is referenced at that location.
  • Find all references to Config to see where configuration is constructed and consumed.
  • Hover on a variable to reveal its inferred type and documentation comments.
  • Search workspace symbols for all public structs when exploring project API surface.

FAQ

What if the LSP server is not available?

I will report the error and suggest starting rust-analyzer or installing it via rustup so LSP operations can run.

I got multiple symbol matches — how do I pick the right one?

I list candidates with file paths and contexts; provide the file:line or index for the desired entry and I will navigate to that definition.