6.9 KiB
name, description
| name | description |
|---|---|
| tokio-review | Review Tokio code for async anti-patterns, performance issues, and best practices |
Tokio Review Command
This command performs comprehensive code review of Tokio-based applications, identifying async/await anti-patterns, performance issues, blocking operations, and suggesting improvements.
Arguments
$1- File path or directory to review (optional, defaults to current directory)
Usage
/rust-tokio-expert:tokio-review
/rust-tokio-expert:tokio-review src/handlers/
/rust-tokio-expert:tokio-review src/main.rs
Workflow
-
Analyze Target
- If no argument provided, scan current directory for Rust files
- If directory provided, scan all
.rsfiles recursively - If file provided, review that specific file
-
Read Relevant Files
- Use Glob tool to find Rust source files
- Read all identified files using Read tool
- Prioritize files in: src/main.rs, src/lib.rs, src/**/*.rs
-
Invoke Agent
- Use Task tool with
subagent_type="rust-tokio-expert:tokio-performance" - Provide all source code context to the agent
- Request comprehensive analysis
- Use Task tool with
-
Review Checklist
The agent should analyze for:
Async/Await Anti-Patterns
-
Blocking Operations in Async Context
- Detect
std::thread::sleepinstead oftokio::time::sleep - Identify blocking I/O operations
- Find CPU-intensive operations not wrapped in
spawn_blocking
- Detect
-
Holding Locks Across Await Points
- Detect
std::sync::Mutexortokio::sync::Mutexheld across.await - Suggest lock scope reduction
- Recommend alternatives like channels
- Detect
-
Unnecessary Cloning
- Identify expensive clones in async contexts
- Suggest
Arcfor shared data - Recommend reference passing where possible
-
Futures Not Being Awaited
- Find async functions called without
.await - Detect unused futures
- Identify missing error handling
- Find async functions called without
Performance Issues
-
Excessive Task Spawning
- Detect unbounded task creation in loops
- Suggest
buffer_unorderedor bounded concurrency - Recommend semaphore-based limiting
-
Large Future Sizes
- Identify large types stored in future state
- Suggest boxing large data
- Recommend heap allocation for big arrays
-
Inefficient Channel Usage
- Detect unbounded channels
- Identify inappropriate channel types
- Suggest buffer size optimization
-
Memory Allocation in Hot Paths
- Find repeated allocations in loops
- Suggest buffer reuse
- Recommend object pooling
Concurrency Issues
-
Potential Deadlocks
- Detect complex lock ordering
- Identify circular dependencies
- Suggest lock-free alternatives
-
Missing Timeout Handling
- Find network operations without timeouts
- Suggest
tokio::time::timeoutusage - Recommend timeout configuration
-
Improper Shutdown Handling
- Check for graceful shutdown implementation
- Verify cleanup in Drop implementations
- Ensure resource release
Error Handling
-
Error Propagation
- Verify proper error context
- Check error type appropriateness
- Suggest improvements for error handling
-
Panic in Async Context
- Detect unwrap/expect in async code
- Suggest proper error handling
- Recommend Result usage
Channel Patterns
-
Channel Selection
- Verify appropriate channel type (mpsc, oneshot, broadcast, watch)
- Check buffer sizes
- Suggest alternatives if needed
-
Select! Usage
- Review select! macro usage
- Check for biased selection when needed
- Verify all branches handle errors
Runtime Configuration
- Runtime Setup
- Check worker thread configuration
- Verify blocking thread pool size
- Suggest optimizations based on workload
-
-
Generate Report
Create a structured review report with:
Critical Issues (Must Fix)
- Blocking operations in async context
- Potential deadlocks
- Memory safety issues
- Resource leaks
High Priority (Should Fix)
- Performance bottlenecks
- Inefficient patterns
- Missing error handling
- Improper shutdown handling
Medium Priority (Consider Fixing)
- Suboptimal channel usage
- Missing timeouts
- Code organization
- Documentation gaps
Low Priority (Nice to Have)
- Style improvements
- Additional tracing
- Better variable names
For each issue, provide:
- Location: File, line number, function
- Issue: Clear description of the problem
- Impact: Why it matters (performance, correctness, maintainability)
- Suggestion: Specific fix with code example
- Priority: Critical, High, Medium, Low
-
Code Examples
For each suggestion, provide:
- Current problematic code
- Suggested improved code
- Explanation of the improvement
-
Summary Statistics
Provide overview:
- Total files reviewed
- Total issues found (by priority)
- Estimated effort to fix
- Overall code health score (if applicable)
Example Report Format
# Tokio Code Review Report
## Summary
- Files reviewed: 15
- Critical issues: 2
- High priority: 5
- Medium priority: 8
- Low priority: 3
## Critical Issues
### 1. Blocking Operation in Async Context
**Location**: `src/handlers/user.rs:45`
**Function**: `process_user`
**Issue**:
Using `std::thread::sleep` in async function blocks the runtime thread.
**Current Code**:
\`\`\`rust
async fn process_user(id: u64) {
std::thread::sleep(Duration::from_secs(1)); // Blocks thread!
// ...
}
\`\`\`
**Suggested Fix**:
\`\`\`rust
async fn process_user(id: u64) {
tokio::time::sleep(Duration::from_secs(1)).await; // Yields control
// ...
}
\`\`\`
**Impact**: This blocks an entire runtime worker thread, preventing other tasks from making progress. Can cause significant performance degradation under load.
## High Priority Issues
### 1. Lock Held Across Await Point
**Location**: `src/state.rs:78`
...
Best Practices Validation
The review should also verify:
- Tracing: Proper use of
#[instrument]and structured logging - Error Types: Appropriate error types with context
- Testing: Async tests with
#[tokio::test] - Documentation: Doc comments on public async functions
- Metrics: Performance-critical paths instrumented
- Configuration: Runtime properly configured
- Dependencies: Using appropriate crate versions
Notes
- Focus on actionable feedback with concrete examples
- Prioritize issues that impact correctness over style
- Provide educational explanations for async concepts
- Suggest resources for learning more about identified issues
- Be constructive and supportive in feedback tone