Agent Skills: Rust Core Language

Use when writing or reviewing idiomatic Rust — edition 2024 ownership/borrowing design, or fixing LLM pitfalls (clone tax, unwrap infestation, indexed loops). Not for error-type design (rust-error-handling) or SOLID layout (solid-rust).

UncategorizedID: fusengine/agents/rust-core-language

Install this agent skill to your local

pnpm dlx add-skill https://github.com/Fusengine/claude-plugins/tree/HEAD/plugins/rust-expert/skills/rust-core-language

Skill Files

Browse the full folder contents for rust-core-language.

Download Skill

Loading file tree…

plugins/rust-expert/skills/rust-core-language/SKILL.md

Skill Metadata

Name
rust-core-language
Description
Use when writing or reviewing idiomatic Rust — edition 2024 ownership/borrowing design, or fixing LLM pitfalls (clone tax, unwrap infestation, indexed loops). Not for error-type design (rust-error-handling) or SOLID layout (solid-rust).
<objective> This skill covers idiomatic Rust for stable 1.98.1, edition 2024: designing function signatures and data flow around ownership and borrowing, and using edition-2024 features (let chains, async closures) correctly.

It also covers correcting the recurring failure modes of machine-generated Rust: the clone tax (cloning to silence the borrow checker instead of redesigning ownership), unwrap/expect infestation, String vs &str misuse, indexed loops instead of iterators, and over-annotated lifetimes the compiler could elide.

Out of scope: error-type design (thiserror vs anyhow) belongs to rust-error-handling; async runtime questions belong to rust-async-concurrency; SOLID/file-layout rules belong to fuse-solid:solid-rust. </objective>

Rust Core Language

Idiomatic Rust for stable 1.98.1, edition 2024. This skill covers what the compiler will not catch for you: ownership design that avoids gratuitous cloning, and the recurring failure modes of machine-generated Rust.

Agent Workflow (MANDATORY)

  1. fuse-ai-pilot:research-expert — confirm the current stable version and any feature's stabilization release before relying on it (versions move fast).
  2. fuse-ai-pilot:explore-codebase — read the crate's edition in Cargo.toml and its existing ownership conventions before adding code.
  3. After writing code, run fuse-ai-pilot:sniper and cargo clippy.

Never state a stabilization version from memory — verify against doc.rust-lang.org/releases.html.

Overview

| Topic | When | |-------|------| | Edition 2024 features | Setting up a crate, using let chains / async closures | | Ownership & borrowing | Designing function signatures and data flow | | LLM pitfalls | Reviewing or repairing generated Rust before merge |

Critical Rules

  1. Borrow before you own. Take &T / &str / &[T] in parameters unless the function must keep the value. See ownership-borrowing.md.
  2. .clone() needs a reason. A clone to silence a borrow-checker error is a design smell (the "clone tax"). Redesign ownership first; clone only when a second owner genuinely exists.
  3. No .unwrap() / .expect() on fallible values without a written justification. Grep for them before merge. Prefer ?, match, or a documented invariant.
  4. Arc::clone(&x) over x.clone() for reference-counted handles — it makes the cheap pointer-copy explicit and distinguishes it from a deep clone.
  5. Iterators over indexed loops. Prefer iter()/map()/filter()/collect() to for i in 0..len { v[i] } — no bounds-check noise, no off-by-one.
  6. Let elision work. Do not annotate lifetimes the compiler can infer.

Verified Facts (source-checked)

  • Edition 2024 stabilized in Rust 1.85.0 (2025-02-20), RFC #3501.
  • Let chains (if let A = x && let B = y && cond) stabilized in 1.88.0 (2025-06-26), edition 2024 only — depends on the if let temporary-scope change.
  • Async closures (async || { .. }) stabilized in 1.85.0.
  • Rust 1.97.0 (2026-07-09): v0 symbol mangling is the default; Cargo build.warnings (CARGO_BUILD_WARNINGS=deny in CI, no build-cache invalidation); linker output is shown via the linker_messages lint (warn by default); integer highest_one/lowest_one/bit_width.
  • Rust 1.98.0 (2026-08-20): {integer}::format_into + core::fmt::NumBuffer (std replacement for itoa); f32/f64 algebraic_* methods; str::strip_circumfix, str::substr_range, String::from_utf16le/from_utf16be.
  • gen blocks are UNSTABLE — feature gate #![feature(gen_blocks)], tracking issue rust-lang/rust#117078, RFC #3513. Do NOT use on stable; the returned iterators are not yet fused and the syntax may still change.

Reference Guide

Concepts

| Topic | Reference | Load when | |-------|-----------|-----------| | Edition 2024 | edition-2024.md | Configuring edition, using let chains / async closures, checking feature stability | | Ownership & borrowing | ownership-borrowing.md | Choosing owned vs borrowed params, designing lifetimes, sharing with Rc/Arc | | LLM pitfalls | llm-pitfalls.md | Reviewing generated Rust for clone tax, unwrap infestation, String/&str, indexed loops |

Templates

| Template | Load when | |----------|-----------| | idiomatic-code.md | Need copy-paste examples of borrow-first signatures, iterator chains, and let chains |

Validation Checklist

  • [ ] Cargo.toml declares edition = "2024" if edition-2024 features are used
  • [ ] No .clone() added purely to satisfy the borrow checker
  • [ ] Every .unwrap()/.expect() has a justifying comment or is provably infallible
  • [ ] Parameters take references unless ownership is required
  • [ ] No lifetime annotations the compiler can elide
  • [ ] cargo clippy clean, sniper passed