Fix panic when multi-cursor edit attempted in deleted hunk (#23633)
Release Notes: - N/A
This commit is contained in:
parent
ba16b4eb65
commit
b7c6ffa6c2
4 changed files with 48 additions and 3 deletions
|
@ -372,7 +372,6 @@ gpui::actions!(
|
||||||
ToggleAutoSignatureHelp,
|
ToggleAutoSignatureHelp,
|
||||||
ToggleGitBlame,
|
ToggleGitBlame,
|
||||||
ToggleGitBlameInline,
|
ToggleGitBlameInline,
|
||||||
ToggleSelectedDiffHunks,
|
|
||||||
ToggleIndentGuides,
|
ToggleIndentGuides,
|
||||||
ToggleInlayHints,
|
ToggleInlayHints,
|
||||||
ToggleInlineCompletions,
|
ToggleInlineCompletions,
|
||||||
|
@ -397,3 +396,4 @@ gpui::actions!(
|
||||||
action_as!(go_to_line, ToggleGoToLine as Toggle);
|
action_as!(go_to_line, ToggleGoToLine as Toggle);
|
||||||
|
|
||||||
action_with_deprecated_aliases!(editor, OpenSelectedFilename, ["editor::OpenFile"]);
|
action_with_deprecated_aliases!(editor, OpenSelectedFilename, ["editor::OpenFile"]);
|
||||||
|
action_with_deprecated_aliases!(editor, ToggleSelectedDiffHunks, ["editor::ToggleDiffHunk"]);
|
||||||
|
|
|
@ -3724,6 +3724,9 @@ impl Editor {
|
||||||
}
|
}
|
||||||
|
|
||||||
let position = self.selections.newest_anchor().head();
|
let position = self.selections.newest_anchor().head();
|
||||||
|
if position.diff_base_anchor.is_some() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let (buffer, buffer_position) =
|
let (buffer, buffer_position) =
|
||||||
if let Some(output) = self.buffer.read(cx).text_anchor_for_position(position, cx) {
|
if let Some(output) = self.buffer.read(cx).text_anchor_for_position(position, cx) {
|
||||||
output
|
output
|
||||||
|
@ -4391,6 +4394,9 @@ impl Editor {
|
||||||
fn refresh_code_actions(&mut self, cx: &mut ViewContext<Self>) -> Option<()> {
|
fn refresh_code_actions(&mut self, cx: &mut ViewContext<Self>) -> Option<()> {
|
||||||
let buffer = self.buffer.read(cx);
|
let buffer = self.buffer.read(cx);
|
||||||
let newest_selection = self.selections.newest_anchor().clone();
|
let newest_selection = self.selections.newest_anchor().clone();
|
||||||
|
if newest_selection.head().diff_base_anchor.is_some() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
let (start_buffer, start) = buffer.text_anchor_for_position(newest_selection.start, cx)?;
|
let (start_buffer, start) = buffer.text_anchor_for_position(newest_selection.start, cx)?;
|
||||||
let (end_buffer, end) = buffer.text_anchor_for_position(newest_selection.end, cx)?;
|
let (end_buffer, end) = buffer.text_anchor_for_position(newest_selection.end, cx)?;
|
||||||
if start_buffer != end_buffer {
|
if start_buffer != end_buffer {
|
||||||
|
|
|
@ -13229,6 +13229,45 @@ async fn test_toggling_adjacent_diff_hunks(cx: &mut TestAppContext) {
|
||||||
"}
|
"}
|
||||||
.to_string(),
|
.to_string(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
cx.set_state(indoc! { "
|
||||||
|
one
|
||||||
|
TWO
|
||||||
|
ˇthree
|
||||||
|
four
|
||||||
|
five
|
||||||
|
"});
|
||||||
|
cx.run_until_parked();
|
||||||
|
cx.update_editor(|editor, cx| {
|
||||||
|
editor.toggle_selected_diff_hunks(&Default::default(), cx);
|
||||||
|
});
|
||||||
|
|
||||||
|
cx.assert_state_with_diff(
|
||||||
|
indoc! { "
|
||||||
|
one
|
||||||
|
- two
|
||||||
|
+ TWO
|
||||||
|
ˇthree
|
||||||
|
four
|
||||||
|
five
|
||||||
|
"}
|
||||||
|
.to_string(),
|
||||||
|
);
|
||||||
|
cx.update_editor(|editor, cx| {
|
||||||
|
editor.move_up(&Default::default(), cx);
|
||||||
|
editor.move_up(&Default::default(), cx);
|
||||||
|
editor.toggle_selected_diff_hunks(&Default::default(), cx);
|
||||||
|
});
|
||||||
|
cx.assert_state_with_diff(
|
||||||
|
indoc! { "
|
||||||
|
one
|
||||||
|
ˇTWO
|
||||||
|
three
|
||||||
|
four
|
||||||
|
five
|
||||||
|
"}
|
||||||
|
.to_string(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[gpui::test]
|
#[gpui::test]
|
||||||
|
|
|
@ -796,7 +796,7 @@ impl MultiBuffer {
|
||||||
for (ix, (range, new_text)) in edits.into_iter().enumerate() {
|
for (ix, (range, new_text)) in edits.into_iter().enumerate() {
|
||||||
let original_indent_column = original_indent_columns.get(ix).copied().unwrap_or(0);
|
let original_indent_column = original_indent_columns.get(ix).copied().unwrap_or(0);
|
||||||
|
|
||||||
cursor.seek_forward(&range.start);
|
cursor.seek(&range.start);
|
||||||
let mut start_region = cursor.region().expect("start offset out of bounds");
|
let mut start_region = cursor.region().expect("start offset out of bounds");
|
||||||
if !start_region.is_main_buffer {
|
if !start_region.is_main_buffer {
|
||||||
cursor.next();
|
cursor.next();
|
||||||
|
@ -2266,7 +2266,7 @@ impl MultiBuffer {
|
||||||
diff_hunk.buffer_range.start,
|
diff_hunk.buffer_range.start,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if diff_hunk.row_range.start.0 == peek_end.row
|
if diff_hunk.row_range.start.0 <= peek_end.row
|
||||||
&& diff_hunk.excerpt_id == end.excerpt_id
|
&& diff_hunk.excerpt_id == end.excerpt_id
|
||||||
{
|
{
|
||||||
end = Anchor::in_buffer(
|
end = Anchor::in_buffer(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue