home / skills / zhanghandong / rust-skills / rust-trait-explorer

rust-trait-explorer skill

/skills/rust-trait-explorer

This skill helps you explore Rust trait implementations and find all implementors using LSP-driven insights for faster polymorphism understanding.

npx playbooks add skill zhanghandong/rust-skills --skill rust-trait-explorer

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

Files (1)
SKILL.md
5.8 KB
---
name: rust-trait-explorer
description: "Explore Rust trait implementations using LSP. Triggers on: /trait-impl, find implementations, who implements, trait 实现, 谁实现了, 实现了哪些trait"
argument-hint: "<TraitName|StructName>"
allowed-tools: ["LSP", "Read", "Glob", "Grep"]
---

# Rust Trait Explorer

Discover trait implementations and understand polymorphic designs.

## Usage

```
/rust-trait-explorer <TraitName|StructName>
```

**Examples:**
- `/rust-trait-explorer Handler` - Find all implementors of Handler trait
- `/rust-trait-explorer MyStruct` - Find all traits implemented by MyStruct

## LSP Operations

### Go to Implementation

Find all implementations of a trait.

```
LSP(
  operation: "goToImplementation",
  filePath: "src/traits.rs",
  line: 10,
  character: 11
)
```

**Use when:**
- Trait name is known
- Want to find all implementors
- Understanding polymorphic code

## Workflow

### Find Trait Implementors

```
User: "Who implements the Handler trait?"
    │
    ▼
[1] Find trait definition
    LSP(goToDefinition) or workspaceSymbol
    │
    ▼
[2] Get implementations
    LSP(goToImplementation)
    │
    ▼
[3] For each impl, get details
    LSP(documentSymbol) for methods
    │
    ▼
[4] Generate implementation map
```

### Find Traits for a Type

```
User: "What traits does MyStruct implement?"
    │
    ▼
[1] Find struct definition
    │
    ▼
[2] Search for "impl * for MyStruct"
    Grep pattern matching
    │
    ▼
[3] Get trait details for each
    │
    ▼
[4] Generate trait list
```

## Output Format

### Trait Implementors

```
## Implementations of `Handler`

**Trait defined at:** src/traits.rs:15

​```rust
pub trait Handler {
    fn handle(&self, request: Request) -> Response;
    fn name(&self) -> &str;
}
​```

### Implementors (4)

| Type | Location | Notes |
|------|----------|-------|
| AuthHandler | src/handlers/auth.rs:20 | Handles authentication |
| ApiHandler | src/handlers/api.rs:15 | REST API endpoints |
| WebSocketHandler | src/handlers/ws.rs:10 | WebSocket connections |
| MockHandler | tests/mocks.rs:5 | Test mock |

### Implementation Details

#### AuthHandler
​```rust
impl Handler for AuthHandler {
    fn handle(&self, request: Request) -> Response {
        // Authentication logic
    }

    fn name(&self) -> &str {
        "auth"
    }
}
​```

#### ApiHandler
​```rust
impl Handler for ApiHandler {
    fn handle(&self, request: Request) -> Response {
        // API routing logic
    }

    fn name(&self) -> &str {
        "api"
    }
}
​```
```

### Traits for a Type

```
## Traits implemented by `User`

**Struct defined at:** src/models/user.rs:10

### Standard Library Traits
| Trait | Derived/Manual | Notes |
|-------|----------------|-------|
| Debug | #[derive] | Auto-generated |
| Clone | #[derive] | Auto-generated |
| Default | manual | Custom defaults |
| Display | manual | User-friendly output |

### Serde Traits
| Trait | Location |
|-------|----------|
| Serialize | #[derive] |
| Deserialize | #[derive] |

### Project Traits
| Trait | Location | Methods |
|-------|----------|---------|
| Entity | src/db/entity.rs:30 | id(), created_at() |
| Validatable | src/validation.rs:15 | validate() |

### Implementation Hierarchy

​```
User
├── derive
│   ├── Debug
│   ├── Clone
│   ├── Serialize
│   └── Deserialize
└── impl
    ├── Default (src/models/user.rs:50)
    ├── Display (src/models/user.rs:60)
    ├── Entity (src/models/user.rs:70)
    └── Validatable (src/models/user.rs:85)
​```
```

## Trait Hierarchy Visualization

```
## Trait Hierarchy

                    ┌─────────────┐
                    │    Error    │ (std)
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              │            │            │
      ┌───────▼───────┐ ┌──▼──┐ ┌───────▼───────┐
      │  AppError     │ │ ... │ │  DbError      │
      └───────┬───────┘ └─────┘ └───────┬───────┘
              │                         │
      ┌───────▼───────┐         ┌───────▼───────┐
      │ AuthError     │         │ QueryError    │
      └───────────────┘         └───────────────┘
```

## Analysis Features

### Coverage Check

```
## Trait Implementation Coverage

Trait: Handler (3 required methods)

| Implementor | handle() | name() | priority() | Complete |
|-------------|----------|--------|------------|----------|
| AuthHandler | ✅ | ✅ | ✅ | Yes |
| ApiHandler | ✅ | ✅ | ❌ default | Yes |
| MockHandler | ✅ | ✅ | ✅ | Yes |
```

### Blanket Implementations

```
## Blanket Implementations

The following blanket impls may apply to your types:

| Trait | Blanket Impl | Applies To |
|-------|--------------|------------|
| From<T> | `impl<T> From<T> for T` | All types |
| Into<U> | `impl<T, U> Into<U> for T where U: From<T>` | Types with From |
| ToString | `impl<T: Display> ToString for T` | Types with Display |
```

## Common Patterns

| User Says | Action |
|-----------|--------|
| "Who implements X?" | goToImplementation on trait |
| "What traits does Y impl?" | Grep for `impl * for Y` |
| "Show trait hierarchy" | Find super-traits recursively |
| "Is X: Send + Sync?" | Check std trait impls |

## Related Skills

| When | See |
|------|-----|
| Navigate to impl | rust-code-navigator |
| Call relationships | rust-call-graph |
| Project structure | rust-symbol-analyzer |
| Safe refactoring | rust-refactor-helper |

Overview

This skill helps Rust developers discover trait implementations and inspect which traits a type implements using LSP and simple workspace searches. It returns implementor lists, code snippets, locations, and an implementation coverage summary to speed understanding of polymorphic design. Use it interactively with a trait or type name to get a structured map of implementations and derived traits.

How this skill works

The skill locates a trait or type definition (via LSP goToDefinition or workspace symbols) and runs goToImplementation or pattern searches like "impl * for Type" to find matches. For each impl it collects document symbols and source ranges, extracts method definitions, and generates tables and small code excerpts. It can also detect derives, blanket impls, and build a simple trait hierarchy and coverage checklist.

When to use it

  • Find every implementor of a trait to understand code paths and behavior.
  • List all traits implemented by a struct or enum for API and serialization checks.
  • Audit implementation completeness and detect missing methods or default fallbacks.
  • Visualize trait inheritance and blanket impls affecting a type.
  • Prepare for refactoring by mapping polymorphic relationships.

Best practices

  • Run on the trait or type symbol from a file open in the workspace to ensure LSP resolution.
  • Combine LSP results with a grep search for impl blocks to catch edge cases (macros, generated code).
  • Review extracted method snippets to verify behavioral differences between implementors.
  • Use the coverage table to prioritize tests for implementors missing optional APIs.
  • When dealing with macros or proc-macros, inspect the expanded code or generated files if LSP misses impls.

Example use cases

  • /rust-trait-explorer Handler — list all types that implement Handler with locations and method summaries.
  • /rust-trait-explorer MyStruct — enumerate derived and manual traits and show impl block locations.
  • Inspect trait hierarchy for Error-like traits to understand error propagation and conversions.
  • Run a coverage check on a trait to see which implementors rely on default methods vs. custom implementations.
  • Detect blanket impls (e.g., ToString via Display) that implicitly apply to many types.

FAQ

What if LSP returns no implementations?

Fallback to workspace grep for "impl .* for <Type|Trait>" and check generated/expanded code; proc-macro output may not be indexed by LSP.

Can it show method-level differences between implementors?

Yes — it extracts method signatures and small code excerpts for each impl so you can compare implemented behavior and note overrides or defaults.