diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs index c3c6eda339..34d061f5af 100644 --- a/crates/ra_ide/src/completion/complete_keyword.rs +++ b/crates/ra_ide/src/completion/complete_keyword.rs @@ -176,7 +176,10 @@ fn complete_return( mod tests { use expect::{expect, Expect}; - use crate::completion::{test_utils::completion_list, CompletionKind}; + use crate::completion::{ + test_utils::{check_edit, completion_list}, + CompletionKind, + }; fn check(ra_fixture: &str, expect: Expect) { let actual = completion_list(ra_fixture, CompletionKind::Keyword); @@ -312,6 +315,11 @@ mod tests { kw while "#]], ); + check_edit( + "else", + r#"fn quux() { if true { () } <|> }"#, + r#"fn quux() { if true { () } else {$0} }"#, + ); } #[test] diff --git a/crates/ra_ide/src/completion/test_utils.rs b/crates/ra_ide/src/completion/test_utils.rs index 5938415b3c..9c036eac7f 100644 --- a/crates/ra_ide/src/completion/test_utils.rs +++ b/crates/ra_ide/src/completion/test_utils.rs @@ -1,8 +1,10 @@ //! Runs completion for testing purposes. use hir::Semantics; +use itertools::Itertools; use ra_syntax::{AstNode, NodeOrToken, SyntaxElement}; use stdx::format_to; +use test_utils::assert_eq_text; use crate::{ completion::{completion_item::CompletionKind, CompletionConfig}, @@ -54,6 +56,17 @@ pub(crate) fn completion_list_with_options( .collect() } +pub(crate) fn check_edit(what: &str, ra_fixture_before: &str, ra_fixture_after: &str) { + let (analysis, position) = analysis_and_position(ra_fixture_before); + let completions: Vec = + analysis.completions(&CompletionConfig::default(), position).unwrap().unwrap().into(); + let (completion,) = + completions.into_iter().filter(|it| it.label() == what).collect_tuple().unwrap(); + let mut actual = analysis.file_text(position.file_id).unwrap().to_string(); + completion.text_edit().apply(&mut actual); + assert_eq_text!(ra_fixture_after, &actual) +} + pub(crate) fn check_pattern_is_applicable(code: &str, check: fn(SyntaxElement) -> bool) { let (analysis, pos) = analysis_and_position(code); analysis