home / skills / zhanghandong / rust-skills / rust-symbol-analyzer

rust-symbol-analyzer skill

/skills/rust-symbol-analyzer

This skill analyzes a Rust project to reveal structure and symbols using LSP, listing modules, structs, traits, and functions.

npx playbooks add skill zhanghandong/rust-skills --skill rust-symbol-analyzer

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

Files (1)
SKILL.md
5.1 KB
---
name: rust-symbol-analyzer
description: "Analyze Rust project structure using LSP symbols. Triggers on: /symbols, project structure, list structs, list traits, list functions, 符号分析, 项目结构, 列出所有, 有哪些struct"
argument-hint: "[file.rs] [--type struct|trait|fn|mod]"
allowed-tools: ["LSP", "Read", "Glob"]
---

# Rust Symbol Analyzer

Analyze project structure by examining symbols across your Rust codebase.

## Usage

```
/rust-symbol-analyzer [file.rs] [--type struct|trait|fn|mod]
```

**Examples:**
- `/rust-symbol-analyzer` - Analyze entire project
- `/rust-symbol-analyzer src/lib.rs` - Analyze single file
- `/rust-symbol-analyzer --type trait` - List all traits in project

## LSP Operations

### 1. Document Symbols (Single File)

Get all symbols in a file with their hierarchy.

```
LSP(
  operation: "documentSymbol",
  filePath: "src/lib.rs",
  line: 1,
  character: 1
)
```

**Returns:** Nested structure of modules, structs, functions, etc.

### 2. Workspace Symbols (Entire Project)

Search for symbols across the workspace.

```
LSP(
  operation: "workspaceSymbol",
  filePath: "src/lib.rs",
  line: 1,
  character: 1
)
```

**Note:** Query is implicit in the operation context.

## Workflow

```
User: "What's the structure of this project?"
    │
    ▼
[1] Find all Rust files
    Glob("**/*.rs")
    │
    ▼
[2] Get symbols from each key file
    LSP(documentSymbol) for lib.rs, main.rs
    │
    ▼
[3] Categorize by type
    │
    ▼
[4] Generate structure visualization
```

## Output Format

### Project Overview

```
## Project Structure: my-project

### Modules
├── src/
│   ├── lib.rs (root)
│   ├── config/
│   │   ├── mod.rs
│   │   └── parser.rs
│   ├── handlers/
│   │   ├── mod.rs
│   │   ├── auth.rs
│   │   └── api.rs
│   └── models/
│       ├── mod.rs
│       ├── user.rs
│       └── order.rs
└── tests/
    └── integration.rs
```

### By Symbol Type

```
## Symbols by Type

### Structs (12)
| Name | Location | Fields | Derives |
|------|----------|--------|---------|
| Config | src/config.rs:10 | 5 | Debug, Clone |
| User | src/models/user.rs:8 | 4 | Debug, Serialize |
| Order | src/models/order.rs:15 | 6 | Debug, Serialize |
| ... | | | |

### Traits (4)
| Name | Location | Methods | Implementors |
|------|----------|---------|--------------|
| Handler | src/handlers/mod.rs:5 | 3 | AuthHandler, ApiHandler |
| Repository | src/db/mod.rs:12 | 5 | UserRepo, OrderRepo |
| ... | | | |

### Functions (25)
| Name | Location | Visibility | Async |
|------|----------|------------|-------|
| main | src/main.rs:10 | pub | yes |
| parse_config | src/config.rs:45 | pub | no |
| ... | | | |

### Enums (6)
| Name | Location | Variants |
|------|----------|----------|
| Error | src/error.rs:5 | 8 |
| Status | src/models/order.rs:5 | 4 |
| ... | | |
```

### Single File Analysis

```
## src/handlers/auth.rs

### Symbols Hierarchy

mod auth
├── struct AuthHandler
│   ├── field: config: Config
│   ├── field: db: Pool
│   └── impl AuthHandler
│       ├── fn new(config, db) -> Self
│       ├── fn authenticate(&self, token) -> Result<User>
│       └── fn refresh_token(&self, user) -> Result<Token>
├── struct Token
│   ├── field: value: String
│   └── field: expires: DateTime
├── enum AuthError
│   ├── InvalidToken
│   ├── Expired
│   └── Unauthorized
└── impl Handler for AuthHandler
    ├── fn handle(&self, req) -> Response
    └── fn name(&self) -> &str
```

## Analysis Features

### Complexity Metrics

```
## Complexity Analysis

| File | Structs | Functions | Lines | Complexity |
|------|---------|-----------|-------|------------|
| src/handlers/auth.rs | 2 | 8 | 150 | Medium |
| src/models/user.rs | 3 | 12 | 200 | High |
| src/config.rs | 1 | 3 | 50 | Low |

**Hotspots:** Files with high complexity that may need refactoring
- src/handlers/api.rs (15 functions, 300 lines)
```

### Dependency Analysis

```
## Internal Dependencies

auth.rs
├── imports from: config.rs, models/user.rs, db/mod.rs
└── imported by: main.rs, handlers/mod.rs

user.rs
├── imports from: (none - leaf module)
└── imported by: auth.rs, api.rs, tests/
```

## Symbol Types

| Type | Icon | LSP Kind |
|------|------|----------|
| Module | 📦 | Module |
| Struct | 🏗️ | Struct |
| Enum | 🔢 | Enum |
| Trait | 📜 | Interface |
| Function | ⚡ | Function |
| Method | 🔧 | Method |
| Constant | 🔒 | Constant |
| Field | 📎 | Field |

## Common Queries

| User Says | Analysis |
|-----------|----------|
| "What structs are in this project?" | workspaceSymbol + filter |
| "Show me src/lib.rs structure" | documentSymbol |
| "Find all async functions" | workspaceSymbol + async filter |
| "List public API" | documentSymbol + pub filter |

## Related Skills

| When | See |
|------|-----|
| Navigate to symbol | rust-code-navigator |
| Call relationships | rust-call-graph |
| Trait implementations | rust-trait-explorer |
| Safe refactoring | rust-refactor-helper |

Overview

This skill analyzes a Rust codebase by collecting and categorizing LSP symbols to reveal project structure, types, and hotspots. It summarizes modules, structs, traits, enums, functions, and methods and produces per-file hierarchies and cross-file dependency hints. Use it to quickly map the code surface and identify complexity or public API elements.

How this skill works

The analyzer finds Rust source files (glob **/*.rs) and queries the language server with documentSymbol for file-level hierarchies and workspaceSymbol for project-wide listings. It merges results, groups symbols by type, and extracts locations, signatures, derives, and basic metrics (lines, counts). Outputs include a tree-style module map, tables of symbols by type, single-file hierarchies, complexity hotspots, and simple dependency summaries.

When to use it

  • When you need a quick overview of a new or unfamiliar Rust project
  • To list all structs, traits, functions, or modules across the workspace
  • Before refactoring to identify high-complexity files and hotspots
  • To extract public API surfaces or find all async functions
  • When building documentation or onboarding guides for a codebase

Best practices

  • Run workspaceSymbol to get comprehensive cross-file results and documentSymbol for detailed file hierarchies
  • Filter by type (struct, trait, fn, mod) to focus output and reduce noise
  • Combine symbol results with basic metrics (lines, function counts) to prioritize refactors
  • Use file paths and symbol ranges to jump directly to definitions in your editor
  • Run periodically to track structural changes during major refactors

Example use cases

  • Generate a module tree and tables of structs, enums, and traits for a code review
  • List all trait definitions and their implementors to assess interface coverage
  • Find all async functions across the workspace to audit runtime behavior
  • Inspect a single file’s symbol hierarchy to understand relationships and method signatures
  • Identify files with many functions or large structs as refactor candidates

FAQ

How do I restrict output to a single file?

Provide the file path when invoking the analyzer; it will call documentSymbol for that file and return the local hierarchy and metrics.

Can it find all implementations of a trait?

It lists traits and can surface likely implementors by collecting type and impl symbols across the workspace, but full semantic resolution depends on the language server.