--- description: Check code for opportunities to use modern Rust patterns --- You are analyzing Rust code to identify opportunities for using modern patterns from Rust 2024 Edition. ## Your Task Scan the codebase for patterns that could be modernized and provide a detailed report with recommendations. ## Steps 1. **Check Edition and Version** First, verify the project setup: Read Cargo.toml: ``` Current Configuration: - Edition: [edition] - Rust version: [rust-version if set] - Toolchain: [rustc --version] ``` If not on 2024: ``` â„šī¸ Project is using edition [current]. Consider upgrading to 2024 Edition to use latest features. Use `/rust-upgrade-edition` to upgrade. ``` 2. **Scan for Nested If-Let Patterns** Search for nested if-let that could use let chains: Pattern to find: ```rust if let Pattern1 = expr1 { if let Pattern2 = expr2 { // Could be flattened with let chains } } ``` Use Grep to search for: - `if let` followed by another `if let` in same scope - Multiple levels of nesting Report: ``` ## Let Chain Opportunities (5): ### High Priority (deep nesting): - src/user.rs:42 - 4 levels of nested if-let Current: if let -> if let -> if let -> if let Suggestion: Use let chains to flatten - src/api.rs:88 - 3 levels of nested if-let Current: Multiple Option unwrapping Suggestion: Combine with && in single if ### Medium Priority: - src/validate.rs:15 - 2 levels with boolean check - src/handler.rs:102 - if let with additional condition ``` 3. **Scan for Manual Async Closures** Look for patterns like: ```rust .map(|x| { let x = x.clone(); async move { ... } }) ``` Report: ``` ## Async Closure Opportunities (3): - src/tasks.rs:28 Current: Manual async move wrapper Suggestion: Use async |x| { ... } syntax - src/jobs.rs:45 Current: Clone before async move Suggestion: Async closure can borrow directly ``` 4. **Scan for Const Function Opportunities** Look for functions that: - Contain only const-safe operations - Are used in const contexts - Could be evaluated at compile time Patterns to check: - Pure computation functions - Functions with no I/O or allocations - Hash functions, calculations Report: ``` ## Const Function Opportunities (4): - src/config.rs:10 - calculate_buffer_size Current: fn calculate_buffer_size(n: usize) -> usize Suggestion: Add const keyword for compile-time eval Impact: Can be used in const/static initialization - src/hash.rs:25 - hash_string Current: Regular function Suggestion: Make const fn for compile-time hashing ``` 5. **Scan for Manual Iterator Implementations** Look for: - struct implementing Iterator trait - Complex next() implementations - State machine patterns Report: ``` ## Gen Block Opportunities (2): - src/iter.rs:15 - FibonacciIterator Current: 25 lines of Iterator impl Suggestion: Replace with 8-line gen block Benefit: Simpler, more maintainable - src/tree.rs:48 - TreeTraversal Current: Complex state machine Suggestion: Recursive gen block ``` 6. **Scan for Match Pattern Improvements** Look for: - Match on references with moves - Unclear binding modes - Patterns that would benefit from 2024 ergonomics Report: ``` ## Match Ergonomics Opportunities (3): - src/process.rs:65 Current: Match with clone to avoid move Suggestion: Use 2024 ergonomics for in-place modify - src/validate.rs:42 Current: Explicit ref patterns Suggestion: Can be simplified with 2024 ergonomics ``` 7. **Scan for While-Let Chains** Look for while-let with additional conditions: Pattern: ```rust while let Some(item) = iterator.next() { if condition { // Could use while let with && } } ``` Report: ``` ## While-Let Chain Opportunities (2): - src/parser.rs:35 Current: while let with nested if Suggestion: Combine with && condition ``` 8. **Scan for Never Type Opportunities** Look for functions that never return: - Functions ending with process::exit - Functions that always panic - Infinite loops without return Report: ``` ## Never Type (!) Opportunities (3): - src/error.rs:25 - fatal_error Current: fn fatal_error(msg: &str) Suggestion: Change to fn fatal_error(msg: &str) -> ! Benefit: Compiler knows function doesn't return ``` 9. **Check for Outdated Idioms** Look for patterns that are outdated: - try! macro instead of ? - match instead of if let - Unnecessary type annotations - Old-style error handling Report: ``` ## Outdated Idioms (2): - src/legacy.rs:15 Current: try!(expression) Suggestion: Use ? operator - src/utils.rs:88 Current: match on Result with Ok/Err Suggestion: Use if let Ok(...) for simpler case ``` 10. **Generate Comprehensive Report** ``` ✅ Pattern Check Complete ## Summary: 📊 Total Opportunities: 19 ### By Category: - Let Chains: 5 opportunities (15 nested levels total) - Async Closures: 3 opportunities - Const Functions: 4 opportunities - Gen Blocks: 2 opportunities - Match Ergonomics: 3 opportunities - While-Let Chains: 2 opportunities ### Priority: - High: 7 (deep nesting, clarity improvements) - Medium: 8 (performance, modern idioms) - Low: 4 (minor improvements) ## Detailed Findings: ### 1. Let Chains (High Priority) **src/user.rs:42** (4 levels nested) ```rust // Current if let Some(user) = get_user(id) { if let Some(profile) = user.profile { if profile.is_active { if let Some(email) = profile.email { send_email(&email); } } } } // Suggested if let Some(user) = get_user(id) && let Some(profile) = user.profile && profile.is_active && let Some(email) = profile.email { send_email(&email); } ``` **Impact:** Much clearer, reduces nesting from 4 to 1 level ### 2. Const Functions (Medium Priority) **src/config.rs:10** ```rust // Current fn calculate_buffer_size(items: usize) -> usize { items * std::mem::size_of::() } // Suggested const fn calculate_buffer_size(items: usize) -> usize { items * std::mem::size_of::() } // Enables const BUFFER_SIZE: usize = calculate_buffer_size(1000); static BUFFER: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE]; ``` **Impact:** Compile-time computation, better performance ### 3. Gen Blocks (Medium Priority) **src/iter.rs:15** ```rust // Current: 25 lines struct FibIterator { a: u64, b: u64 } impl Iterator for FibIterator { type Item = u64; fn next(&mut self) -> Option { let current = self.a; self.a = self.b; self.b = current + self.b; Some(current) } } // Suggested: 8 lines fn fibonacci() -> impl Iterator { gen { let (mut a, mut b) = (0, 1); loop { yield a; (a, b) = (b, a + b); } } } ``` **Impact:** 60% less code, more maintainable ## Edition Status: Current: edition = "2021" âš ī¸ To use these features, upgrade to edition = "2024" Use: `/rust-upgrade-edition` ## Recommendations: 1. **Immediate:** Upgrade to Rust 2024 Edition 2. **High Priority:** Apply let chain modernizations (5 locations) 3. **Medium Priority:** Convert to const functions (4 locations) 4. **Medium Priority:** Simplify with gen blocks (2 locations) 5. **Consider:** Async closure updates when appropriate ## Estimated Impact: - **Readability:** +40% (reduced nesting) - **Code reduction:** -15% (simpler patterns) - **Performance:** +5% (compile-time computation) - **Maintainability:** +30% (modern idioms) ## Next Steps: ```bash # 1. Upgrade edition /rust-upgrade-edition # 2. Apply modernizations /rust-modernize # 3. Run tests cargo test ``` ## Need Help? - Ask `rust-modern-expert` for detailed guidance - Use `/rust-modernize` to apply changes automatically - See examples in CONTEXT.md ``` ## Search Patterns Use Grep to find these patterns: ### Nested If-Let ``` Pattern: if let.*\{[^}]*if let ``` ### Manual Async Closures ``` Pattern: async move ``` ### Non-const Functions ``` Pattern: fn .+\(.*\) -> (usize|i32|u32|bool) Filter out those already const ``` ### Manual Iterators ``` Pattern: impl Iterator for ``` ## Scoring System Assign priority based on: **High Priority:** - 3+ levels of nesting - Functions in hot paths - Widely used patterns **Medium Priority:** - 2 levels of nesting - Const-eligible functions - Iterator simplifications **Low Priority:** - Style improvements - Minor simplifications ## Important Notes - Only suggest changes compatible with current edition - Note if edition upgrade is required - Estimate impact (readability, performance, maintainability) - Prioritize changes by value - Provide before/after examples ## After Completion Ask the user: 1. Do you want to apply these modernizations? 2. Should we start with high priority items? 3. Do you want to upgrade the edition first? 4. Would you like detailed explanations for any items?