Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/tests.rs')
| -rw-r--r-- | crates/ide_completion/src/tests.rs | 75 |
1 files changed, 53 insertions, 22 deletions
diff --git a/crates/ide_completion/src/tests.rs b/crates/ide_completion/src/tests.rs index 4028fc2242..f063a9638c 100644 --- a/crates/ide_completion/src/tests.rs +++ b/crates/ide_completion/src/tests.rs @@ -20,6 +20,7 @@ mod record; mod type_pos; mod use_tree; mod visibility; +mod flyimport; use std::mem; @@ -37,7 +38,7 @@ use stdx::{format_to, trim_indent}; use syntax::{AstNode, NodeOrToken, SyntaxElement}; use test_utils::assert_eq_text; -use crate::{item::CompletionKind, CompletionConfig, CompletionItem}; +use crate::{CompletionConfig, CompletionItem, CompletionItemKind}; /// Lots of basic item definitions const BASE_ITEMS_FIXTURE: &str = r#" @@ -77,18 +78,28 @@ pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig { }; pub(crate) fn completion_list(ra_fixture: &str) -> String { - completion_list_with_config(TEST_CONFIG, ra_fixture) + completion_list_with_config(TEST_CONFIG, ra_fixture, true) } -fn completion_list_with_config(config: CompletionConfig, ra_fixture: &str) -> String { +pub(crate) fn completion_list_no_kw(ra_fixture: &str) -> String { + completion_list_with_config(TEST_CONFIG, ra_fixture, false) +} + +fn completion_list_with_config( + config: CompletionConfig, + ra_fixture: &str, + include_keywords: bool, +) -> String { // filter out all but one builtintype completion for smaller test outputs let items = get_all_items(config, ra_fixture); let mut bt_seen = false; let items = items .into_iter() .filter(|it| { - it.completion_kind != CompletionKind::BuiltinType || !mem::replace(&mut bt_seen, true) + it.kind() != CompletionItemKind::BuiltinType || !mem::replace(&mut bt_seen, true) }) + .filter(|it| include_keywords || it.kind() != CompletionItemKind::Keyword) + .filter(|it| include_keywords || it.kind() != CompletionItemKind::Snippet) .collect(); render_completion_list(items) } @@ -104,36 +115,22 @@ pub(crate) fn position(ra_fixture: &str) -> (RootDatabase, FilePosition) { (database, FilePosition { file_id, offset }) } -pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> { +pub(crate) fn do_completion(code: &str, kind: CompletionItemKind) -> Vec<CompletionItem> { do_completion_with_config(TEST_CONFIG, code, kind) } pub(crate) fn do_completion_with_config( config: CompletionConfig, code: &str, - kind: CompletionKind, + kind: CompletionItemKind, ) -> Vec<CompletionItem> { get_all_items(config, code) .into_iter() - .filter(|c| c.completion_kind == kind) + .filter(|c| c.kind() == kind) .sorted_by(|l, r| l.label().cmp(r.label())) .collect() } -pub(crate) fn filtered_completion_list(code: &str, kind: CompletionKind) -> String { - filtered_completion_list_with_config(TEST_CONFIG, code, kind) -} - -pub(crate) fn filtered_completion_list_with_config( - config: CompletionConfig, - code: &str, - kind: CompletionKind, -) -> String { - let kind_completions: Vec<CompletionItem> = - get_all_items(config, code).into_iter().filter(|c| c.completion_kind == kind).collect(); - render_completion_list(kind_completions) -} - fn render_completion_list(completions: Vec<CompletionItem>) -> String { fn monospace_width(s: &str) -> usize { s.chars().count() @@ -143,7 +140,7 @@ fn render_completion_list(completions: Vec<CompletionItem>) -> String { completions .into_iter() .map(|it| { - let tag = it.kind().unwrap().tag(); + let tag = it.kind().tag(); let var_name = format!("{} {}", tag, it.label()); let mut buf = var_name; if let Some(detail) = it.detail() { @@ -254,3 +251,37 @@ fn foo() { "#, ); } + +#[test] +fn no_completions_in_comments() { + cov_mark::check!(no_keyword_completion_in_comments); + assert_eq!( + completion_list( + r#" +fn test() { +let x = 2; // A comment$0 +} +"#, + ), + String::new(), + ); + assert_eq!( + completion_list( + r#" +/* +Some multi-line comment$0 +*/ +"#, + ), + String::new(), + ); + assert_eq!( + completion_list( + r#" +/// Some doc comment +/// let test$0 = 1 +"#, + ), + String::new(), + ); +} |