diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 33a9ba60594..a861ee88e6d 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -8,8 +8,6 @@ pub mod db; #[cfg(test)] mod mock; -#[cfg(test)] -mod marks; mod query_definitions; mod path; pub mod source_binder; @@ -29,6 +27,9 @@ mod generics; mod code_model_api; mod code_model_impl; +#[cfg(test)] +mod marks; + use crate::{ db::HirDatabase, name::{AsName, KnownName}, diff --git a/crates/ra_hir/src/marks.rs b/crates/ra_hir/src/marks.rs index 6aff2c4e1e0..f4d0c3e5966 100644 --- a/crates/ra_hir/src/marks.rs +++ b/crates/ra_hir/src/marks.rs @@ -1 +1,3 @@ -test_utils::mark!(name_res_works_for_broken_modules); +use test_utils::mark; + +mark!(name_res_works_for_broken_modules); diff --git a/crates/ra_ide_api/src/completion/complete_path.rs b/crates/ra_ide_api/src/completion/complete_path.rs index 804954ee16c..6bed299d2f4 100644 --- a/crates/ra_ide_api/src/completion/complete_path.rs +++ b/crates/ra_ide_api/src/completion/complete_path.rs @@ -121,30 +121,4 @@ mod tests { ", ); } - - #[test] - fn dont_render_function_parens_in_use_item() { - check_reference_completion( - "dont_render_function_parens_in_use_item", - " - //- /lib.rs - mod m { pub fn foo() {} } - use crate::m::f<|>; - ", - ) - } - - #[test] - fn dont_render_function_parens_if_already_call() { - check_reference_completion( - "dont_render_function_parens_if_already_call", - " - //- /lib.rs - fn frobnicate() {} - fn main() { - frob<|>(); - } - ", - ) - } } diff --git a/crates/ra_ide_api/src/completion/complete_scope.rs b/crates/ra_ide_api/src/completion/complete_scope.rs index 20fc77f06e2..f837bb1db2b 100644 --- a/crates/ra_ide_api/src/completion/complete_scope.rs +++ b/crates/ra_ide_api/src/completion/complete_scope.rs @@ -175,21 +175,4 @@ mod tests { check_reference_completion("self_in_methods", r"impl S { fn foo(&self) { <|> } }") } - #[test] - fn inserts_parens_for_function_calls() { - check_reference_completion( - "inserts_parens_for_function_calls1", - r" - fn no_args() {} - fn main() { no_<|> } - ", - ); - check_reference_completion( - "inserts_parens_for_function_calls2", - r" - fn with_args(x: i32, y: String) {} - fn main() { with_<|> } - ", - ); - } } diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs index 680fd8d1b5d..e3bf82304e0 100644 --- a/crates/ra_ide_api/src/completion/completion_item.rs +++ b/crates/ra_ide_api/src/completion/completion_item.rs @@ -3,9 +3,10 @@ use hir::PerNs; use crate::completion::completion_context::CompletionContext; use ra_syntax::{ ast::{self, AstNode}, - TextRange + TextRange, }; use ra_text_edit::TextEdit; +use test_utils::tested_by; /// `CompletionItem` describes a single completion variant in the editor pop-up. /// It is basically a POD with various properties. To construct a @@ -255,7 +256,9 @@ impl Builder { ) -> Builder { // If not an import, add parenthesis automatically. if ctx.use_item_syntax.is_none() && !ctx.is_call { - if function.signature(ctx.db).params().is_empty() { + tested_by!(inserts_parens_for_function_calls); + let sig = function.signature(ctx.db); + if sig.params().is_empty() || sig.has_self_param() && sig.params().len() == 1 { self.insert_text = Some(format!("{}()$0", self.label)); } else { self.insert_text = Some(format!("{}($0)", self.label)); @@ -344,3 +347,72 @@ pub(crate) fn check_completion(test_name: &str, code: &str, kind: CompletionKind .collect(); assert_debug_snapshot_matches!(test_name, kind_completions); } + +#[cfg(test)] +mod tests { + use test_utils::covers; + + use super::*; + + fn check_reference_completion(code: &str, expected_completions: &str) { + check_completion(code, expected_completions, CompletionKind::Reference); + } + + #[test] + fn inserts_parens_for_function_calls() { + covers!(inserts_parens_for_function_calls); + check_reference_completion( + "inserts_parens_for_function_calls1", + r" + fn no_args() {} + fn main() { no_<|> } + ", + ); + check_reference_completion( + "inserts_parens_for_function_calls2", + r" + fn with_args(x: i32, y: String) {} + fn main() { with_<|> } + ", + ); + check_reference_completion( + "inserts_parens_for_function_calls3", + r" + struct S {} + impl S { + fn foo(&self) {} + } + fn bar(s: &S) { + s.f<|> + } + ", + ) + } + + #[test] + fn dont_render_function_parens_in_use_item() { + check_reference_completion( + "dont_render_function_parens_in_use_item", + " + //- /lib.rs + mod m { pub fn foo() {} } + use crate::m::f<|>; + ", + ) + } + + #[test] + fn dont_render_function_parens_if_already_call() { + check_reference_completion( + "dont_render_function_parens_if_already_call", + " + //- /lib.rs + fn frobnicate() {} + fn main() { + frob<|>(); + } + ", + ) + } + +} diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap new file mode 100644 index 00000000000..92068e50a54 --- /dev/null +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__inserts_parens_for_function_calls3.snap @@ -0,0 +1,26 @@ +--- +created: "2019-01-23T13:19:23.525922020+00:00" +creator: insta@0.5.2 +expression: kind_completions +source: crates/ra_ide_api/src/completion/completion_item.rs +--- +[ + CompletionItem { + completion_kind: Reference, + label: "foo", + kind: Some( + Method + ), + detail: Some( + "fn foo(&self)" + ), + documentation: None, + lookup: None, + insert_text: Some( + "foo()$0" + ), + insert_text_format: Snippet, + source_range: [139; 140), + text_edit: None + } +] diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__method_completion.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__method_completion.snap index ffeac0bf430..10fe5924895 100644 --- a/crates/ra_ide_api/src/completion/snapshots/completion_item__method_completion.snap +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__method_completion.snap @@ -1,8 +1,8 @@ --- -created: "2019-01-22T15:38:19.541947400+00:00" -creator: insta@0.4.0 +created: "2019-01-23T13:19:23.501258181+00:00" +creator: insta@0.5.2 expression: kind_completions -source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" +source: crates/ra_ide_api/src/completion/completion_item.rs --- [ CompletionItem { @@ -17,7 +17,7 @@ source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" documentation: None, lookup: None, insert_text: Some( - "the_method($0)" + "the_method()$0" ), insert_text_format: Snippet, source_range: [144; 144), diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_autoderef.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_autoderef.snap index 5ef140b2812..5f5df00332b 100644 --- a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_autoderef.snap +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_autoderef.snap @@ -1,8 +1,8 @@ --- -created: "2019-01-22T15:38:19.541947400+00:00" -creator: insta@0.4.0 +created: "2019-01-23T13:19:23.501353210+00:00" +creator: insta@0.5.2 expression: kind_completions -source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" +source: crates/ra_ide_api/src/completion/completion_item.rs --- [ CompletionItem { @@ -33,7 +33,7 @@ source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" documentation: None, lookup: None, insert_text: Some( - "foo($0)" + "foo()$0" ), insert_text_format: Snippet, source_range: [126; 126), diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap index b7903c5bcb4..80e8f3df58b 100644 --- a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap @@ -1,8 +1,8 @@ --- -created: "2019-01-22T15:38:19.541947400+00:00" -creator: insta@0.4.0 +created: "2019-01-23T13:19:23.501297515+00:00" +creator: insta@0.5.2 expression: kind_completions -source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" +source: crates/ra_ide_api/src/completion/completion_item.rs --- [ CompletionItem { @@ -33,7 +33,7 @@ source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" documentation: None, lookup: None, insert_text: Some( - "foo($0)" + "foo()$0" ), insert_text_format: Snippet, source_range: [121; 121), diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index 3c53e75ac43..3502bfd2e56 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -26,6 +26,9 @@ mod syntax_highlighting; mod parent_module; mod rename; +#[cfg(test)] +mod marks; + use std::{fmt, sync::Arc}; use ra_syntax::{SourceFile, TreeArc, TextRange, TextUnit}; diff --git a/crates/ra_ide_api/src/marks.rs b/crates/ra_ide_api/src/marks.rs new file mode 100644 index 00000000000..b4a726ef002 --- /dev/null +++ b/crates/ra_ide_api/src/marks.rs @@ -0,0 +1,3 @@ +use test_utils::mark; + +mark!(inserts_parens_for_function_calls);