From: est31 Date: Mon, 10 Oct 2022 19:51:24 +0000 (+0200) Subject: Don't fire the lint if there is a type annotation X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=748169deaa3c57e15e3a84bb90e033dddaa64e03;p=rust.git Don't fire the lint if there is a type annotation Sometimes type annotations are needed for type inferrence to work, or because of coercions. We don't know this, and we also don't want users to possibly repeat the entire pattern. --- diff --git a/clippy_lints/src/manual_let_else.rs b/clippy_lints/src/manual_let_else.rs index 8a915127c3c..521d02db80f 100644 --- a/clippy_lints/src/manual_let_else.rs +++ b/clippy_lints/src/manual_let_else.rs @@ -74,6 +74,7 @@ fn check_stmt(&mut self, cx: &LateContext<'_>, stmt: &'tcx Stmt<'tcx>) { if let StmtKind::Local(local) = stmt.kind; if let Some(init) = local.init; if local.els.is_none(); + if local.ty.is_none(); if init.span.ctxt() == stmt.span.ctxt(); if let Some(if_let_or_match) = IfLetOrMatch::parse(cx, init); then { diff --git a/tests/ui/manual_let_else.rs b/tests/ui/manual_let_else.rs index 9e5df65b74d..9046c0affb5 100644 --- a/tests/ui/manual_let_else.rs +++ b/tests/ui/manual_let_else.rs @@ -197,4 +197,8 @@ macro_rules! create_binding_if_some_nf { // Already a let-else let Some(a) = (if let Some(b) = Some(Some(())) { b } else { return }) else { panic!() }; + + // If a type annotation is present, don't lint as + // expressing the type might be too hard + let v: () = if let Some(v_some) = g() { v_some } else { panic!() }; }