Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22750 from ChayimFriedman2/fix-clippy
internal: Fix 1.97.0 Clippy
22 files changed, 57 insertions, 76 deletions
diff --git a/crates/hir-def/src/expr_store/lower.rs b/crates/hir-def/src/expr_store/lower.rs index 08c1dc5f3d..5c81ec7ece 100644 --- a/crates/hir-def/src/expr_store/lower.rs +++ b/crates/hir-def/src/expr_store/lower.rs @@ -2731,7 +2731,7 @@ impl<'db> ExprCollector<'db> { pats.push(self.collect_pat(first, binding_list)); binding_list.reject_new = true; for rest in it { - for (_, it) in binding_list.is_used.iter_mut() { + for it in binding_list.is_used.values_mut() { *it = false; } pats.push(self.collect_pat(rest, binding_list)); diff --git a/crates/hir-def/src/item_tree/lower.rs b/crates/hir-def/src/item_tree/lower.rs index 03c7ebd693..6f916c83ef 100644 --- a/crates/hir-def/src/item_tree/lower.rs +++ b/crates/hir-def/src/item_tree/lower.rs @@ -397,7 +397,10 @@ impl UseTreeLowering<'_> { Some(path) => { match ModPath::from_src(self.db, path, span_for_range) { Some(it) => Some(it), - None => return None, // FIXME: report errors somewhere + None => { + // FIXME: report errors somewhere + return None; + } } } }; diff --git a/crates/hir-ty/src/autoderef.rs b/crates/hir-ty/src/autoderef.rs index a8ed4126ab..ea0881923c 100644 --- a/crates/hir-ty/src/autoderef.rs +++ b/crates/hir-ty/src/autoderef.rs @@ -207,11 +207,10 @@ where } else { (AutoderefKind::Builtin, ty) } - } else if let Some(ty) = self.overloaded_deref_ty(self.state.cur_ty) { + } else { + let ty = self.overloaded_deref_ty(self.state.cur_ty)?; // The overloaded deref check already normalizes the pointee type. (AutoderefKind::Overloaded, ty) - } else { - return None; }; self.state.steps.push(self.state.cur_ty, kind); diff --git a/crates/hir-ty/src/drop.rs b/crates/hir-ty/src/drop.rs index 08860e1e45..0a4d016c6a 100644 --- a/crates/hir-ty/src/drop.rs +++ b/crates/hir-ty/src/drop.rs @@ -28,10 +28,7 @@ pub fn destructor(db: &dyn HirDatabase, adt: AdtId) -> Option<ImplId> { let interner = DbInterner::new_with(db, module.krate(db)); let drop_trait = interner.lang_items().Drop?; let impls = match module.block(db) { - Some(block) => match TraitImpls::for_block(db, block) { - Some(it) => &**it, - None => return None, - }, + Some(block) => TraitImpls::for_block(db, block)?, None => TraitImpls::for_crate(db, module.krate(db)), }; impls.for_trait_and_self_ty(drop_trait, &SimplifiedType::Adt(adt.into())).0.first().copied() diff --git a/crates/hir-ty/src/method_resolution.rs b/crates/hir-ty/src/method_resolution.rs index b68f664d51..2772663ec9 100644 --- a/crates/hir-ty/src/method_resolution.rs +++ b/crates/hir-ty/src/method_resolution.rs @@ -678,7 +678,7 @@ impl TraitImpls { Arc::new(result) } - #[salsa::tracked(returns(ref))] + #[salsa::tracked(returns(as_deref))] pub fn for_block(db: &dyn HirDatabase, block: BlockId) -> Option<Box<Self>> { let _p = tracing::info_span!("inherent_impls_in_block_query").entered(); @@ -687,7 +687,7 @@ impl TraitImpls { if result.map.is_empty() { None } else { Some(Box::new(result)) } } - #[salsa::tracked(returns(ref))] + #[salsa::tracked(returns(deref))] pub fn for_crate_and_deps(db: &dyn HirDatabase, krate: Crate) -> Box<[Arc<Self>]> { krate.transitive_deps(db).iter().map(|&dep| Self::for_crate(db, dep).clone()).collect() } @@ -830,7 +830,7 @@ impl TraitImpls { for_each: &mut dyn FnMut(&TraitImpls), ) { let blocks = std::iter::successors(block, |block| block.loc(db).module.block(db)); - blocks.filter_map(|block| Self::for_block(db, block).as_deref()).for_each(&mut *for_each); + blocks.filter_map(|block| Self::for_block(db, block)).for_each(&mut *for_each); Self::for_crate_and_deps(db, krate).iter().map(|it| &**it).for_each(for_each); } @@ -858,11 +858,11 @@ impl TraitImpls { .take_while(move |&block| { other_block.is_none_or(|other_block| other_block != block) }) - .filter_map(move |block| TraitImpls::for_block(db, block).as_deref()) + .filter_map(move |block| TraitImpls::for_block(db, block)) }; if trait_block == type_block { blocks_iter(trait_block) - .filter_map(|block| TraitImpls::for_block(db, block).as_deref()) + .filter_map(|block| TraitImpls::for_block(db, block)) .for_each(for_each); } else { for_each_block(trait_block, type_block).for_each(&mut *for_each); diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 998c1b8b91..96fb65882c 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -4715,7 +4715,7 @@ impl Impl { &mut |impls| extend_with_impls(Either::Left(impls.for_self_ty(&simplified_ty))), ); iter::successors(module.block(db), |block| block.loc(db).module.block(db)) - .filter_map(|block| TraitImpls::for_block(db, block).as_deref()) + .filter_map(|block| TraitImpls::for_block(db, block)) .for_each(|impls| impls.for_self_ty(&simplified_ty, &mut extend_with_impls)); for &krate in &*all_crates(db) { TraitImpls::for_crate(db, krate) diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs index 9e4d825ab2..21830f9d0d 100644 --- a/crates/hir/src/source_analyzer.rs +++ b/crates/hir/src/source_analyzer.rs @@ -1427,11 +1427,10 @@ impl<'db> SourceAnalyzer<'db> { let ty = if let Some(expr) = ast::Expr::cast(parent.clone()) { let expr_id = self.expr_id(expr)?; self.infer()?.type_of_expr_or_pat(expr_id)? - } else if let Some(pat) = ast::Pat::cast(parent) { + } else { + let pat = ast::Pat::cast(parent)?; let pat_id = self.pat_id(&pat)?; self.infer()?.expr_or_pat_ty(pat_id) - } else { - return None; }; let (subst, expected_resolution) = match ty.kind() { TyKind::Adt(adt_def, subst) => { diff --git a/crates/ide-assists/src/handlers/add_missing_match_arms.rs b/crates/ide-assists/src/handlers/add_missing_match_arms.rs index 632fe0d72c..8e39cfc49c 100644 --- a/crates/ide-assists/src/handlers/add_missing_match_arms.rs +++ b/crates/ide-assists/src/handlers/add_missing_match_arms.rs @@ -573,7 +573,7 @@ fn resolve_tuple_of_enum_def( }) }) .collect::<Option<Vec<ExtendedEnum>>>() - .and_then(|list| if list.is_empty() { None } else { Some(list) }) + .filter(|list| !list.is_empty()) } fn resolve_array_of_enum_def( diff --git a/crates/ide-assists/src/handlers/change_visibility.rs b/crates/ide-assists/src/handlers/change_visibility.rs index f17197a750..18d7faeb2b 100644 --- a/crates/ide-assists/src/handlers/change_visibility.rs +++ b/crates/ide-assists/src/handlers/change_visibility.rs @@ -67,14 +67,13 @@ fn add_vis(acc: &mut Assists, ctx: &AssistContext<'_, '_>) -> Option<()> { } check_is_not_variant(&field)?; (vis_offset(field.syntax()), field_name.syntax().text_range()) - } else if let Some(field) = ctx.find_node_at_offset::<ast::TupleField>() { + } else { + let field = ctx.find_node_at_offset::<ast::TupleField>()?; if field.visibility().is_some() { return None; } check_is_not_variant(&field)?; (vis_offset(field.syntax()), field.syntax().text_range()) - } else { - return None; }; acc.add( diff --git a/crates/ide-assists/src/handlers/extract_variable.rs b/crates/ide-assists/src/handlers/extract_variable.rs index 86dbf20fac..0bd9d1a23a 100644 --- a/crates/ide-assists/src/handlers/extract_variable.rs +++ b/crates/ide-assists/src/handlers/extract_variable.rs @@ -72,13 +72,11 @@ pub(crate) fn extract_variable(acc: &mut Assists, ctx: &AssistContext<'_, '_>) - let node = if ctx.has_empty_selection() { if let Some(t) = ctx.token_at_offset().find(|it| it.kind() == T![;]) { t.parent().and_then(ast::ExprStmt::cast)?.syntax().clone() - } else if let Some(expr) = ancestors_at_offset(ctx.source_file().syntax(), ctx.offset()) - .next() - .and_then(ast::Expr::cast) - { - expr.syntax().ancestors().find_map(valid_target_expr(ctx))?.syntax().clone() } else { - return None; + let expr = ancestors_at_offset(ctx.source_file().syntax(), ctx.offset()) + .next() + .and_then(ast::Expr::cast)?; + expr.syntax().ancestors().find_map(valid_target_expr(ctx))?.syntax().clone() } } else { match ctx.covering_element() { diff --git a/crates/ide-assists/src/handlers/generate_enum_is_method.rs b/crates/ide-assists/src/handlers/generate_enum_is_method.rs index 867eaf4c29..53e77b4947 100644 --- a/crates/ide-assists/src/handlers/generate_enum_is_method.rs +++ b/crates/ide-assists/src/handlers/generate_enum_is_method.rs @@ -141,7 +141,7 @@ impl Method { }; let variant_name = variant.name()?; - let fn_name = format!("is_{}", &to_lower_snake_case(&variant_name.text())); + let fn_name = format!("is_{}", to_lower_snake_case(&variant_name.text())); Some(Method { pattern_suffix, fn_name, variant_name }) } } diff --git a/crates/ide-assists/src/handlers/generate_enum_projection_method.rs b/crates/ide-assists/src/handlers/generate_enum_projection_method.rs index 4cdc801ec1..8a194ae02b 100644 --- a/crates/ide-assists/src/handlers/generate_enum_projection_method.rs +++ b/crates/ide-assists/src/handlers/generate_enum_projection_method.rs @@ -219,7 +219,7 @@ impl Method { fn new(variant: &ast::Variant, fn_name_prefix: &str) -> Option<Self> { use itertools::Itertools as _; let variant_name = variant.name()?; - let fn_name = format!("{fn_name_prefix}_{}", &to_lower_snake_case(&variant_name.text())); + let fn_name = format!("{fn_name_prefix}_{}", to_lower_snake_case(&variant_name.text())); match variant.kind() { ast::StructKind::Record(record) => { diff --git a/crates/ide-assists/src/handlers/remove_underscore.rs b/crates/ide-assists/src/handlers/remove_underscore.rs index 1ccdcda52d..1b65e78378 100644 --- a/crates/ide-assists/src/handlers/remove_underscore.rs +++ b/crates/ide-assists/src/handlers/remove_underscore.rs @@ -37,7 +37,8 @@ pub(crate) fn remove_underscore(acc: &mut Assists, ctx: &AssistContext<'_, '_>) _ => return None, }; (text.to_owned(), name_ref.syntax().text_range(), def) - } else if let Some(name_ref) = ctx.find_node_at_offset::<ast::NameRef>() { + } else { + let name_ref = ctx.find_node_at_offset::<ast::NameRef>()?; let text = name_ref.text(); if !text.starts_with('_') { return None; @@ -48,8 +49,6 @@ pub(crate) fn remove_underscore(acc: &mut Assists, ctx: &AssistContext<'_, '_>) _ => return None, }; (text.to_owned(), name_ref.syntax().text_range(), def) - } else { - return None; }; if !def.usages(&ctx.sema).at_least_one() { diff --git a/crates/ide-completion/src/snippet.rs b/crates/ide-completion/src/snippet.rs index 67ca9db230..ee47c84708 100644 --- a/crates/ide-completion/src/snippet.rs +++ b/crates/ide-completion/src/snippet.rs @@ -181,10 +181,7 @@ fn import_edits( }; let mut res = Vec::with_capacity(requires.len()); for import in requires { - match resolve(import) { - Some(first) => res.extend(first), - None => return None, - } + res.extend(resolve(import)?) } Some(res) } diff --git a/crates/ide-db/src/syntax_helpers/suggest_name.rs b/crates/ide-db/src/syntax_helpers/suggest_name.rs index 15920595a8..42bfc7fe4b 100644 --- a/crates/ide-db/src/syntax_helpers/suggest_name.rs +++ b/crates/ide-db/src/syntax_helpers/suggest_name.rs @@ -447,10 +447,9 @@ fn name_of_type<'db>( name } else if let Some((inner_ty, _)) = ty.as_reference() { return name_of_type(&inner_ty, db, edition); - } else if let Some(inner_ty) = ty.as_slice() { - return Some(sequence_name(Some(&inner_ty), db, edition)); } else { - return None; + let inner_ty = ty.as_slice()?; + return Some(sequence_name(Some(&inner_ty), db, edition)); }; normalize(&name, edition) } diff --git a/crates/ide/src/inlay_hints/closing_brace.rs b/crates/ide/src/inlay_hints/closing_brace.rs index 49d7d454df..c6c8806ac9 100644 --- a/crates/ide/src/inlay_hints/closing_brace.rs +++ b/crates/ide/src/inlay_hints/closing_brace.rs @@ -139,7 +139,8 @@ pub(super) fn hints( _ => return None, } } - } else if let Some(mac) = ast::MacroCall::cast(node.clone()) { + } else { + let mac = ast::MacroCall::cast(node.clone())?; let last_token = mac.syntax().last_token()?; if last_token.kind() != T![;] && last_token.kind() != SyntaxKind::R_CURLY { return None; @@ -150,8 +151,6 @@ pub(super) fn hints( format!("{}!", mac.path()?), mac.path().and_then(|it| it.segment()).map(|it| it.syntax().text_range()), ) - } else { - return None; }; if let Some(mut next) = closing_token.next_token() { diff --git a/crates/ide/src/typing.rs b/crates/ide/src/typing.rs index a49a85fe78..b06079d8ac 100644 --- a/crates/ide/src/typing.rs +++ b/crates/ide/src/typing.rs @@ -326,10 +326,8 @@ fn on_dot_typed(file: &SourceFile, offset: TextSize) -> Option<TextEdit> { // Make sure dot is a part of call chain let receiver = if let Some(field_expr) = ast::FieldExpr::cast(parent.clone()) { field_expr.expr()? - } else if let Some(method_call_expr) = ast::MethodCallExpr::cast(parent.clone()) { - method_call_expr.receiver()? } else { - return None; + ast::MethodCallExpr::cast(parent.clone())?.receiver()? }; let receiver_is_multiline = receiver.syntax().text().find_char('\n').is_some(); diff --git a/crates/rust-analyzer/src/flycheck.rs b/crates/rust-analyzer/src/flycheck.rs index 16dd9bee1f..f73ffb24ee 100644 --- a/crates/rust-analyzer/src/flycheck.rs +++ b/crates/rust-analyzer/src/flycheck.rs @@ -494,33 +494,24 @@ impl<'a> Substitutions<'a> { let mut cmd = toolchain::command(&template.program, &template.cwd, extra_env); for arg in &template.args { if let Some(ix) = arg.find(LABEL_INLINE) { - if let Some(label) = self.label { - let mut arg = arg.to_string(); - arg.replace_range(ix..ix + LABEL_INLINE.len(), label); - cmd.arg(arg); - continue; - } else { - return None; - } + let label = self.label?; + let mut arg = arg.to_string(); + arg.replace_range(ix..ix + LABEL_INLINE.len(), label); + cmd.arg(arg); + continue; } if let Some(ix) = arg.find(SAVED_FILE_INLINE) { - if let Some(saved_file) = self.saved_file { - let mut arg = arg.to_string(); - arg.replace_range(ix..ix + SAVED_FILE_INLINE.len(), saved_file); - cmd.arg(arg); - continue; - } else { - return None; - } + let saved_file = self.saved_file?; + let mut arg = arg.to_string(); + arg.replace_range(ix..ix + SAVED_FILE_INLINE.len(), saved_file); + cmd.arg(arg); + continue; } // Legacy syntax: full argument match if arg == SAVED_FILE_PLACEHOLDER_DOLLAR { - if let Some(saved_file) = self.saved_file { - cmd.arg(saved_file); - continue; - } else { - return None; - } + let saved_file = self.saved_file?; + cmd.arg(saved_file); + continue; } cmd.arg(arg); } diff --git a/crates/syntax/src/fuzz.rs b/crates/syntax/src/fuzz.rs index 9b5cd0135e..3c5640f08a 100644 --- a/crates/syntax/src/fuzz.rs +++ b/crates/syntax/src/fuzz.rs @@ -42,7 +42,7 @@ impl CheckReparse { let delete = TextRange::at(delete_start.try_into().unwrap(), delete_len.try_into().unwrap()); let edited_text = - format!("{}{}{}", &text[..delete_start], &insert, &text[delete_start + delete_len..]); + format!("{}{}{}", &text[..delete_start], insert, &text[delete_start + delete_len..]); Some(CheckReparse { text, insert, delete, edited_text }) } diff --git a/crates/syntax/src/lib.rs b/crates/syntax/src/lib.rs index 924e72ee40..ab24ed9231 100644 --- a/crates/syntax/src/lib.rs +++ b/crates/syntax/src/lib.rs @@ -273,8 +273,11 @@ macro_rules! match_ast { $( $( $path:ident )::+ ($it:pat) => $res:expr, )* _ => $catch_all:expr $(,)? }) => {{ - $( if let Some($it) = $($path::)+cast($node.clone()) { $res } else )* - { $catch_all } + #[allow(clippy::question_mark, reason = "if `$catch_all` is `return None` Clippy can mark this")] + { + $( if let Some($it) = $($path::)+cast($node.clone()) { $res } else )* + { $catch_all } + } }}; } diff --git a/lib/lsp-server/examples/minimal_lsp.rs b/lib/lsp-server/examples/minimal_lsp.rs index b7dcef9bfa..9a73f3fb7f 100644 --- a/lib/lsp-server/examples/minimal_lsp.rs +++ b/lib/lsp-server/examples/minimal_lsp.rs @@ -134,7 +134,7 @@ fn main_loop( break; } if let Err(err) = handle_request(&connection, &req, &mut docs) { - log::error!("[lsp] request {} failed: {err}", &req.method); + log::error!("[lsp] request {} failed: {err}", req.method); } } Message::Notification(note) => { diff --git a/xtask/src/codegen/assists_doc_tests.rs b/xtask/src/codegen/assists_doc_tests.rs index dd55d06bd3..c272768acb 100644 --- a/xtask/src/codegen/assists_doc_tests.rs +++ b/xtask/src/codegen/assists_doc_tests.rs @@ -23,7 +23,7 @@ use super::check_doc_test; for assist in assists.iter() { for (idx, section) in assist.sections.iter().enumerate() { let test_id = - if idx == 0 { assist.id.clone() } else { format!("{}_{idx}", &assist.id) }; + if idx == 0 { assist.id.clone() } else { format!("{}_{idx}", assist.id) }; let test = format!( r######" #[test] @@ -35,8 +35,8 @@ r#####" {}"#####) }} "######, - &test_id, - &assist.id, + test_id, + assist.id, reveal_hash_comments(§ion.before), reveal_hash_comments(§ion.after) ); @@ -117,7 +117,7 @@ impl Assist { (doc.chars().next().unwrap().is_ascii_uppercase() && doc.ends_with('.')) || !assist.sections.is_empty(), "\n\n{}: assist docs should be proper sentences, with capitalization and a full stop at the end.\n\n{}\n\n", - &assist.id, + assist.id, doc, ); |