aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/test_utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/completion/test_utils.rs')
-rw-r--r--crates/ra_ide/src/completion/test_utils.rs52
1 files changed, 35 insertions, 17 deletions
diff --git a/crates/ra_ide/src/completion/test_utils.rs b/crates/ra_ide/src/completion/test_utils.rs
index f439f974d..c660de7b1 100644
--- a/crates/ra_ide/src/completion/test_utils.rs
+++ b/crates/ra_ide/src/completion/test_utils.rs
@@ -3,7 +3,7 @@
3use crate::{ 3use crate::{
4 completion::{completion_item::CompletionKind, CompletionConfig}, 4 completion::{completion_item::CompletionKind, CompletionConfig},
5 mock_analysis::{analysis_and_position, single_file_with_position}, 5 mock_analysis::{analysis_and_position, single_file_with_position},
6 CompletionItem, FilePosition, 6 CompletionItem,
7}; 7};
8use hir::Semantics; 8use hir::Semantics;
9use ra_syntax::{AstNode, NodeOrToken, SyntaxElement}; 9use ra_syntax::{AstNode, NodeOrToken, SyntaxElement};
@@ -12,11 +12,8 @@ pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionI
12 do_completion_with_options(code, kind, &CompletionConfig::default()) 12 do_completion_with_options(code, kind, &CompletionConfig::default())
13} 13}
14 14
15pub(crate) fn do_completion_with_position( 15pub(crate) fn get_completions(code: &str, kind: CompletionKind) -> Vec<String> {
16 code: &str, 16 get_completions_with_options(code, kind, &CompletionConfig::default())
17 kind: CompletionKind,
18) -> (FilePosition, Vec<CompletionItem>) {
19 do_completion_with_options_and_position(code, kind, &CompletionConfig::default())
20} 17}
21 18
22pub(crate) fn do_completion_with_options( 19pub(crate) fn do_completion_with_options(
@@ -24,25 +21,46 @@ pub(crate) fn do_completion_with_options(
24 kind: CompletionKind, 21 kind: CompletionKind,
25 options: &CompletionConfig, 22 options: &CompletionConfig,
26) -> Vec<CompletionItem> { 23) -> Vec<CompletionItem> {
27 do_completion_with_options_and_position(code, kind, options).1 24 let mut kind_completions: Vec<CompletionItem> = get_all_completion_items(code, options)
25 .into_iter()
26 .filter(|c| c.completion_kind == kind)
27 .collect();
28 kind_completions.sort_by_key(|c| c.label().to_owned());
29 kind_completions
28} 30}
29 31
30pub(crate) fn do_completion_with_options_and_position( 32fn get_all_completion_items(code: &str, options: &CompletionConfig) -> Vec<CompletionItem> {
31 code: &str,
32 kind: CompletionKind,
33 options: &CompletionConfig,
34) -> (FilePosition, Vec<CompletionItem>) {
35 let (analysis, position) = if code.contains("//-") { 33 let (analysis, position) = if code.contains("//-") {
36 analysis_and_position(code) 34 analysis_and_position(code)
37 } else { 35 } else {
38 single_file_with_position(code) 36 single_file_with_position(code)
39 }; 37 };
40 let completions = analysis.completions(options, position).unwrap().unwrap(); 38 analysis.completions(options, position).unwrap().unwrap().into()
41 let completion_items: Vec<CompletionItem> = completions.into(); 39}
42 let mut kind_completions: Vec<CompletionItem> = 40
43 completion_items.into_iter().filter(|c| c.completion_kind == kind).collect(); 41pub(crate) fn get_all_completions(code: &str, options: &CompletionConfig) -> Vec<String> {
42 let mut kind_completions = get_all_completion_items(code, options);
43 kind_completions.sort_by_key(|c| c.label().to_owned());
44 kind_completions
45 .into_iter()
46 .map(|it| format!("{} {}", it.kind().unwrap().tag(), it.label()))
47 .collect()
48}
49
50pub(crate) fn get_completions_with_options(
51 code: &str,
52 kind: CompletionKind,
53 options: &CompletionConfig,
54) -> Vec<String> {
55 let mut kind_completions: Vec<CompletionItem> = get_all_completion_items(code, options)
56 .into_iter()
57 .filter(|c| c.completion_kind == kind)
58 .collect();
44 kind_completions.sort_by_key(|c| c.label().to_owned()); 59 kind_completions.sort_by_key(|c| c.label().to_owned());
45 (position, kind_completions) 60 kind_completions
61 .into_iter()
62 .map(|it| format!("{} {}", it.kind().unwrap().tag(), it.label()))
63 .collect()
46} 64}
47 65
48pub(crate) fn check_pattern_is_applicable(code: &str, check: fn(SyntaxElement) -> bool) { 66pub(crate) fn check_pattern_is_applicable(code: &str, check: fn(SyntaxElement) -> bool) {