From 8b89578530ef983cdd3bd0ae6f83f4b29f69a689 Mon Sep 17 00:00:00 2001 From: MarcusGrass Date: Wed, 21 Feb 2024 13:27:38 +0100 Subject: [PATCH 1/4] Tests pass with char count --- src/formatting.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/formatting.rs b/src/formatting.rs index 60361505a3f..15433fab754 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -359,15 +359,15 @@ impl FormattingError { | ErrorKind::DeprecatedAttr | ErrorKind::BadAttr | ErrorKind::LostComment => { - let trailing_ws_start = self - .line_buffer - .rfind(|c: char| !c.is_whitespace()) - .map(|pos| pos + 1) - .unwrap_or(0); - ( - trailing_ws_start, - self.line_buffer.len() - trailing_ws_start, - ) + let mut last_non_whitespace = 0; + let mut end = 0; + for (ind, ch) in self.line_buffer.chars().enumerate() { + if !ch.is_whitespace() { + last_non_whitespace = ind; + } + end = ind; + } + (last_non_whitespace, end + 1 - last_non_whitespace) } _ => unreachable!(), } From 6d5c13dafc9d729617addc7f88b6cc8f827c1f1e Mon Sep 17 00:00:00 2001 From: MarcusGrass Date: Wed, 21 Feb 2024 13:50:02 +0100 Subject: [PATCH 2/4] Try create test case --- src/formatting.rs | 1 + .../issue-6083/non_ascii_trailing_whitespace_multiline.rs | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 tests/target/issue-6083/non_ascii_trailing_whitespace_multiline.rs diff --git a/src/formatting.rs b/src/formatting.rs index 15433fab754..b702e67f903 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -361,6 +361,7 @@ impl FormattingError { | ErrorKind::LostComment => { let mut last_non_whitespace = 0; let mut end = 0; + // annotate-snippet uses char-length, this code needs to as well for (ind, ch) in self.line_buffer.chars().enumerate() { if !ch.is_whitespace() { last_non_whitespace = ind; diff --git a/tests/target/issue-6083/non_ascii_trailing_whitespace_multiline.rs b/tests/target/issue-6083/non_ascii_trailing_whitespace_multiline.rs new file mode 100644 index 00000000000..ff6a92175b0 --- /dev/null +++ b/tests/target/issue-6083/non_ascii_trailing_whitespace_multiline.rs @@ -0,0 +1,6 @@ +// rustfmt-error_on_unformatted: false +fn dummy() { + let my_var = 5 /* öäåöäåöäåöäåöäåöå */ + / m as f64 + + 0f64; +} From 50ff66f67abb60d523cb8c74b3a44cdfe4c63a00 Mon Sep 17 00:00:00 2001 From: MarcusGrass Date: Wed, 21 Feb 2024 15:01:06 +0100 Subject: [PATCH 3/4] Move issue file and add to dont_emit_ice test --- .../issue_6083.rs} | 0 tests/rustfmt/main.rs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename tests/{target/issue-6083/non_ascii_trailing_whitespace_multiline.rs => issue-6083/issue_6083.rs} (100%) diff --git a/tests/target/issue-6083/non_ascii_trailing_whitespace_multiline.rs b/tests/issue-6083/issue_6083.rs similarity index 100% rename from tests/target/issue-6083/non_ascii_trailing_whitespace_multiline.rs rename to tests/issue-6083/issue_6083.rs diff --git a/tests/rustfmt/main.rs b/tests/rustfmt/main.rs index 11fb4786e82..8e464dcf88b 100644 --- a/tests/rustfmt/main.rs +++ b/tests/rustfmt/main.rs @@ -176,7 +176,7 @@ fn rustfmt_emits_error_on_line_overflow_true() { #[test] #[allow(non_snake_case)] fn dont_emit_ICE() { - let files = ["tests/target/issue_5728.rs", "tests/target/issue_5729.rs", "tests/target/issue_6069.rs"]; + let files = ["tests/target/issue_5728.rs", "tests/target/issue_5729.rs", "tests/target/issue_6069.rs", "tests/issue-6083/issue_6083.rs"]; for file in files { let args = [file]; From 91e0fc3bb64e5656566c5e0259f00833ce204faf Mon Sep 17 00:00:00 2001 From: MarcusGrass Date: Wed, 21 Feb 2024 15:32:24 +0100 Subject: [PATCH 4/4] Fixup offsetting to be the same as before on char count --- src/formatting.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/formatting.rs b/src/formatting.rs index b702e67f903..6ba56ff72da 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -364,11 +364,11 @@ impl FormattingError { // annotate-snippet uses char-length, this code needs to as well for (ind, ch) in self.line_buffer.chars().enumerate() { if !ch.is_whitespace() { - last_non_whitespace = ind; + last_non_whitespace = ind + 1; } - end = ind; + end = ind + 1; } - (last_non_whitespace, end + 1 - last_non_whitespace) + (last_non_whitespace, end - last_non_whitespace) } _ => unreachable!(), }