editor: Fix regression causing incorrect delimiter on newline in case of multiple comment prefixes (#31129)
Closes #31115 This fixes regression caused by https://github.com/zed-industries/zed/pull/30824 while keeping that fix. - [x] Test Release Notes: - Fixed the issue where adding a newline after the `///` comment would extend it with `//` instead of `///` in Rust and other similar languages.
This commit is contained in:
parent
b829f72c17
commit
8742d4ab90
2 changed files with 45 additions and 6 deletions
|
@ -3964,15 +3964,18 @@ impl Editor {
|
||||||
.skip(num_of_whitespaces)
|
.skip(num_of_whitespaces)
|
||||||
.take(max_len_of_delimiter)
|
.take(max_len_of_delimiter)
|
||||||
.collect::<String>();
|
.collect::<String>();
|
||||||
let (delimiter, trimmed_len) =
|
let (delimiter, trimmed_len) = delimiters
|
||||||
delimiters.iter().find_map(|delimiter| {
|
.iter()
|
||||||
let trimmed = delimiter.trim_end();
|
.filter_map(|delimiter| {
|
||||||
if comment_candidate.starts_with(trimmed) {
|
let prefix = delimiter.trim_end();
|
||||||
Some((delimiter, trimmed.len()))
|
if comment_candidate.starts_with(prefix) {
|
||||||
|
Some((delimiter, prefix.len()))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
})?;
|
})
|
||||||
|
.max_by_key(|(_, len)| *len)?;
|
||||||
|
|
||||||
let cursor_is_placed_after_comment_marker =
|
let cursor_is_placed_after_comment_marker =
|
||||||
num_of_whitespaces + trimmed_len <= start_point.column as usize;
|
num_of_whitespaces + trimmed_len <= start_point.column as usize;
|
||||||
if cursor_is_placed_after_comment_marker {
|
if cursor_is_placed_after_comment_marker {
|
||||||
|
|
|
@ -2820,6 +2820,42 @@ async fn test_newline_comments(cx: &mut TestAppContext) {
|
||||||
"});
|
"});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_newline_comments_with_multiple_delimiters(cx: &mut TestAppContext) {
|
||||||
|
init_test(cx, |settings| {
|
||||||
|
settings.defaults.tab_size = NonZeroU32::new(4)
|
||||||
|
});
|
||||||
|
|
||||||
|
let language = Arc::new(Language::new(
|
||||||
|
LanguageConfig {
|
||||||
|
line_comments: vec!["// ".into(), "/// ".into()],
|
||||||
|
..LanguageConfig::default()
|
||||||
|
},
|
||||||
|
None,
|
||||||
|
));
|
||||||
|
{
|
||||||
|
let mut cx = EditorTestContext::new(cx).await;
|
||||||
|
cx.update_buffer(|buffer, cx| buffer.set_language(Some(language), cx));
|
||||||
|
cx.set_state(indoc! {"
|
||||||
|
//ˇ
|
||||||
|
"});
|
||||||
|
cx.update_editor(|e, window, cx| e.newline(&Newline, window, cx));
|
||||||
|
cx.assert_editor_state(indoc! {"
|
||||||
|
//
|
||||||
|
// ˇ
|
||||||
|
"});
|
||||||
|
|
||||||
|
cx.set_state(indoc! {"
|
||||||
|
///ˇ
|
||||||
|
"});
|
||||||
|
cx.update_editor(|e, window, cx| e.newline(&Newline, window, cx));
|
||||||
|
cx.assert_editor_state(indoc! {"
|
||||||
|
///
|
||||||
|
/// ˇ
|
||||||
|
"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[gpui::test]
|
#[gpui::test]
|
||||||
async fn test_newline_documentation_comments(cx: &mut TestAppContext) {
|
async fn test_newline_documentation_comments(cx: &mut TestAppContext) {
|
||||||
init_test(cx, |settings| {
|
init_test(cx, |settings| {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue