From d8980c25d283dcbecae1b48e920775b4fcba3ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B0=8F=E7=99=BD?= <364772080@qq.com> Date: Fri, 9 May 2025 19:00:16 +0800 Subject: [PATCH] windows: Remove extra empty line when loading default settings (#30344) On Windows, lines in a file end with `\r\n`, so using `chunk.split('\n')` leaves a trailing `\r` at the end of each line. This ends up introducing extra blank lines in the final output. I didn't use `chunk.split('\r\n')` because some of the input have already had its line endings normalized to just `\n`. If we switch to splitting on `\r\n`, that input wouldn't be handled correctly. #### Before https://github.com/user-attachments/assets/22cc5a79-c3a7-4824-a3bc-d66d2261852f #### After https://github.com/user-attachments/assets/720f1d67-75e6-482d-b6a5-9f3aa9f321ce Release Notes: - N/A --- crates/fs/src/fs.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/crates/fs/src/fs.rs b/crates/fs/src/fs.rs index e2721acda6..0dd1f605f7 100644 --- a/crates/fs/src/fs.rs +++ b/crates/fs/src/fs.rs @@ -2340,15 +2340,19 @@ impl Fs for FakeFs { fn chunks(rope: &Rope, line_ending: LineEnding) -> impl Iterator { rope.chunks().flat_map(move |chunk| { let mut newline = false; - chunk.split('\n').flat_map(move |line| { - let ending = if newline { - Some(line_ending.as_str()) - } else { - None - }; - newline = true; - ending.into_iter().chain([line]) - }) + let end_with_newline = chunk.ends_with('\n').then_some(line_ending.as_str()); + chunk + .lines() + .flat_map(move |line| { + let ending = if newline { + Some(line_ending.as_str()) + } else { + None + }; + newline = true; + ending.into_iter().chain([line]) + }) + .chain(end_with_newline) }) }