Agent skill
let-chains-advisor
Identifies deeply nested if-let expressions and suggests let chains for cleaner control flow. Activates when users write nested conditionals with pattern matching.
Install this agent skill to your Project
npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/emillindfors/let-chains-advisor
SKILL.md
Let Chains Advisor Skill
You are an expert at using let chains (Rust 2024) to simplify control flow. When you detect nested if-let patterns, proactively suggest let chain refactorings.
When to Activate
Activate when you notice:
- Nested if-let expressions (3+ levels)
- Multiple pattern matches with conditions
- Complex guard clauses
- Difficult-to-read control flow
Let Chain Patterns
Pattern 1: Multiple Option Unwrapping
Before:
fn get_user_email(id: &str) -> Option<String> {
if let Some(user) = database.find_user(id) {
if let Some(profile) = user.profile {
if let Some(email) = profile.email {
return Some(email);
}
}
}
None
}
After:
fn get_user_email(id: &str) -> Option<String> {
if let Some(user) = database.find_user(id)
&& let Some(profile) = user.profile
&& let Some(email) = profile.email
{
Some(email)
} else {
None
}
}
Pattern 2: Pattern Matching with Conditions
Before:
fn process(data: &Option<Data>) -> bool {
if let Some(data) = data {
if data.is_valid() {
if data.size() > 100 {
process_data(data);
return true;
}
}
}
false
}
After:
fn process(data: &Option<Data>) -> bool {
if let Some(data) = data
&& data.is_valid()
&& data.size() > 100
{
process_data(data);
true
} else {
false
}
}
Pattern 3: Multiple Result Checks
Before:
fn load_config() -> Result<Config, Error> {
if let Ok(path) = get_config_path() {
if let Ok(content) = std::fs::read_to_string(path) {
if let Ok(config) = toml::from_str(&content) {
return Ok(config);
}
}
}
Err(Error::ConfigNotFound)
}
After:
fn load_config() -> Result<Config, Error> {
if let Ok(path) = get_config_path()
&& let Ok(content) = std::fs::read_to_string(path)
&& let Ok(config) = toml::from_str(&content)
{
Ok(config)
} else {
Err(Error::ConfigNotFound)
}
}
Pattern 4: While Loops
Before:
while let Some(item) = iterator.next() {
if item.is_valid() {
if let Ok(processed) = process_item(item) {
results.push(processed);
}
}
}
After:
while let Some(item) = iterator.next()
&& item.is_valid()
&& let Ok(processed) = process_item(item)
{
results.push(processed);
}
Requirements
- Rust Version: 1.88+
- Edition: 2024
- Cargo.toml:
[package]
edition = "2024"
rust-version = "1.88"
Your Approach
When you see nested patterns:
- Count nesting levels (3+ suggests let chains)
- Check if all branches return/continue
- Suggest let chain refactoring
- Verify Rust version compatibility
Proactively suggest let chains for cleaner, more readable code.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
perigon-backend
Perigon ASP.NET Core + EF Core + Aspire conventions
perigon-agent
Pointers for Copilot/agents to apply Perigon conventions
perigon-angular
Angular 21+ standalone/Material/signal conventions for Perigon WebApp
fastapi-mastery
Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.
context7-efficient
Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.
browser-use
Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.
Didn't find tool you were looking for?