Zum Hauptinhalt springen
ai-slop/rust-non-test-unwrapmanuelle Behebung

Unwrap außerhalb von Tests.

`.unwrap()` auf einer `Option` oder einem `Result` in produktivem Rust-Code. Aus einem `None` oder `Err` wird ein Panic für den Aufrufer.

Beanstandete und saubere Form.

Jedes Beispiel zeigt genau die Codeform, nach der die Regel sucht, und dann die kleinste Version, die die Absicht bewahrt, ohne Risiken zu verstecken oder Rauschen hinzuzufügen.

rust-non-test-unwrap.rs
✗ Beanstandet
pub fn load_settings(path: &Path) -> Settings {
    let raw = fs::read_to_string(path).unwrap();
    toml::from_str(&raw).unwrap()
}
Warum das anschlägt

Deterministischer Zeilenabgleich: beanstandet `.unwrap()` in Rust-Dateien außerhalb von Tests, außerhalb von `#[test]`-, `#[tokio::test]`- und `#[cfg(test)]`-Blöcken und außerhalb von Blockkommentaren.

rust-non-test-unwrap.rs
✓ Sauber
pub fn load_settings(path: &Path) -> Result<Settings, SettingsError> {
    let raw = fs::read_to_string(path)?;
    let settings = toml::from_str(&raw)?;
    Ok(settings)
}
Was sich geändert hat

Reich den Fehler mit `?` weiter, matche die Variante, die dich interessiert, oder nutze `.expect("...")` mit einer Meldung, die die Invariante benennt.

Agenten nutzen `.unwrap()`, um schnell am Type-Checker vorbeizukommen, wie sie es in einem Test täten, und kümmern sich nie mehr um den Fehlerfall.

Wie diese Regel begründet ist.

Regel-ID

ai-slop/rust-non-test-unwrap

Prüfende Engine

ai-slop

Erkennungsstrategie

Deterministischer Zeilenabgleich: beanstandet `.unwrap()` in Rust-Dateien außerhalb von Tests, außerhalb von `#[test]`-, `#[tokio::test]`- und `#[cfg(test)]`-Blöcken und außerhalb von Blockkommentaren.

Legitimer Code, der NICHT beanstandet wird

`.expect("...")`, `write!`/`writeln!(...).unwrap()`, Unwraps mit einem `//`-Kommentar in den zwei Zeilen darüber, Testdateien und Test-Crates, `build.rs` sowie `examples/` oder `benches/` werden nicht beanstandet.

Belege

Teil von aislops Rust-Regelsatz, gewertet in der Strict-Stufe. v0.9.3 beanstandet keine Unwraps in Beispielen innerhalb von `/*! ... */`-Doc-Kommentaren mehr.