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');
}
}
};
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;
}
#[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#"