Menu

1 / 2

7 CLAUDE.md Rules That Make AI Write Idiomatic Rust (Not C++ in Disguise)

DEV Community·Olivia Craft·6 months ago
#Jk7Ugt7R
#rule#rust#ai#productivity#error
Reading 0:00
15s threshold

If you've ever asked Claude Code, Cursor, or Copilot to "add a function" to a Rust crate, you know the output: borrowed &str everywhere with explicit lifetimes leaking into public signatures, .unwrap() on every Result , a std::sync::Mutex held across an .await , and a panic!() instead of an error path. It compiles. It also looks like C++ wearing a Rust hat.

The cause is the training data. Most Rust code AI has seen is example snippets — the parts that elide error handling, ignore async correctness, and use unwrap() because brevity beats robustness in a blog post. Production Rust looks nothing like this.

Drop a CLAUDE.md at the crate root and the AI reads it before every task. Here are the seven rules I find most load-bearing for real Rust work.

Rule 1: Owned types in public APIs, borrows inside implementations

pub fn parse(input: &'a str) -> Result<Foo<'a>, Error> looks clever and forces every caller to think about lifetimes. Prefer pub fn parse(input: &str) -> Result<Foo, Error> returning owned data.…

Continue reading — create a free account

Join HashtagPLUS to read full articles, follow hashtags, vote, and join the conversation.