From c182aab5460fb5dc14b8c0e47fae45a09ccf0ac8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 30 Dec 2018 16:29:10 +0300 Subject: don't add () in use items --- crates/ra_analysis/src/completion/complete_path.rs | 12 ++++++++++ .../src/completion/completion_context.rs | 4 ++++ .../ra_analysis/src/completion/completion_item.rs | 26 +++++++++++++--------- 3 files changed, 32 insertions(+), 10 deletions(-) (limited to 'crates/ra_analysis') diff --git a/crates/ra_analysis/src/completion/complete_path.rs b/crates/ra_analysis/src/completion/complete_path.rs index 99fe9aa94..4723a65a6 100644 --- a/crates/ra_analysis/src/completion/complete_path.rs +++ b/crates/ra_analysis/src/completion/complete_path.rs @@ -113,4 +113,16 @@ mod tests { "Foo;Bar", ); } + + #[test] + fn dont_render_function_parens_in_use_item() { + check_reference_completion( + " + //- /lib.rs + mod m { pub fn foo() {} } + use crate::m::f<|>; + ", + "foo", + ) + } } diff --git a/crates/ra_analysis/src/completion/completion_context.rs b/crates/ra_analysis/src/completion/completion_context.rs index 71bf7fd32..949b8135e 100644 --- a/crates/ra_analysis/src/completion/completion_context.rs +++ b/crates/ra_analysis/src/completion/completion_context.rs @@ -24,6 +24,7 @@ pub(super) struct CompletionContext<'a> { pub(super) module: Option, pub(super) function: Option, pub(super) function_syntax: Option>, + pub(super) use_item_syntax: Option>, pub(super) is_param: bool, /// A single-indent path, like `foo`. pub(super) is_trivial_path: bool, @@ -55,6 +56,7 @@ impl<'a> CompletionContext<'a> { module, function: None, function_syntax: None, + use_item_syntax: None, is_param: false, is_trivial_path: false, path_prefix: None, @@ -114,6 +116,8 @@ impl<'a> CompletionContext<'a> { _ => (), } + self.use_item_syntax = self.leaf.ancestors().find_map(ast::UseItem::cast); + self.function_syntax = self .leaf .ancestors() diff --git a/crates/ra_analysis/src/completion/completion_item.rs b/crates/ra_analysis/src/completion/completion_item.rs index a3d947e5b..cd4d529f9 100644 --- a/crates/ra_analysis/src/completion/completion_item.rs +++ b/crates/ra_analysis/src/completion/completion_item.rs @@ -140,21 +140,27 @@ impl Builder { PerNs { values: Some(hir::Def::Function(function)), .. - } => { - if let Some(sig_info) = function.signature_info(ctx.db) { - if sig_info.params.is_empty() { - self.snippet = Some(format!("{}()$0", self.label)); - } else { - self.snippet = Some(format!("{}($0)", self.label)); - } - } - CompletionItemKind::Function - } + } => return self.from_function(ctx, function), _ => return self, }; self.kind = Some(kind); self } + + fn from_function(mut self, ctx: &CompletionContext, function: hir::Function) -> Builder { + // If not an import, add parenthesis automatically. + if ctx.use_item_syntax.is_none() { + if let Some(sig_info) = function.signature_info(ctx.db) { + if sig_info.params.is_empty() { + self.snippet = Some(format!("{}()$0", self.label)); + } else { + self.snippet = Some(format!("{}($0)", self.label)); + } + } + } + self.kind = Some(CompletionItemKind::Function); + self + } } impl Into for Builder { -- cgit v1.2.3