From 99c4a41cd1a9f9ef0ee4f067f0069a23123b949a Mon Sep 17 00:00:00 2001 From: yonip23 Date: Thu, 11 Mar 2021 17:46:41 +0200 Subject: use references in CompletionItem's builder --- crates/ide_completion/src/completions/attribute.rs | 35 +++++++++-------- crates/ide_completion/src/completions/fn_param.rs | 7 ++-- crates/ide_completion/src/completions/keyword.rs | 44 +++++++++++----------- crates/ide_completion/src/completions/mod_.rs | 7 ++-- crates/ide_completion/src/completions/postfix.rs | 1 + crates/ide_completion/src/completions/record.rs | 15 +++----- crates/ide_completion/src/completions/snippet.rs | 25 ++++++------ .../ide_completion/src/completions/trait_impl.rs | 31 ++++++++------- 8 files changed, 86 insertions(+), 79 deletions(-) (limited to 'crates/ide_completion/src/completions') diff --git a/crates/ide_completion/src/completions/attribute.rs b/crates/ide_completion/src/completions/attribute.rs index cb05e85fc..14376b924 100644 --- a/crates/ide_completion/src/completions/attribute.rs +++ b/crates/ide_completion/src/completions/attribute.rs @@ -45,15 +45,15 @@ fn complete_attribute_start(acc: &mut Completions, ctx: &CompletionContext, attr CompletionKind::Attribute, ctx.source_range(), attr_completion.label, - ) - .kind(CompletionItemKind::Attribute); + ); + item.kind(CompletionItemKind::Attribute); if let Some(lookup) = attr_completion.lookup { - item = item.lookup_by(lookup); + item.lookup_by(lookup); } if let Some((snippet, cap)) = attr_completion.snippet.zip(ctx.config.snippet_cap) { - item = item.insert_snippet(cap, snippet); + item.insert_snippet(cap, snippet); } if attribute.kind() == ast::AttrKind::Inner || !attr_completion.prefer_inner { @@ -168,16 +168,20 @@ fn complete_derive(acc: &mut Completions, ctx: &CompletionContext, derive_input: ); let lookup = components.join(", "); let label = components.iter().rev().join(", "); - CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), label) - .lookup_by(lookup) - .kind(CompletionItemKind::Attribute) - .add_to(acc) + let mut builder = + CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), label); + builder.lookup_by(lookup).kind(CompletionItemKind::Attribute); + builder.add_to(acc); } for custom_derive_name in get_derive_names_in_scope(ctx).difference(&existing_derives) { - CompletionItem::new(CompletionKind::Attribute, ctx.source_range(), custom_derive_name) - .kind(CompletionItemKind::Attribute) - .add_to(acc) + let mut builder = CompletionItem::new( + CompletionKind::Attribute, + ctx.source_range(), + custom_derive_name, + ); + builder.kind(CompletionItemKind::Attribute); + builder.add_to(acc); } } } @@ -193,14 +197,13 @@ fn complete_lint( .into_iter() .filter(|completion| !existing_lints.contains(completion.label)) { - CompletionItem::new( + let mut builder = CompletionItem::new( CompletionKind::Attribute, ctx.source_range(), lint_completion.label, - ) - .kind(CompletionItemKind::Attribute) - .detail(lint_completion.description) - .add_to(acc) + ); + builder.kind(CompletionItemKind::Attribute).detail(lint_completion.description); + builder.add_to(acc) } } } diff --git a/crates/ide_completion/src/completions/fn_param.rs b/crates/ide_completion/src/completions/fn_param.rs index 1bcc8727f..9600a049a 100644 --- a/crates/ide_completion/src/completions/fn_param.rs +++ b/crates/ide_completion/src/completions/fn_param.rs @@ -54,10 +54,9 @@ pub(crate) fn complete_fn_param(acc: &mut Completions, ctx: &CompletionContext) } params.into_iter().for_each(|(label, lookup)| { - CompletionItem::new(CompletionKind::Magic, ctx.source_range(), label) - .kind(CompletionItemKind::Binding) - .lookup_by(lookup) - .add_to(acc) + let mut builder = CompletionItem::new(CompletionKind::Magic, ctx.source_range(), label); + builder.kind(CompletionItemKind::Binding).lookup_by(lookup); + builder.add_to(acc) }); } diff --git a/crates/ide_completion/src/completions/keyword.rs b/crates/ide_completion/src/completions/keyword.rs index 80aa9fb06..aa3be712d 100644 --- a/crates/ide_completion/src/completions/keyword.rs +++ b/crates/ide_completion/src/completions/keyword.rs @@ -12,21 +12,21 @@ pub(crate) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC if ctx.use_item_syntax.is_some() { if ctx.path_qual.is_none() { - CompletionItem::new(CompletionKind::Keyword, source_range, "crate::") - .kind(CompletionItemKind::Keyword) - .insert_text("crate::") - .add_to(acc); + let mut crate_builder = + CompletionItem::new(CompletionKind::Keyword, source_range, "crate::"); + crate_builder.kind(CompletionItemKind::Keyword).insert_text("crate::"); + crate_builder.add_to(acc); } - CompletionItem::new(CompletionKind::Keyword, source_range, "self") - .kind(CompletionItemKind::Keyword) - .add_to(acc); + let mut self_builder = CompletionItem::new(CompletionKind::Keyword, source_range, "self"); + self_builder.kind(CompletionItemKind::Keyword); + self_builder.add_to(acc); if iter::successors(ctx.path_qual.clone(), |p| p.qualifier()) .all(|p| p.segment().and_then(|s| s.super_token()).is_some()) { - CompletionItem::new(CompletionKind::Keyword, source_range, "super::") - .kind(CompletionItemKind::Keyword) - .insert_text("super::") - .add_to(acc); + let mut super_builder = + CompletionItem::new(CompletionKind::Keyword, source_range, "super::"); + super_builder.kind(CompletionItemKind::Keyword).insert_text("super::"); + super_builder.add_to(acc); } } @@ -34,11 +34,10 @@ pub(crate) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC if let Some(receiver) = &ctx.dot_receiver { if let Some(ty) = ctx.sema.type_of_expr(receiver) { if ty.impls_future(ctx.db) { - CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), "await") - .kind(CompletionItemKind::Keyword) - .detail("expr.await") - .insert_text("await") - .add_to(acc); + let mut builder = + CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), "await"); + builder.kind(CompletionItemKind::Keyword).detail("expr.await").insert_text("await"); + builder.add_to(acc); } }; } @@ -165,9 +164,10 @@ pub(crate) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte } fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet: &str) { - let builder = CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw) - .kind(CompletionItemKind::Keyword); - let builder = match ctx.config.snippet_cap { + let mut builder = CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw); + builder.kind(CompletionItemKind::Keyword); + + match ctx.config.snippet_cap { Some(cap) => { let tmp; let snippet = if snippet.ends_with('}') && ctx.incomplete_let { @@ -177,9 +177,11 @@ fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet } else { snippet }; - builder.insert_snippet(cap, snippet) + builder.insert_snippet(cap, snippet); + } + None => { + builder.insert_text(if snippet.contains('$') { kw } else { snippet }); } - None => builder.insert_text(if snippet.contains('$') { kw } else { snippet }), }; acc.add(builder.build()); } diff --git a/crates/ide_completion/src/completions/mod_.rs b/crates/ide_completion/src/completions/mod_.rs index 352fc7c77..fc4ac7a0d 100644 --- a/crates/ide_completion/src/completions/mod_.rs +++ b/crates/ide_completion/src/completions/mod_.rs @@ -80,9 +80,10 @@ pub(crate) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Op if mod_under_caret.semicolon_token().is_none() { label.push(';'); } - CompletionItem::new(CompletionKind::Magic, ctx.source_range(), &label) - .kind(SymbolKind::Module) - .add_to(acc) + let mut builder = + CompletionItem::new(CompletionKind::Magic, ctx.source_range(), &label); + builder.kind(SymbolKind::Module); + builder.add_to(acc) }); Some(()) diff --git a/crates/ide_completion/src/completions/postfix.rs b/crates/ide_completion/src/completions/postfix.rs index d45ad7944..8551e0168 100644 --- a/crates/ide_completion/src/completions/postfix.rs +++ b/crates/ide_completion/src/completions/postfix.rs @@ -301,6 +301,7 @@ fn postfix_snippet( .detail(detail) .kind(CompletionItemKind::Snippet) .snippet_edit(cap, edit) + .clone() } #[cfg(test)] diff --git a/crates/ide_completion/src/completions/record.rs b/crates/ide_completion/src/completions/record.rs index 0a7927eb8..b9af09698 100644 --- a/crates/ide_completion/src/completions/record.rs +++ b/crates/ide_completion/src/completions/record.rs @@ -22,16 +22,13 @@ pub(crate) fn complete_record(acc: &mut Completions, ctx: &CompletionContext) -> let completion_text = completion_text .strip_prefix(ctx.token.to_string().as_str()) .unwrap_or(completion_text); - acc.add( - CompletionItem::new( - CompletionKind::Snippet, - ctx.source_range(), - "..Default::default()", - ) - .insert_text(completion_text) - .kind(SymbolKind::Field) - .build(), + let mut builder = CompletionItem::new( + CompletionKind::Snippet, + ctx.source_range(), + "..Default::default()", ); + builder.insert_text(completion_text).kind(SymbolKind::Field); + acc.add(builder.build()); } missing_fields diff --git a/crates/ide_completion/src/completions/snippet.rs b/crates/ide_completion/src/completions/snippet.rs index df17a15c5..a4d18cecd 100644 --- a/crates/ide_completion/src/completions/snippet.rs +++ b/crates/ide_completion/src/completions/snippet.rs @@ -8,9 +8,8 @@ use crate::{ }; fn snippet(ctx: &CompletionContext, cap: SnippetCap, label: &str, snippet: &str) -> Builder { - CompletionItem::new(CompletionKind::Snippet, ctx.source_range(), label) - .insert_snippet(cap, snippet) - .kind(CompletionItemKind::Snippet) + let mut builder = CompletionItem::new(CompletionKind::Snippet, ctx.source_range(), label); + builder.insert_snippet(cap, snippet).kind(CompletionItemKind::Snippet).clone() } pub(crate) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionContext) { @@ -35,7 +34,7 @@ pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionConte None => return, }; - snippet( + let mut test_module_builder = snippet( ctx, cap, "tmod (Test module)", @@ -49,11 +48,11 @@ mod tests { $0 } }", - ) - .lookup_by("tmod") - .add_to(acc); + ); + test_module_builder.lookup_by("tmod"); + test_module_builder.add_to(acc); - snippet( + let mut test_function_builder = snippet( ctx, cap, "tfn (Test function)", @@ -62,11 +61,13 @@ mod tests { fn ${1:feature}() { $0 }", - ) - .lookup_by("tfn") - .add_to(acc); + ); + test_function_builder.lookup_by("tfn"); + test_function_builder.add_to(acc); - snippet(ctx, cap, "macro_rules", "macro_rules! $1 {\n\t($2) => {\n\t\t$0\n\t};\n}").add_to(acc); + let macro_rules_builder = + snippet(ctx, cap, "macro_rules", "macro_rules! $1 {\n\t($2) => {\n\t\t$0\n\t};\n}"); + macro_rules_builder.add_to(acc); } #[cfg(test)] diff --git a/crates/ide_completion/src/completions/trait_impl.rs b/crates/ide_completion/src/completions/trait_impl.rs index b999540b8..031f42d4a 100644 --- a/crates/ide_completion/src/completions/trait_impl.rs +++ b/crates/ide_completion/src/completions/trait_impl.rs @@ -145,9 +145,8 @@ fn add_function_impl( format!("fn {}(..)", fn_name) }; - let builder = CompletionItem::new(CompletionKind::Magic, ctx.source_range(), label) - .lookup_by(fn_name) - .set_documentation(func.docs(ctx.db)); + let mut builder = CompletionItem::new(CompletionKind::Magic, ctx.source_range(), label); + builder.lookup_by(fn_name).set_documentation(func.docs(ctx.db)); let completion_kind = if func.self_param(ctx.db).is_some() { CompletionItemKind::Method @@ -161,15 +160,15 @@ fn add_function_impl( match ctx.config.snippet_cap { Some(cap) => { let snippet = format!("{} {{\n $0\n}}", function_decl); - builder.snippet_edit(cap, TextEdit::replace(range, snippet)) + builder.snippet_edit(cap, TextEdit::replace(range, snippet)); } None => { let header = format!("{} {{", function_decl); - builder.text_edit(TextEdit::replace(range, header)) + builder.text_edit(TextEdit::replace(range, header)); } - } - .kind(completion_kind) - .add_to(acc); + }; + builder.kind(completion_kind); + builder.add_to(acc); } } @@ -185,12 +184,14 @@ fn add_type_alias_impl( let range = TextRange::new(type_def_node.text_range().start(), ctx.source_range().end()); - CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) + let mut builder = + CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()); + builder .text_edit(TextEdit::replace(range, snippet)) .lookup_by(alias_name) .kind(SymbolKind::TypeAlias) - .set_documentation(type_alias.docs(ctx.db)) - .add_to(acc); + .set_documentation(type_alias.docs(ctx.db)); + builder.add_to(acc); } fn add_const_impl( @@ -208,12 +209,14 @@ fn add_const_impl( let range = TextRange::new(const_def_node.text_range().start(), ctx.source_range().end()); - CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) + let mut builder = + CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()); + builder .text_edit(TextEdit::replace(range, snippet)) .lookup_by(const_name) .kind(SymbolKind::Const) - .set_documentation(const_.docs(ctx.db)) - .add_to(acc); + .set_documentation(const_.docs(ctx.db)); + builder.add_to(acc); } } } -- cgit v1.2.3