diff options
Diffstat (limited to 'crates/ra_ide/src/completion')
-rw-r--r-- | crates/ra_ide/src/completion/complete_trait_impl.rs | 9 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/presentation.rs | 16 |
2 files changed, 12 insertions, 13 deletions
diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs index 90f5b1c25..cf716540f 100644 --- a/crates/ra_ide/src/completion/complete_trait_impl.rs +++ b/crates/ra_ide/src/completion/complete_trait_impl.rs | |||
@@ -43,7 +43,7 @@ use crate::{ | |||
43 | completion::{ | 43 | completion::{ |
44 | CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, Completions, | 44 | CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, Completions, |
45 | }, | 45 | }, |
46 | display::function_signature::FunctionSignature, | 46 | display::function_declaration, |
47 | }; | 47 | }; |
48 | 48 | ||
49 | pub(crate) fn complete_trait_impl(acc: &mut Completions, ctx: &CompletionContext) { | 49 | pub(crate) fn complete_trait_impl(acc: &mut Completions, ctx: &CompletionContext) { |
@@ -125,8 +125,6 @@ fn add_function_impl( | |||
125 | ctx: &CompletionContext, | 125 | ctx: &CompletionContext, |
126 | func: hir::Function, | 126 | func: hir::Function, |
127 | ) { | 127 | ) { |
128 | let signature = FunctionSignature::from_hir(ctx.db, func); | ||
129 | |||
130 | let fn_name = func.name(ctx.db).to_string(); | 128 | let fn_name = func.name(ctx.db).to_string(); |
131 | 129 | ||
132 | let label = if !func.params(ctx.db).is_empty() { | 130 | let label = if !func.params(ctx.db).is_empty() { |
@@ -146,13 +144,14 @@ fn add_function_impl( | |||
146 | }; | 144 | }; |
147 | let range = TextRange::new(fn_def_node.text_range().start(), ctx.source_range().end()); | 145 | let range = TextRange::new(fn_def_node.text_range().start(), ctx.source_range().end()); |
148 | 146 | ||
147 | let function_decl = function_declaration(&func.source(ctx.db).value); | ||
149 | match ctx.config.snippet_cap { | 148 | match ctx.config.snippet_cap { |
150 | Some(cap) => { | 149 | Some(cap) => { |
151 | let snippet = format!("{} {{\n $0\n}}", signature); | 150 | let snippet = format!("{} {{\n $0\n}}", function_decl); |
152 | builder.snippet_edit(cap, TextEdit::replace(range, snippet)) | 151 | builder.snippet_edit(cap, TextEdit::replace(range, snippet)) |
153 | } | 152 | } |
154 | None => { | 153 | None => { |
155 | let header = format!("{} {{", signature); | 154 | let header = format!("{} {{", function_decl); |
156 | builder.text_edit(TextEdit::replace(range, header)) | 155 | builder.text_edit(TextEdit::replace(range, header)) |
157 | } | 156 | } |
158 | } | 157 | } |
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs index e29b82017..c7b74e635 100644 --- a/crates/ra_ide/src/completion/presentation.rs +++ b/crates/ra_ide/src/completion/presentation.rs | |||
@@ -11,7 +11,7 @@ use crate::{ | |||
11 | completion_item::Builder, CompletionContext, CompletionItem, CompletionItemKind, | 11 | completion_item::Builder, CompletionContext, CompletionItem, CompletionItemKind, |
12 | CompletionKind, Completions, | 12 | CompletionKind, Completions, |
13 | }, | 13 | }, |
14 | display::{const_label, function_signature::FunctionSignature, macro_label, type_label}, | 14 | display::{const_label, function_declaration, macro_label, type_label}, |
15 | CompletionScore, RootDatabase, | 15 | CompletionScore, RootDatabase, |
16 | }; | 16 | }; |
17 | 17 | ||
@@ -195,7 +195,6 @@ impl Completions { | |||
195 | 195 | ||
196 | let name = local_name.unwrap_or_else(|| func.name(ctx.db).to_string()); | 196 | let name = local_name.unwrap_or_else(|| func.name(ctx.db).to_string()); |
197 | let ast_node = func.source(ctx.db).value; | 197 | let ast_node = func.source(ctx.db).value; |
198 | let function_signature = FunctionSignature::from(&ast_node); | ||
199 | 198 | ||
200 | let mut builder = | 199 | let mut builder = |
201 | CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.clone()) | 200 | CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.clone()) |
@@ -206,13 +205,14 @@ impl Completions { | |||
206 | }) | 205 | }) |
207 | .set_documentation(func.docs(ctx.db)) | 206 | .set_documentation(func.docs(ctx.db)) |
208 | .set_deprecated(is_deprecated(func, ctx.db)) | 207 | .set_deprecated(is_deprecated(func, ctx.db)) |
209 | .detail(function_signature.to_string()); | 208 | .detail(function_declaration(&ast_node)); |
210 | 209 | ||
211 | let params = function_signature | 210 | let params = ast_node |
212 | .parameter_names | 211 | .param_list() |
213 | .iter() | 212 | .into_iter() |
214 | .skip(if function_signature.has_self_param { 1 } else { 0 }) | 213 | .flat_map(|it| it.params()) |
215 | .map(|name| name.trim_start_matches('_').into()) | 214 | .flat_map(|it| it.pat()) |
215 | .map(|pat| pat.to_string().trim_start_matches('_').into()) | ||
216 | .collect(); | 216 | .collect(); |
217 | 217 | ||
218 | builder = builder.add_call_parens(ctx, name, Params::Named(params)); | 218 | builder = builder.add_call_parens(ctx, name, Params::Named(params)); |