From 01dbc68f822e25a1c70ab5bb5725edf88d799854 Mon Sep 17 00:00:00 2001 From: Miao Date: Wed, 1 Oct 2025 15:37:23 +0800 Subject: [PATCH] editor: Preserve grapheme identity during rewrap (#39223) Closes #39207 Release Notes: - N/A --- crates/editor/src/editor.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index ebea090f80..79bad1d319 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -22400,7 +22400,14 @@ fn wrap_with_prefix( continue; } if !preserve_existing_whitespace { - token = " "; + // Keep a single whitespace grapheme as-is + if let Some(first) = + unicode_segmentation::UnicodeSegmentation::graphemes(token, true).next() + { + token = first; + } else { + token = " "; + } grapheme_len = 1; } let current_prefix_len = if is_first_line { @@ -22502,6 +22509,17 @@ fn test_wrap_with_prefix() { ), "这是什\n么 钢\n笔" ); + assert_eq!( + wrap_with_prefix( + String::new(), + String::new(), + format!("foo{}bar", '\u{2009}'), // thin space + 80, + NonZeroU32::new(4).unwrap(), + false, + ), + format!("foo{}bar", '\u{2009}') + ); } pub trait CollaborationHub {