From 2c5d2a58d8791ad9b3940bd833953c27274d9c80 Mon Sep 17 00:00:00 2001 From: "Tommy D. Rossi" Date: Mon, 9 Jun 2025 17:25:32 +0200 Subject: [PATCH] Do not skip punctuation characters with `alt-arrow` if next character is `\n` (#32368) Closes #32356 Release Notes: - N/A --- crates/editor/src/editor_tests.rs | 12 +++++------- crates/editor/src/movement.rs | 6 ++++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index bc44cbddef..4c4b6809e9 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -1907,7 +1907,6 @@ fn test_prev_next_word_boundary(cx: &mut TestAppContext) { DisplayPoint::new(DisplayRow(2), 4)..DisplayPoint::new(DisplayRow(2), 4), ]) }); - editor.move_to_previous_word_start(&MoveToPreviousWordStart, window, cx); assert_selection_ranges("use std::ˇstr::{foo, bar}\n\n {ˇbaz.qux()}", editor, cx); @@ -1927,29 +1926,29 @@ fn test_prev_next_word_boundary(cx: &mut TestAppContext) { assert_selection_ranges("useˇ std::str::{foo, barˇ}\n\n {baz.qux()}", editor, cx); editor.move_to_next_word_end(&MoveToNextWordEnd, window, cx); - assert_selection_ranges("use stdˇ::str::{foo, bar}\nˇ\n {baz.qux()}", editor, cx); + assert_selection_ranges("use stdˇ::str::{foo, bar}ˇ\n\n {baz.qux()}", editor, cx); editor.move_to_next_word_end(&MoveToNextWordEnd, window, cx); - assert_selection_ranges("use std::ˇstr::{foo, bar}\n\n {ˇbaz.qux()}", editor, cx); + assert_selection_ranges("use std::ˇstr::{foo, bar}\nˇ\n {baz.qux()}", editor, cx); editor.move_right(&MoveRight, window, cx); editor.select_to_previous_word_start(&SelectToPreviousWordStart, window, cx); assert_selection_ranges( - "use std::«ˇs»tr::{foo, bar}\n\n {«ˇb»az.qux()}", + "use std::«ˇs»tr::{foo, bar}\n«ˇ\n» {baz.qux()}", editor, cx, ); editor.select_to_previous_word_start(&SelectToPreviousWordStart, window, cx); assert_selection_ranges( - "use std«ˇ::s»tr::{foo, bar}\n\n«ˇ {b»az.qux()}", + "use std«ˇ::s»tr::{foo, bar«ˇ}\n\n» {baz.qux()}", editor, cx, ); editor.select_to_next_word_end(&SelectToNextWordEnd, window, cx); assert_selection_ranges( - "use std::«ˇs»tr::{foo, bar}\n\n {«ˇb»az.qux()}", + "use std::«ˇs»tr::{foo, bar}«ˇ\n\n» {baz.qux()}", editor, cx, ); @@ -21988,7 +21987,6 @@ async fn test_pulling_diagnostics(cx: &mut TestAppContext) { "Cursor movement should not trigger diagnostic request" ); ensure_result_id(Some("2".to_string()), cx); - // Multiple rapid edits should be debounced for _ in 0..5 { editor.update_in(cx, |editor, window, cx| { diff --git a/crates/editor/src/movement.rs b/crates/editor/src/movement.rs index a750efe98a..eba1f26dcc 100644 --- a/crates/editor/src/movement.rs +++ b/crates/editor/src/movement.rs @@ -266,10 +266,11 @@ pub fn previous_word_start(map: &DisplaySnapshot, point: DisplayPoint) -> Displa let mut is_first_iteration = true; find_preceding_boundary_display_point(map, point, FindRange::MultiLine, |left, right| { - // Make alt-left skip punctuation on Mac OS to respect Mac VSCode behaviour. For example: hello.| goes to |hello. + // Make alt-left skip punctuation to respect VSCode behaviour. For example: hello.| goes to |hello. if is_first_iteration && classifier.is_punctuation(right) && !classifier.is_punctuation(left) + && left != '\n' { is_first_iteration = false; return false; @@ -318,10 +319,11 @@ pub fn next_word_end(map: &DisplaySnapshot, point: DisplayPoint) -> DisplayPoint let classifier = map.buffer_snapshot.char_classifier_at(raw_point); let mut is_first_iteration = true; find_boundary(map, point, FindRange::MultiLine, |left, right| { - // Make alt-right skip punctuation on Mac OS to respect the Mac behaviour. For example: |.hello goes to .hello| + // Make alt-right skip punctuation to respect VSCode behaviour. For example: |.hello goes to .hello| if is_first_iteration && classifier.is_punctuation(left) && !classifier.is_punctuation(right) + && right != '\n' { is_first_iteration = false; return false;