diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index c3c54e4951..61a59665c1 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -6736,22 +6736,22 @@ impl Editor { let mut line_prefix = indent_size.chars().collect::(); - if selection.is_empty() { - if let Some(comment_prefix) = - buffer - .language_scope_at(selection.head()) - .and_then(|language| { - language - .line_comment_prefixes() - .iter() - .find(|prefix| buffer.contains_str_at(indent_end, prefix)) - .cloned() - }) - { - line_prefix.push_str(&comment_prefix); - should_rewrap = true; - } + if let Some(comment_prefix) = + buffer + .language_scope_at(selection.head()) + .and_then(|language| { + language + .line_comment_prefixes() + .iter() + .find(|prefix| buffer.contains_str_at(indent_end, prefix)) + .cloned() + }) + { + line_prefix.push_str(&comment_prefix); + should_rewrap = true; + } + if selection.is_empty() { 'expand_upwards: while start_row > 0 { let prev_row = start_row - 1; if buffer.contains_str_at(Point::new(prev_row, 0), &line_prefix) diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 6a8efc5905..e11b38ba59 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -4017,6 +4017,39 @@ async fn test_rewrap(cx: &mut TestAppContext) { cx.assert_editor_state(wrapped_text); } + // Test that rewrapping works inside of a selection + { + let language = Arc::new(Language::new( + LanguageConfig { + line_comments: vec!["// ".into()], + ..LanguageConfig::default() + }, + None, + )); + cx.update_buffer(|buffer, cx| buffer.set_language(Some(language), cx)); + + let unwrapped_text = indoc! {" + «// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus mollis elit purus, a ornare lacus gravida vitae. Proin consectetur felis vel purus auctor, eu lacinia sapien scelerisque. Vivamus sit amet neque et quam tincidunt hendrerit. Praesent semper egestas tellus id dignissim. Pellentesque odio lectus, iaculis ac volutpat et, blandit quis urna. Sed vestibulum nisi sit amet nisl venenatis tempus. Donec molestie blandit quam, et porta nunc laoreet in. Integer sit amet scelerisque nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas porta metus, eu viverra ipsum efficitur quis. Donec luctus eros turpis, id vulputate turpis porttitor id. Aliquam id accumsan eros.ˇ» + "}; + + let wrapped_text = indoc! {" + // Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus mollis elit + // purus, a ornare lacus gravida vitae. Proin consectetur felis vel purus + // auctor, eu lacinia sapien scelerisque. Vivamus sit amet neque et quam + // tincidunt hendrerit. Praesent semper egestas tellus id dignissim. + // Pellentesque odio lectus, iaculis ac volutpat et, blandit quis urna. Sed + // vestibulum nisi sit amet nisl venenatis tempus. Donec molestie blandit quam, + // et porta nunc laoreet in. Integer sit amet scelerisque nisi. Lorem ipsum + // dolor sit amet, consectetur adipiscing elit. Cras egestas porta metus, eu + // viverra ipsum efficitur quis. Donec luctus eros turpis, id vulputate turpis + // porttitor id. Aliquam id accumsan eros.ˇ + "}; + + cx.set_state(unwrapped_text); + cx.update_editor(|e, cx| e.rewrap(&Rewrap, cx)); + cx.assert_editor_state(wrapped_text); + } + // Test that cursors that expand to the same region are collapsed. { let language = Arc::new(Language::new(