From e0da3da0d9a6673bc3b653ce863fec2bdd3f7fab Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 9 May 2021 17:17:28 +0300 Subject: fix: join lines doesn't add space before closing quote --- crates/ide/src/join_lines.rs | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'crates/ide/src/join_lines.rs') diff --git a/crates/ide/src/join_lines.rs b/crates/ide/src/join_lines.rs index fe2a349e6..482b23cf5 100644 --- a/crates/ide/src/join_lines.rs +++ b/crates/ide/src/join_lines.rs @@ -65,11 +65,15 @@ fn remove_newlines(edit: &mut TextEditBuilder, token: &SyntaxToken, range: TextR fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextSize) { if token.kind() != WHITESPACE || token.text().bytes().filter(|&b| b == b'\n').count() != 1 { - let mut string_open_quote = false; + let mut no_space = false; if let Some(string) = ast::String::cast(token.clone()) { if let Some(range) = string.open_quote_text_range() { - cov_mark::hit!(join_string_literal); - string_open_quote = range.end() == offset; + cov_mark::hit!(join_string_literal_open_quote); + no_space |= range.end() == offset; + } + if let Some(range) = string.close_quote_text_range() { + cov_mark::hit!(join_string_literal_close_quote); + no_space |= range.start() == offset + TextSize::of('\n'); } } @@ -82,7 +86,7 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextS }; let range = TextRange::at(offset, ((n_spaces_after_line_break + 1) as u32).into()); - let replace_with = if string_open_quote { "" } else { " " }; + let replace_with = if no_space { "" } else { " " }; edit.replace(range, replace_with.to_string()); return; } @@ -797,22 +801,41 @@ fn foo() { #[test] fn join_string_literal() { - cov_mark::check!(join_string_literal); - check_join_lines( - r#" + { + cov_mark::check!(join_string_literal_open_quote); + check_join_lines( + r#" fn main() { $0" hello "; } "#, - r#" + r#" fn main() { $0"hello "; } "#, - ); + ); + } + + { + cov_mark::check!(join_string_literal_close_quote); + check_join_lines( + r#" +fn main() { + $0"hello +"; +} +"#, + r#" +fn main() { + $0"hello"; +} +"#, + ); + } check_join_lines( r#" -- cgit v1.2.3