Detailed changes
@@ -470,7 +470,7 @@ impl Item for AgentDiffPane {
Some(Icon::new(IconName::ZedAssistant).color(Color::Muted))
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -754,7 +754,7 @@ impl Item for AgentRegistryPage {
false
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
f(*event)
}
}
@@ -2712,7 +2712,7 @@ impl Item for TextThreadEditor {
util::truncate_and_trailoff(&self.title(cx), MAX_TAB_TITLE_LEN).into()
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(item::ItemEvent)) {
match event {
EditorEvent::Edited { .. } => {
f(item::ItemEvent::Edit);
@@ -131,7 +131,7 @@ impl AskPassSession {
})
}
};
- let askpass_task = PasswordProxy::new(get_password, executor.clone()).await?;
+ let askpass_task = PasswordProxy::new(Box::new(get_password), executor.clone()).await?;
Ok(Self {
#[cfg(target_os = "windows")]
@@ -192,10 +192,12 @@ pub struct PasswordProxy {
impl PasswordProxy {
pub async fn new(
- mut get_password: impl FnMut(String) -> Task<ControlFlow<(), Result<EncryptedPassword>>>
- + 'static
- + Send
- + Sync,
+ mut get_password: Box<
+ dyn FnMut(String) -> Task<ControlFlow<(), Result<EncryptedPassword>>>
+ + 'static
+ + Send
+ + Sync,
+ >,
executor: BackgroundExecutor,
) -> Result<Self> {
let temp_dir = tempfile::Builder::new().prefix("zed-askpass").tempdir()?;
@@ -553,7 +553,7 @@ impl Item for ChannelView {
self.editor.read(cx).pixel_position_of_cursor(cx)
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
}
@@ -757,7 +757,7 @@ impl Item for ComponentPreview {
})
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
f(*event)
}
@@ -986,7 +986,7 @@ pub fn init(cx: &mut App) {
impl Item for DapLogView {
type Event = EditorEvent;
- fn to_item_events(event: &Self::Event, f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -325,7 +325,7 @@ impl Focusable for StackTraceView {
impl Item for StackTraceView {
type Event = EditorEvent;
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -866,7 +866,7 @@ impl Item for BufferDiagnosticsEditor {
Some("Buffer Diagnostics Opened")
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
}
@@ -717,7 +717,7 @@ impl Focusable for ProjectDiagnosticsEditor {
impl Item for ProjectDiagnosticsEditor {
type Event = EditorEvent;
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -124,7 +124,10 @@ impl Editor {
);
if invalidate {
- self.clear_highlights_with(|key| matches!(key, HighlightKey::ColorizeBracket(_)), cx);
+ self.clear_highlights_with(
+ &mut |key| matches!(key, HighlightKey::ColorizeBracket(_)),
+ cx,
+ );
}
let editor_background = cx.theme().colors().editor_background;
@@ -493,7 +493,7 @@ impl DisplayMap {
new: WrapRow(0)..snapshot.max_point().row() + WrapRow(1),
}]);
self.block_map.deferred_edits.set(edits);
- self.block_map.retain_blocks_raw(|block| {
+ self.block_map.retain_blocks_raw(&mut |block| {
if companion
.read(cx)
.lhs_custom_block_to_balancing_block
@@ -528,8 +528,9 @@ impl DisplayMap {
.wrap_map
.update(cx, |wrap_map, cx| wrap_map.sync(snapshot, edits, cx));
- self.block_map
- .retain_blocks_raw(|block| !matches!(block.placement, BlockPlacement::Replace(_)));
+ self.block_map.retain_blocks_raw(&mut |block| {
+ !matches!(block.placement, BlockPlacement::Replace(_))
+ });
snapshot
};
@@ -1268,7 +1269,7 @@ impl DisplayMap {
cleared
}
- pub fn clear_highlights_with(&mut self, mut f: impl FnMut(&HighlightKey) -> bool) -> bool {
+ pub fn clear_highlights_with(&mut self, f: &mut dyn FnMut(&HighlightKey) -> bool) -> bool {
let mut cleared = false;
self.text_highlights.retain(|k, _| {
let b = !f(k);
@@ -736,7 +736,7 @@ impl BlockMap {
}
// Warning: doesn't sync the block map, use advisedly
- pub(crate) fn retain_blocks_raw(&mut self, mut pred: impl FnMut(&Arc<CustomBlock>) -> bool) {
+ pub(crate) fn retain_blocks_raw(&mut self, pred: &mut dyn FnMut(&Arc<CustomBlock>) -> bool) {
let mut ids_to_remove = HashSet::default();
self.custom_blocks.retain(|block| {
let keep = pred(block);
@@ -1275,8 +1275,8 @@ impl BlockMap {
.row()
};
fn determine_spacer(
- our_wrapper: &mut impl FnMut(Point, Bias) -> WrapRow,
- companion_wrapper: &mut impl FnMut(Point, Bias) -> WrapRow,
+ our_wrapper: &mut dyn FnMut(Point, Bias) -> WrapRow,
+ companion_wrapper: &mut dyn FnMut(Point, Bias) -> WrapRow,
our_point: Point,
their_point: Point,
delta: i32,
@@ -5317,7 +5317,7 @@ impl Editor {
editor.change_selections(Default::default(), window, cx, |s| {
let mut index = 0;
- s.move_cursors_with(|map, _, _| {
+ s.move_cursors_with(&mut |map, _, _| {
let row = rows[index];
index += 1;
@@ -5398,7 +5398,7 @@ impl Editor {
editor.change_selections(Default::default(), window, cx, |s| {
let mut index = 0;
- s.move_cursors_with(|map, _, _| {
+ s.move_cursors_with(&mut |map, _, _| {
let row = rows[index];
index += 1;
@@ -8526,7 +8526,7 @@ impl Editor {
let mut suggested_indent = None;
multibuffer.suggested_indents_callback(
cursor_point.row..cursor_point.row + 1,
- |_, indent| {
+ &mut |_, indent| {
suggested_indent = Some(indent);
ControlFlow::Break(())
},
@@ -10788,7 +10788,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
let cursor = movement::right(map, selection.head());
selection.end = cursor;
@@ -13114,7 +13114,7 @@ impl Editor {
self.transact(window, cx, |this, window, cx| {
let edits = this.change_selections(Default::default(), window, cx, |s| {
let mut edits: Vec<(Range<MultiBufferOffset>, String)> = Default::default();
- s.move_with(|display_map, selection| {
+ s.move_with(&mut |display_map, selection| {
if !selection.is_empty() {
return;
}
@@ -13617,7 +13617,7 @@ impl Editor {
pub fn kill_ring_cut(&mut self, _: &KillRingCut, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|snapshot, sel| {
+ s.move_with(&mut |snapshot, sel| {
if sel.is_empty() {
sel.end = DisplayPoint::new(sel.end.row(), snapshot.line_len(sel.end.row()));
}
@@ -14058,7 +14058,7 @@ impl Editor {
pub fn move_left(&mut self, _: &MoveLeft, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let cursor = if selection.is_empty() {
movement::left(map, selection.start)
} else {
@@ -14072,14 +14072,14 @@ impl Editor {
pub fn select_left(&mut self, _: &SelectLeft, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| (movement::left(map, head), SelectionGoal::None));
+ s.move_heads_with(&mut |map, head, _| (movement::left(map, head), SelectionGoal::None));
})
}
pub fn move_right(&mut self, _: &MoveRight, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let cursor = if selection.is_empty() {
movement::right(map, selection.end)
} else {
@@ -14093,7 +14093,9 @@ impl Editor {
pub fn select_right(&mut self, _: &SelectRight, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| (movement::right(map, head), SelectionGoal::None));
+ s.move_heads_with(&mut |map, head, _| {
+ (movement::right(map, head), SelectionGoal::None)
+ });
});
}
@@ -14114,7 +14116,7 @@ impl Editor {
let first_selection = self.selections.first_anchor();
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if !selection.is_empty() {
selection.goal = SelectionGoal::None;
}
@@ -14155,7 +14157,7 @@ impl Editor {
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if !selection.is_empty() {
selection.goal = SelectionGoal::None;
}
@@ -14192,7 +14194,7 @@ impl Editor {
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if !selection.is_empty() {
selection.goal = SelectionGoal::None;
}
@@ -14218,7 +14220,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, goal| {
+ s.move_heads_with(&mut |map, head, goal| {
movement::down_by_rows(map, head, action.lines, goal, false, text_layout_details)
})
})
@@ -14233,7 +14235,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, goal| {
+ s.move_heads_with(&mut |map, head, goal| {
movement::up_by_rows(map, head, action.lines, goal, false, text_layout_details)
})
})
@@ -14254,7 +14256,7 @@ impl Editor {
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, goal| {
+ s.move_heads_with(&mut |map, head, goal| {
movement::up_by_rows(map, head, row_count, goal, false, text_layout_details)
})
})
@@ -14300,7 +14302,7 @@ impl Editor {
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(effects, window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if !selection.is_empty() {
selection.goal = SelectionGoal::None;
}
@@ -14321,7 +14323,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, goal| {
+ s.move_heads_with(&mut |map, head, goal| {
movement::up(map, head, goal, false, text_layout_details)
})
})
@@ -14342,7 +14344,7 @@ impl Editor {
let first_selection = self.selections.first_anchor();
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if !selection.is_empty() {
selection.goal = SelectionGoal::None;
}
@@ -14378,7 +14380,7 @@ impl Editor {
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, goal| {
+ s.move_heads_with(&mut |map, head, goal| {
movement::down_by_rows(map, head, row_count, goal, false, text_layout_details)
})
})
@@ -14423,7 +14425,7 @@ impl Editor {
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(effects, window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if !selection.is_empty() {
selection.goal = SelectionGoal::None;
}
@@ -14444,7 +14446,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, goal| {
+ s.move_heads_with(&mut |map, head, goal| {
movement::down(map, head, goal, false, text_layout_details)
})
});
@@ -14534,7 +14536,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, head, _| {
+ s.move_cursors_with(&mut |map, head, _| {
(
movement::previous_word_start(map, head),
SelectionGoal::None,
@@ -14551,7 +14553,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, head, _| {
+ s.move_cursors_with(&mut |map, head, _| {
(
movement::previous_subword_start(map, head),
SelectionGoal::None,
@@ -14568,7 +14570,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::previous_word_start(map, head),
SelectionGoal::None,
@@ -14585,7 +14587,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::previous_subword_start(map, head),
SelectionGoal::None,
@@ -14604,7 +14606,7 @@ impl Editor {
self.transact(window, cx, |this, window, cx| {
this.select_autoclose_pair(window, cx);
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
let mut cursor = if action.ignore_newlines {
movement::previous_word_start(map, selection.head())
@@ -14635,7 +14637,7 @@ impl Editor {
self.transact(window, cx, |this, window, cx| {
this.select_autoclose_pair(window, cx);
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
let mut cursor = if action.ignore_newlines {
movement::previous_subword_start(map, selection.head())
@@ -14664,7 +14666,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, head, _| {
+ s.move_cursors_with(&mut |map, head, _| {
(movement::next_word_end(map, head), SelectionGoal::None)
});
})
@@ -14678,7 +14680,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, head, _| {
+ s.move_cursors_with(&mut |map, head, _| {
(movement::next_subword_end(map, head), SelectionGoal::None)
});
})
@@ -14692,7 +14694,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(movement::next_word_end(map, head), SelectionGoal::None)
});
})
@@ -14706,7 +14708,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(movement::next_subword_end(map, head), SelectionGoal::None)
});
})
@@ -14721,7 +14723,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
let mut cursor = if action.ignore_newlines {
movement::next_word_end(map, selection.head())
@@ -14751,7 +14753,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
let mut cursor = if action.ignore_newlines {
movement::next_subword_end(map, selection.head())
@@ -14780,7 +14782,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, head, _| {
+ s.move_cursors_with(&mut |map, head, _| {
(
movement::indented_line_beginning(
map,
@@ -14802,7 +14804,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::indented_line_beginning(
map,
@@ -14825,7 +14827,7 @@ impl Editor {
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
selection.reversed = true;
});
});
@@ -14850,7 +14852,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, head, _| {
+ s.move_cursors_with(&mut |map, head, _| {
(
movement::line_end(map, head, action.stop_at_soft_wraps),
SelectionGoal::None,
@@ -14867,7 +14869,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::line_end(map, head, action.stop_at_soft_wraps),
SelectionGoal::None,
@@ -14912,7 +14914,7 @@ impl Editor {
);
if !action.stop_at_newlines {
this.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_, sel| {
+ s.move_with(&mut |_, sel| {
if sel.is_empty() {
sel.end = DisplayPoint::new(sel.end.row() + 1_u32, 0);
}
@@ -14937,7 +14939,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
movement::start_of_paragraph(map, selection.head(), 1),
SelectionGoal::None,
@@ -14958,7 +14960,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
movement::end_of_paragraph(map, selection.head(), 1),
SelectionGoal::None,
@@ -14979,7 +14981,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::start_of_paragraph(map, head, 1),
SelectionGoal::None,
@@ -15000,7 +15002,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::end_of_paragraph(map, head, 1),
SelectionGoal::None,
@@ -15021,7 +15023,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
movement::start_of_excerpt(
map,
@@ -15046,7 +15048,7 @@ impl Editor {
}
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
movement::start_of_excerpt(
map,
@@ -15071,7 +15073,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
movement::end_of_excerpt(
map,
@@ -15096,7 +15098,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
movement::end_of_excerpt(
map,
@@ -15121,7 +15123,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::start_of_excerpt(map, head, workspace::searchable::Direction::Prev),
SelectionGoal::None,
@@ -15142,7 +15144,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::start_of_excerpt(map, head, workspace::searchable::Direction::Next),
SelectionGoal::None,
@@ -15163,7 +15165,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::end_of_excerpt(map, head, workspace::searchable::Direction::Next),
SelectionGoal::None,
@@ -15184,7 +15186,7 @@ impl Editor {
}
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_heads_with(|map, head, _| {
+ s.move_heads_with(&mut |map, head, _| {
(
movement::end_of_excerpt(map, head, workspace::searchable::Direction::Prev),
SelectionGoal::None,
@@ -16407,7 +16409,7 @@ impl Editor {
let snapshot = this.buffer.read(cx).snapshot(cx);
this.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|display_snapshot, display_point, _| {
+ s.move_cursors_with(&mut |display_snapshot, display_point, _| {
let mut point = display_point.to_point(display_snapshot);
point.row += 1;
point = snapshot.clip_point(point, Bias::Left);
@@ -17259,7 +17261,7 @@ impl Editor {
) {
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Default::default(), window, cx, |s| {
- s.move_offsets_with(|snapshot, selection| {
+ s.move_offsets_with(&mut |snapshot, selection| {
let Some(enclosing_bracket_ranges) =
snapshot.enclosing_bracket_ranges(selection.start..selection.end)
else {
@@ -19762,7 +19764,7 @@ impl Editor {
pub fn set_mark(&mut self, _: &actions::SetMark, window: &mut Window, cx: &mut Context<Self>) {
if self.selection_mark_mode {
self.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|_, sel| {
+ s.move_with(&mut |_, sel| {
sel.collapse_to(sel.head(), SelectionGoal::None);
});
})
@@ -19778,7 +19780,7 @@ impl Editor {
cx: &mut Context<Self>,
) {
self.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|_, sel| {
+ s.move_with(&mut |_, sel| {
if sel.start != sel.end {
sel.reversed = !sel.reversed
}
@@ -23855,7 +23857,7 @@ impl Editor {
pub fn clear_highlights_with(
&mut self,
- f: impl FnMut(&HighlightKey) -> bool,
+ f: &mut dyn FnMut(&HighlightKey) -> bool,
cx: &mut Context<Self>,
) {
let cleared = self
@@ -227,7 +227,7 @@ impl Editor {
let mut supports = false;
self.buffer().update(cx, |this, cx| {
- this.for_each_buffer(|buffer| {
+ this.for_each_buffer(&mut |buffer| {
supports |= provider.supports_inlay_hints(buffer, cx);
});
});
@@ -757,7 +757,7 @@ impl Item for Editor {
) {
self.buffer
.read(cx)
- .for_each_buffer(|buffer| f(buffer.entity_id(), buffer.read(cx)));
+ .for_each_buffer(&mut |buffer| f(buffer.entity_id(), buffer.read(cx)));
}
fn buffer_kind(&self, cx: &App) -> ItemBufferKind {
@@ -1004,7 +1004,7 @@ impl Item for Editor {
}
}
- fn to_item_events(event: &EditorEvent, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
match event {
EditorEvent::Saved | EditorEvent::TitleChanged => {
f(ItemEvent::UpdateTab);
@@ -311,7 +311,7 @@ pub(crate) fn refresh_enabled_in_any_buffer(
editor.jsx_tag_auto_close_enabled_in_any_buffer = {
let multi_buffer = multi_buffer.read(cx);
let mut found_enabled = false;
- multi_buffer.for_each_buffer(|buffer| {
+ multi_buffer.for_each_buffer(&mut |buffer| {
if found_enabled {
return;
}
@@ -268,7 +268,7 @@ pub fn previous_word_start(map: &DisplaySnapshot, point: DisplayPoint) -> Displa
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
let mut is_first_iteration = true;
- find_preceding_boundary_display_point(map, point, FindRange::MultiLine, |left, right| {
+ find_preceding_boundary_display_point(map, point, FindRange::MultiLine, &mut |left, right| {
// Make alt-left skip punctuation to respect VSCode behaviour. For example: hello.| goes to |hello.
if is_first_iteration
&& classifier.is_punctuation(right)
@@ -291,7 +291,7 @@ pub fn previous_word_start_or_newline(map: &DisplaySnapshot, point: DisplayPoint
let raw_point = point.to_point(map);
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
- find_preceding_boundary_display_point(map, point, FindRange::MultiLine, |left, right| {
+ find_preceding_boundary_display_point(map, point, FindRange::MultiLine, &mut |left, right| {
(classifier.kind(left) != classifier.kind(right) && !classifier.is_whitespace(right))
|| left == '\n'
|| right == '\n'
@@ -407,7 +407,7 @@ pub fn previous_subword_start(map: &DisplaySnapshot, point: DisplayPoint) -> Dis
let raw_point = point.to_point(map);
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
- find_preceding_boundary_display_point(map, point, FindRange::MultiLine, |left, right| {
+ find_preceding_boundary_display_point(map, point, FindRange::MultiLine, &mut |left, right| {
is_subword_start(left, right, &classifier) || left == '\n'
})
}
@@ -422,7 +422,7 @@ pub fn previous_subword_start_or_newline(
let raw_point = point.to_point(map);
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
- find_preceding_boundary_display_point(map, point, FindRange::MultiLine, |left, right| {
+ find_preceding_boundary_display_point(map, point, FindRange::MultiLine, &mut |left, right| {
(is_subword_start(left, right, &classifier)) || left == '\n' || right == '\n'
})
}
@@ -441,7 +441,7 @@ pub fn next_word_end(map: &DisplaySnapshot, point: DisplayPoint) -> DisplayPoint
let raw_point = point.to_point(map);
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
let mut is_first_iteration = true;
- find_boundary(map, point, FindRange::MultiLine, |left, right| {
+ find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
// Make alt-right skip punctuation to respect VSCode behaviour. For example: |.hello goes to .hello|
if is_first_iteration
&& classifier.is_punctuation(left)
@@ -465,7 +465,7 @@ pub fn next_word_end_or_newline(map: &DisplaySnapshot, point: DisplayPoint) -> D
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
let mut on_starting_row = true;
- find_boundary(map, point, FindRange::MultiLine, |left, right| {
+ find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
if left == '\n' {
on_starting_row = false;
}
@@ -483,7 +483,7 @@ pub fn next_subword_end(map: &DisplaySnapshot, point: DisplayPoint) -> DisplayPo
let raw_point = point.to_point(map);
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
- find_boundary(map, point, FindRange::MultiLine, |left, right| {
+ find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
is_subword_end(left, right, &classifier) || right == '\n'
})
}
@@ -496,7 +496,7 @@ pub fn next_subword_end_or_newline(map: &DisplaySnapshot, point: DisplayPoint) -
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
let mut on_starting_row = true;
- find_boundary(map, point, FindRange::MultiLine, |left, right| {
+ find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
if left == '\n' {
on_starting_row = false;
}
@@ -655,7 +655,7 @@ pub fn find_preceding_boundary_point(
buffer_snapshot: &MultiBufferSnapshot,
from: Point,
find_range: FindRange,
- mut is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> Point {
let mut prev_ch = None;
let mut offset = from.to_offset(buffer_snapshot);
@@ -685,7 +685,7 @@ pub fn find_preceding_boundary_display_point(
map: &DisplaySnapshot,
from: DisplayPoint,
find_range: FindRange,
- is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> DisplayPoint {
let result = find_preceding_boundary_point(
map.buffer_snapshot(),
@@ -705,7 +705,7 @@ pub fn find_boundary_point(
map: &DisplaySnapshot,
from: DisplayPoint,
find_range: FindRange,
- mut is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
return_point_before_boundary: bool,
) -> DisplayPoint {
let mut offset = from.to_offset(map, Bias::Right);
@@ -735,7 +735,7 @@ pub fn find_boundary_point(
pub fn find_preceding_boundary_trail(
map: &DisplaySnapshot,
head: DisplayPoint,
- mut is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> (Option<DisplayPoint>, DisplayPoint) {
let mut offset = head.to_offset(map, Bias::Left);
let mut trail_offset = None;
@@ -783,7 +783,7 @@ pub fn find_preceding_boundary_trail(
pub fn find_boundary_trail(
map: &DisplaySnapshot,
head: DisplayPoint,
- mut is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> (Option<DisplayPoint>, DisplayPoint) {
let mut offset = head.to_offset(map, Bias::Right);
let mut trail_offset = None;
@@ -831,7 +831,7 @@ pub fn find_boundary(
map: &DisplaySnapshot,
from: DisplayPoint,
find_range: FindRange,
- is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> DisplayPoint {
find_boundary_point(map, from, find_range, is_boundary, false)
}
@@ -840,7 +840,7 @@ pub fn find_boundary_exclusive(
map: &DisplaySnapshot,
from: DisplayPoint,
find_range: FindRange,
- is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> DisplayPoint {
find_boundary_point(map, from, find_range, is_boundary, true)
}
@@ -1001,7 +1001,7 @@ mod tests {
fn assert(
marked_text: &str,
cx: &mut gpui::App,
- is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) {
let (snapshot, display_points) = marked_display_snapshot(marked_text, cx);
assert_eq!(
@@ -1015,14 +1015,14 @@ mod tests {
);
}
- assert("abcˇdef\ngh\nijˇk", cx, |left, right| {
+ assert("abcˇdef\ngh\nijˇk", cx, &mut |left, right| {
left == 'c' && right == 'd'
});
- assert("abcdef\nˇgh\nijˇk", cx, |left, right| {
+ assert("abcdef\nˇgh\nijˇk", cx, &mut |left, right| {
left == '\n' && right == 'g'
});
let mut line_count = 0;
- assert("abcdef\nˇgh\nijˇk", cx, |left, _| {
+ assert("abcdef\nˇgh\nijˇk", cx, &mut |left, _| {
if left == '\n' {
line_count += 1;
line_count == 2
@@ -1095,7 +1095,7 @@ mod tests {
&snapshot,
buffer_snapshot.len().to_display_point(&snapshot),
FindRange::MultiLine,
- |left, _| left == 'e',
+ &mut |left, _| left == 'e',
),
snapshot
.buffer_snapshot()
@@ -1183,7 +1183,7 @@ mod tests {
fn assert(
marked_text: &str,
cx: &mut gpui::App,
- is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) {
let (snapshot, display_points) = marked_display_snapshot(marked_text, cx);
assert_eq!(
@@ -1197,14 +1197,14 @@ mod tests {
);
}
- assert("abcˇdef\ngh\nijˇk", cx, |left, right| {
+ assert("abcˇdef\ngh\nijˇk", cx, &mut |left, right| {
left == 'j' && right == 'k'
});
- assert("abˇcdef\ngh\nˇijk", cx, |left, right| {
+ assert("abˇcdef\ngh\nˇijk", cx, &mut |left, right| {
left == '\n' && right == 'i'
});
let mut line_count = 0;
- assert("abcˇdef\ngh\nˇijk", cx, |left, _| {
+ assert("abcˇdef\ngh\nˇijk", cx, &mut |left, _| {
if left == '\n' {
line_count += 1;
line_count == 2
@@ -966,7 +966,7 @@ impl<'snap, 'a> MutableSelectionsCollection<'snap, 'a> {
pub fn move_with(
&mut self,
- mut move_selection: impl FnMut(&DisplaySnapshot, &mut Selection<DisplayPoint>),
+ move_selection: &mut dyn FnMut(&DisplaySnapshot, &mut Selection<DisplayPoint>),
) {
let mut changed = false;
let display_map = self.display_snapshot();
@@ -990,7 +990,7 @@ impl<'snap, 'a> MutableSelectionsCollection<'snap, 'a> {
pub fn move_offsets_with(
&mut self,
- mut move_selection: impl FnMut(&MultiBufferSnapshot, &mut Selection<MultiBufferOffset>),
+ move_selection: &mut dyn FnMut(&MultiBufferSnapshot, &mut Selection<MultiBufferOffset>),
) {
let mut changed = false;
let display_map = self.display_snapshot();
@@ -1015,13 +1015,13 @@ impl<'snap, 'a> MutableSelectionsCollection<'snap, 'a> {
pub fn move_heads_with(
&mut self,
- mut update_head: impl FnMut(
+ update_head: &mut dyn FnMut(
&DisplaySnapshot,
DisplayPoint,
SelectionGoal,
) -> (DisplayPoint, SelectionGoal),
) {
- self.move_with(|map, selection| {
+ self.move_with(&mut |map, selection| {
let (new_head, new_goal) = update_head(map, selection.head(), selection.goal);
selection.set_head(new_head, new_goal);
});
@@ -1029,13 +1029,13 @@ impl<'snap, 'a> MutableSelectionsCollection<'snap, 'a> {
pub fn move_cursors_with(
&mut self,
- mut update_cursor_position: impl FnMut(
+ update_cursor_position: &mut dyn FnMut(
&DisplaySnapshot,
DisplayPoint,
SelectionGoal,
) -> (DisplayPoint, SelectionGoal),
) {
- self.move_with(|map, selection| {
+ self.move_with(&mut |map, selection| {
let (cursor, new_goal) = update_cursor_position(map, selection.head(), selection.goal);
selection.collapse_to(cursor, new_goal)
});
@@ -1043,13 +1043,13 @@ impl<'snap, 'a> MutableSelectionsCollection<'snap, 'a> {
pub fn maybe_move_cursors_with(
&mut self,
- mut update_cursor_position: impl FnMut(
+ update_cursor_position: &mut dyn FnMut(
&DisplaySnapshot,
DisplayPoint,
SelectionGoal,
) -> Option<(DisplayPoint, SelectionGoal)>,
) {
- self.move_cursors_with(|map, point, goal| {
+ self.move_cursors_with(&mut |map, point, goal| {
update_cursor_position(map, point, goal).unwrap_or((point, goal))
})
}
@@ -83,7 +83,7 @@ impl Editor {
let mut supports = false;
self.buffer().update(cx, |this, cx| {
- this.for_each_buffer(|buffer| {
+ this.for_each_buffer(&mut |buffer| {
supports |= provider.supports_semantic_tokens(buffer, cx);
});
});
@@ -1616,7 +1616,7 @@ impl Item for SplittableEditor {
self.rhs_editor.read(cx).tab_content(params, window, cx)
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -1883,7 +1883,7 @@ impl Item for ExtensionsPage {
false
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
f(*event)
}
}
@@ -1816,7 +1816,7 @@ impl Item for GitGraph {
false
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(ItemEvent)) {
f(*event)
}
}
@@ -958,7 +958,7 @@ impl Item for CommitView {
}))))
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -259,7 +259,7 @@ impl Item for FileDiffView {
Some(format!("{old_path} ↔ {new_path}").into())
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -552,7 +552,7 @@ impl Render for FileHistoryView {
impl Item for FileHistoryView {
type Event = ItemEvent;
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(ItemEvent)) {
f(*event)
}
@@ -281,7 +281,7 @@ impl Item for MultiDiffView {
self.title()
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -861,7 +861,7 @@ impl Item for ProjectDiff {
Some(Icon::new(IconName::GitBranch).color(Color::Muted))
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -316,7 +316,7 @@ impl Item for TextDiffView {
self.path.clone()
}
- fn to_item_events(event: &EditorEvent, f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &EditorEvent, f: &mut dyn FnMut(ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -479,7 +479,7 @@ impl EventEmitter<ImageViewEvent> for ImageView {}
impl Item for ImageView {
type Event = ImageViewEvent;
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
match event {
ImageViewEvent::TitleChanged => {
f(workspace::item::ItemEvent::UpdateTab);
@@ -162,7 +162,7 @@ pub fn line_diff(old_text: &str, new_text: &str) -> Vec<(Range<u32>, Range<u32>)
lines_with_terminator(old_text),
lines_with_terminator(new_text),
);
- diff_internal(&input, |_, _, old_rows, new_rows| {
+ diff_internal(&input, &mut |_, _, old_rows, new_rows| {
edits.push((old_rows, new_rows));
});
edits
@@ -194,7 +194,7 @@ pub fn word_diff_ranges(
let mut old_ranges: Vec<Range<usize>> = Vec::new();
let mut new_ranges: Vec<Range<usize>> = Vec::new();
- diff_internal(&input, |old_byte_range, new_byte_range, _, _| {
+ diff_internal(&input, &mut |old_byte_range, new_byte_range, _, _| {
if !old_byte_range.is_empty() {
if let Some(last) = old_ranges.last_mut()
&& last.end >= old_byte_range.start
@@ -227,7 +227,7 @@ pub fn char_diff<'a>(old_text: &'a str, new_text: &'a str) -> Vec<(Range<usize>,
input.update_before(tokenize_chars(old_text));
input.update_after(tokenize_chars(new_text));
let mut edits: Vec<(Range<usize>, &str)> = Vec::new();
- diff_internal(&input, |old_byte_range, new_byte_range, _, _| {
+ diff_internal(&input, &mut |old_byte_range, new_byte_range, _, _| {
let replacement = if new_byte_range.is_empty() {
""
} else {
@@ -268,49 +268,49 @@ pub fn text_diff_with_options(
lines_with_terminator(old_text),
lines_with_terminator(new_text),
);
- diff_internal(
- &input,
- |old_byte_range, new_byte_range, old_rows, new_rows| {
- if should_perform_word_diff_within_hunk(
- &old_rows,
- &old_byte_range,
- &new_rows,
- &new_byte_range,
- &options,
- ) {
- let old_offset = old_byte_range.start;
- let new_offset = new_byte_range.start;
- hunk_input.clear();
- hunk_input.update_before(tokenize(
- &old_text[old_byte_range],
- options.language_scope.clone(),
- ));
- hunk_input.update_after(tokenize(
- &new_text[new_byte_range],
- options.language_scope.clone(),
- ));
- diff_internal(&hunk_input, |old_byte_range, new_byte_range, _, _| {
- let old_byte_range =
- old_offset + old_byte_range.start..old_offset + old_byte_range.end;
- let new_byte_range =
- new_offset + new_byte_range.start..new_offset + new_byte_range.end;
- let replacement_text = if new_byte_range.is_empty() {
- empty.clone()
- } else {
- new_text[new_byte_range].into()
- };
- edits.push((old_byte_range, replacement_text));
- });
- } else {
+ diff_internal(&input, &mut |old_byte_range,
+ new_byte_range,
+ old_rows,
+ new_rows| {
+ if should_perform_word_diff_within_hunk(
+ &old_rows,
+ &old_byte_range,
+ &new_rows,
+ &new_byte_range,
+ &options,
+ ) {
+ let old_offset = old_byte_range.start;
+ let new_offset = new_byte_range.start;
+ hunk_input.clear();
+ hunk_input.update_before(tokenize(
+ &old_text[old_byte_range],
+ options.language_scope.clone(),
+ ));
+ hunk_input.update_after(tokenize(
+ &new_text[new_byte_range],
+ options.language_scope.clone(),
+ ));
+ diff_internal(&hunk_input, &mut |old_byte_range, new_byte_range, _, _| {
+ let old_byte_range =
+ old_offset + old_byte_range.start..old_offset + old_byte_range.end;
+ let new_byte_range =
+ new_offset + new_byte_range.start..new_offset + new_byte_range.end;
let replacement_text = if new_byte_range.is_empty() {
empty.clone()
} else {
new_text[new_byte_range].into()
};
edits.push((old_byte_range, replacement_text));
- }
- },
- );
+ });
+ } else {
+ let replacement_text = if new_byte_range.is_empty() {
+ empty.clone()
+ } else {
+ new_text[new_byte_range].into()
+ };
+ edits.push((old_byte_range, replacement_text));
+ }
+ });
edits
}
@@ -343,7 +343,7 @@ fn should_perform_word_diff_within_hunk(
fn diff_internal(
input: &InternedInput<&str>,
- mut on_change: impl FnMut(Range<usize>, Range<usize>, Range<u32>, Range<u32>),
+ on_change: &mut dyn FnMut(Range<usize>, Range<usize>, Range<u32>, Range<u32>),
) {
let mut old_offset = 0;
let mut new_offset = 0;
@@ -428,7 +428,7 @@ impl HighlightsTreeView {
entry_ix: usize,
window: &mut Window,
cx: &mut Context<Self>,
- mut f: impl FnMut(&mut Editor, Range<Anchor>, usize, &mut Window, &mut Context<Editor>),
+ f: &mut dyn FnMut(&mut Editor, Range<Anchor>, usize, &mut Window, &mut Context<Editor>),
) -> Option<()> {
let editor_state = self.editor.as_ref()?;
let entry = self.cached_entries.get(entry_ix)?;
@@ -510,7 +510,7 @@ impl HighlightsTreeView {
entry_ix,
window,
cx,
- |editor, mut range, _, window, cx| {
+ &mut |editor, mut range, _, window, cx| {
mem::swap(&mut range.start, &mut range.end);
editor.change_selections(
SelectionEffects::scroll(Autoscroll::newest()),
@@ -533,7 +533,7 @@ impl HighlightsTreeView {
entry_ix,
window,
cx,
- |editor, range, key, _, cx| {
+ &mut |editor, range, key, _, cx| {
Self::set_editor_highlights(editor, key, &[range], cx);
},
);
@@ -623,7 +623,7 @@ impl HighlightsTreeView {
entry_ix,
window,
cx,
- |editor, mut range, _, window, cx| {
+ &mut |editor, mut range, _, window, cx| {
mem::swap(&mut range.start, &mut range.end);
editor.change_selections(
SelectionEffects::scroll(Autoscroll::newest()),
@@ -730,7 +730,7 @@ impl Focusable for HighlightsTreeView {
impl Item for HighlightsTreeView {
type Event = ();
- fn to_item_events(_: &Self::Event, _: impl FnMut(workspace::item::ItemEvent)) {}
+ fn to_item_events(_: &Self::Event, _: &mut dyn FnMut(workspace::item::ItemEvent)) {}
fn tab_content_text(&self, _detail: usize, _cx: &App) -> SharedString {
"Highlights".into()
@@ -143,7 +143,7 @@ impl KeyContextView {
impl Item for KeyContextView {
type Event = ();
- fn to_item_events(_: &Self::Event, _: impl FnMut(workspace::item::ItemEvent)) {}
+ fn to_item_events(_: &Self::Event, _: &mut dyn FnMut(workspace::item::ItemEvent)) {}
fn tab_content_text(&self, _detail: usize, _cx: &App) -> SharedString {
"Keyboard Context".into()
@@ -739,7 +739,7 @@ impl Focusable for LspLogView {
impl Item for LspLogView {
type Event = EditorEvent;
- fn to_item_events(event: &Self::Event, f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
Editor::to_item_events(event, f)
}
@@ -341,7 +341,7 @@ impl SyntaxTreeView {
descendant_ix: usize,
window: &mut Window,
cx: &mut Context<Self>,
- mut f: impl FnMut(&mut Editor, Range<Anchor>, usize, &mut Window, &mut Context<Editor>),
+ f: &mut dyn FnMut(&mut Editor, Range<Anchor>, usize, &mut Window, &mut Context<Editor>),
) -> Option<()> {
let editor_state = self.editor.as_ref()?;
let buffer_state = editor_state.active_buffer.as_ref()?;
@@ -434,7 +434,7 @@ impl SyntaxTreeView {
descendant_ix,
window,
cx,
- |editor, mut range, _, window, cx| {
+ &mut |editor, mut range, _, window, cx| {
// Put the cursor at the beginning of the node.
mem::swap(&mut range.start, &mut range.end);
@@ -458,7 +458,7 @@ impl SyntaxTreeView {
descendant_ix,
window,
cx,
- |editor, range, key, _, cx| {
+ &mut |editor, range, key, _, cx| {
Self::set_editor_highlights(editor, key, &[range], cx);
},
);
@@ -573,7 +573,7 @@ impl Focusable for SyntaxTreeView {
impl Item for SyntaxTreeView {
type Event = ();
- fn to_item_events(_: &Self::Event, _: impl FnMut(workspace::item::ItemEvent)) {}
+ fn to_item_events(_: &Self::Event, _: &mut dyn FnMut(workspace::item::ItemEvent)) {}
fn tab_content_text(&self, _detail: usize, _cx: &App) -> SharedString {
"Syntax Tree".into()
@@ -537,7 +537,7 @@ impl Item for MarkdownPreviewView {
Some("Markdown Preview Opened")
}
- fn to_item_events(_event: &Self::Event, _f: impl FnMut(workspace::item::ItemEvent)) {}
+ fn to_item_events(_event: &Self::Event, _f: &mut dyn FnMut(workspace::item::ItemEvent)) {}
}
impl Render for MarkdownPreviewView {
@@ -6,7 +6,7 @@ use settings_content::{PlatformOverrides, ReleaseChannelOverrides};
/// nested platform, release-channel, and profile override objects.
pub(crate) fn migrate_settings(
value: &mut Value,
- mut migrate_one: impl FnMut(&mut serde_json::Map<String, Value>) -> Result<()>,
+ migrate_one: &mut dyn FnMut(&mut serde_json::Map<String, Value>) -> Result<()>,
) -> Result<()> {
let Some(root_object) = value.as_object_mut() else {
return Ok(());
@@ -4,7 +4,7 @@ use serde_json::Value;
use crate::migrations::migrate_settings;
pub fn make_file_finder_include_ignored_an_enum(value: &mut Value) -> Result<()> {
- migrate_settings(value, migrate_one)
+ migrate_settings(value, &mut migrate_one)
}
fn migrate_one(obj: &mut serde_json::Map<String, Value>) -> Result<()> {
@@ -4,7 +4,7 @@ use serde_json::Value;
use crate::migrations::migrate_settings;
pub fn make_relative_line_numbers_an_enum(value: &mut Value) -> Result<()> {
- migrate_settings(value, migrate_one)
+ migrate_settings(value, &mut migrate_one)
}
fn migrate_one(obj: &mut serde_json::Map<String, Value>) -> Result<()> {
@@ -4,7 +4,7 @@ use serde_json::Value;
use crate::migrations::migrate_settings;
pub fn remove_context_server_source(value: &mut Value) -> Result<()> {
- migrate_settings(value, migrate_one)
+ migrate_settings(value, &mut migrate_one)
}
fn migrate_one(obj: &mut serde_json::Map<String, Value>) -> Result<()> {
@@ -4,7 +4,7 @@ use serde_json::Value;
use crate::migrations::migrate_settings;
pub fn move_edit_prediction_provider_to_edit_predictions(value: &mut Value) -> Result<()> {
- migrate_settings(value, migrate_one)
+ migrate_settings(value, &mut migrate_one)
}
fn migrate_one(obj: &mut serde_json::Map<String, Value>) -> Result<()> {
@@ -4,7 +4,7 @@ use serde_json::Value;
use crate::migrations::migrate_settings;
pub fn migrate_experimental_sweep_mercury(value: &mut Value) -> Result<()> {
- migrate_settings(value, |obj| {
+ migrate_settings(value, &mut |obj| {
migrate_one(obj);
Ok(())
})
@@ -12,7 +12,7 @@ const TOOL_PERMISSIONS_KEY: &str = "tool_permissions";
const TOOLS_KEY: &str = "tools";
pub fn migrate_tool_permission_defaults(value: &mut Value) -> Result<()> {
- migrate_settings(value, migrate_one)
+ migrate_settings(value, &mut migrate_one)
}
fn migrate_one(obj: &mut serde_json::Map<String, Value>) -> Result<()> {
@@ -2563,7 +2563,7 @@ impl MultiBuffer {
language_settings(language.map(|l| l.name()), file, cx)
}
- pub fn for_each_buffer(&self, mut f: impl FnMut(&Entity<Buffer>)) {
+ pub fn for_each_buffer(&self, f: &mut dyn FnMut(&Entity<Buffer>)) {
self.buffers.values().for_each(|state| f(&state.buffer))
}
@@ -4978,7 +4978,7 @@ impl MultiBufferSnapshot {
let mut result = BTreeMap::new();
self.suggested_indents_callback(
rows,
- |row, indent| {
+ &mut |row, indent| {
result.insert(row, indent);
ControlFlow::Continue(())
},
@@ -4991,7 +4991,7 @@ impl MultiBufferSnapshot {
pub fn suggested_indents_callback(
&self,
rows: impl IntoIterator<Item = u32>,
- mut cb: impl FnMut(MultiBufferRow, IndentSize) -> ControlFlow<()>,
+ cb: &mut dyn FnMut(MultiBufferRow, IndentSize) -> ControlFlow<()>,
cx: &App,
) {
let mut rows_for_excerpt = Vec::new();
@@ -392,7 +392,7 @@ impl Item for Onboarding {
})))
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
f(*event)
}
}
@@ -4479,7 +4479,7 @@ impl ProjectPanel {
range: Range<usize>,
window: &mut Window,
cx: &mut Context<ProjectPanel>,
- mut callback: impl FnMut(
+ callback: &mut dyn FnMut(
&Entry,
usize,
&HashSet<Arc<RelPath>>,
@@ -4517,7 +4517,12 @@ impl ProjectPanel {
range: Range<usize>,
window: &mut Window,
cx: &mut Context<ProjectPanel>,
- mut callback: impl FnMut(ProjectEntryId, EntryDetails, &mut Window, &mut Context<ProjectPanel>),
+ callback: &mut dyn FnMut(
+ ProjectEntryId,
+ EntryDetails,
+ &mut Window,
+ &mut Context<ProjectPanel>,
+ ),
) {
let mut ix = 0;
for visible in &self.state.visible_entries {
@@ -5393,7 +5398,7 @@ impl ProjectPanel {
range_start..range_end,
window,
cx,
- |entry_id, details, _, _| {
+ &mut |entry_id, details, _, _| {
new_selections.push(SelectedEntry {
entry_id,
worktree_id: details.worktree_id,
@@ -6372,7 +6377,7 @@ impl Render for ProjectPanel {
range,
window,
cx,
- |id, details, window, cx| {
+ &mut |id, details, window, cx| {
items.push(this.render_entry(id, details, window, cx));
},
);
@@ -6394,7 +6399,7 @@ impl Render for ProjectPanel {
range,
window,
cx,
- |entry, _, entries, _, _| {
+ &mut |entry, _, entries, _, _| {
let (depth, _) =
Self::calculate_depth_and_difference(
entry, entries,
@@ -6507,7 +6512,7 @@ impl Render for ProjectPanel {
range,
window,
cx,
- |entry, index, entries, _, _| {
+ &mut |entry, index, entries, _, _| {
let (depth, _) =
Self::calculate_depth_and_difference(
entry, entries,
@@ -8829,7 +8829,7 @@ fn visible_entries_as_strings(
let mut has_editor = false;
panel.update_in(cx, |panel, window, cx| {
- panel.for_each_visible_entry(range, window, cx, |project_entry, details, _, _| {
+ panel.for_each_visible_entry(range, window, cx, &mut |project_entry, details, _, _| {
if details.is_editing {
assert!(!has_editor, "duplicate editor entry");
has_editor = true;
@@ -1105,7 +1105,7 @@ impl SshSocket {
let get_password =
move |_| Task::ready(std::ops::ControlFlow::Continue(Ok(password.clone())));
- let _proxy = askpass::PasswordProxy::new(get_password, executor).await?;
+ let _proxy = askpass::PasswordProxy::new(Box::new(get_password), executor).await?;
envs.insert("SSH_ASKPASS_REQUIRE".into(), "force".into());
envs.insert(
"SSH_ASKPASS".into(),
@@ -190,7 +190,7 @@ impl Item for ReplSessionsPage {
false
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(workspace::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(workspace::item::ItemEvent)) {
f(*event)
}
}
@@ -678,7 +678,7 @@ impl Item for ProjectSearchView {
.update(cx, |editor, cx| editor.navigate(data, window, cx))
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(ItemEvent)) {
match event {
ViewEvent::UpdateTab => {
f(ItemEvent::UpdateBreadcrumbs);
@@ -24,7 +24,7 @@ impl<D: Domain> Migrator for D {
connection.migrate(
Self::NAME,
Self::MIGRATIONS,
- Self::should_allow_migration_change,
+ &mut Self::should_allow_migration_change,
)
}
}
@@ -38,7 +38,7 @@ impl Connection {
&self,
domain: &'static str,
migrations: &[&'static str],
- mut should_allow_migration_change: impl FnMut(usize, &str, &str) -> bool,
+ should_allow_migration_change: &mut dyn FnMut(usize, &str, &str) -> bool,
) -> Result<()> {
self.with_savepoint("migrating", || {
// Setup the migrations table unconditionally
@@ -163,7 +163,7 @@ mod test {
a TEXT,
b TEXT
)"}],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
@@ -192,7 +192,7 @@ mod test {
d TEXT
)"},
],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
@@ -274,7 +274,7 @@ mod test {
.migrate(
"test",
&["DELETE FROM test_table"],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
assert_eq!(
@@ -296,7 +296,7 @@ mod test {
.migrate(
"test",
&["DELETE FROM test_table"],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
assert_eq!(
@@ -320,7 +320,7 @@ mod test {
"CREATE TABLE test (col INTEGER)",
"INSERT INTO test (col) VALUES (1)",
],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
@@ -333,7 +333,7 @@ mod test {
"CREATE TABLE test (color INTEGER )",
"INSERT INTO test (color) VALUES (1)",
],
- |_, old, new| {
+ &mut |_, old, new| {
assert_eq!(old, "CREATE TABLE test (col INTEGER)");
assert_eq!(new, "CREATE TABLE test (color INTEGER)");
migration_changed = true;
@@ -353,7 +353,7 @@ mod test {
.migrate(
"first_migration",
&["CREATE TABLE table1(a TEXT) STRICT;"],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
@@ -375,7 +375,7 @@ mod test {
ALTER TABLE table2 RENAME TO table1;
"}],
- disallow_migration_change,
+ &mut disallow_migration_change,
)
.unwrap();
@@ -337,5 +337,5 @@ impl Item for SvgPreviewView {
Some("svg preview: open")
}
- fn to_item_events(_event: &Self::Event, _f: impl FnMut(workspace::item::ItemEvent)) {}
+ fn to_item_events(_event: &Self::Event, _f: &mut dyn FnMut(workspace::item::ItemEvent)) {}
}
@@ -1526,7 +1526,7 @@ impl Item for TerminalView {
}
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(ItemEvent)) {
f(*event)
}
}
@@ -135,7 +135,7 @@ impl Vim {
return;
};
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let was_reversed = selection.reversed;
let mut current_head = selection.head();
@@ -164,7 +164,7 @@ impl Vim {
map.buffer_snapshot().char_classifier_at(head.to_point(map));
for _ in 0..times.unwrap_or(1) {
let (_, new_head) =
- movement::find_boundary_trail(map, head, |left, right| {
+ movement::find_boundary_trail(map, head, &mut |left, right| {
Self::is_boundary_right(ignore_punctuation)(
left,
right,
@@ -216,7 +216,7 @@ impl Vim {
&mut self,
window: &mut Window,
cx: &mut Context<Self>,
- mut change: impl FnMut(
+ change: &mut dyn FnMut(
// the start of the cursor
DisplayPoint,
&DisplaySnapshot,
@@ -224,7 +224,7 @@ impl Vim {
) {
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let cursor_start = if selection.reversed || selection.is_empty() {
selection.head()
} else {
@@ -245,10 +245,10 @@ impl Vim {
times: Option<usize>,
window: &mut Window,
cx: &mut Context<Self>,
- mut is_boundary: impl FnMut(char, char, &CharClassifier) -> bool,
+ is_boundary: &mut dyn FnMut(char, char, &CharClassifier) -> bool,
) {
let times = times.unwrap_or(1);
- self.helix_new_selections(window, cx, |cursor, map| {
+ self.helix_new_selections(window, cx, &mut |cursor, map| {
let mut head = movement::right(map, cursor);
let mut tail = cursor;
let classifier = map.buffer_snapshot().char_classifier_at(head.to_point(map));
@@ -257,7 +257,7 @@ impl Vim {
}
for _ in 0..times {
let (maybe_next_tail, next_head) =
- movement::find_boundary_trail(map, head, |left, right| {
+ movement::find_boundary_trail(map, head, &mut |left, right| {
is_boundary(left, right, &classifier)
});
@@ -279,10 +279,10 @@ impl Vim {
times: Option<usize>,
window: &mut Window,
cx: &mut Context<Self>,
- mut is_boundary: impl FnMut(char, char, &CharClassifier) -> bool,
+ is_boundary: &mut dyn FnMut(char, char, &CharClassifier) -> bool,
) {
let times = times.unwrap_or(1);
- self.helix_new_selections(window, cx, |cursor, map| {
+ self.helix_new_selections(window, cx, &mut |cursor, map| {
let mut head = cursor;
// The original cursor was one character wide,
// but the search starts from the left side of it,
@@ -294,7 +294,7 @@ impl Vim {
}
for _ in 0..times {
let (maybe_next_tail, next_head) =
- movement::find_preceding_boundary_trail(map, head, |left, right| {
+ movement::find_preceding_boundary_trail(map, head, &mut |left, right| {
is_boundary(left, right, &classifier)
});
@@ -321,7 +321,7 @@ impl Vim {
self.update_editor(cx, |_, editor, cx| {
let text_layout_details = editor.text_layout_details(window, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let goal = selection.goal;
let cursor = if selection.is_empty() || selection.reversed {
selection.head()
@@ -371,37 +371,29 @@ impl Vim {
cx: &mut Context<Self>,
) {
match motion {
- Motion::NextWordStart { ignore_punctuation } => self.helix_find_range_forward(
- times,
- window,
- cx,
- Self::is_boundary_right(ignore_punctuation),
- ),
- Motion::NextWordEnd { ignore_punctuation } => self.helix_find_range_forward(
- times,
- window,
- cx,
- Self::is_boundary_left(ignore_punctuation),
- ),
- Motion::PreviousWordStart { ignore_punctuation } => self.helix_find_range_backward(
- times,
- window,
- cx,
- Self::is_boundary_left(ignore_punctuation),
- ),
- Motion::PreviousWordEnd { ignore_punctuation } => self.helix_find_range_backward(
- times,
- window,
- cx,
- Self::is_boundary_right(ignore_punctuation),
- ),
+ Motion::NextWordStart { ignore_punctuation } => {
+ let mut is_boundary = Self::is_boundary_right(ignore_punctuation);
+ self.helix_find_range_forward(times, window, cx, &mut is_boundary)
+ }
+ Motion::NextWordEnd { ignore_punctuation } => {
+ let mut is_boundary = Self::is_boundary_left(ignore_punctuation);
+ self.helix_find_range_forward(times, window, cx, &mut is_boundary)
+ }
+ Motion::PreviousWordStart { ignore_punctuation } => {
+ let mut is_boundary = Self::is_boundary_left(ignore_punctuation);
+ self.helix_find_range_backward(times, window, cx, &mut is_boundary)
+ }
+ Motion::PreviousWordEnd { ignore_punctuation } => {
+ let mut is_boundary = Self::is_boundary_right(ignore_punctuation);
+ self.helix_find_range_backward(times, window, cx, &mut is_boundary)
+ }
Motion::EndOfLine { .. } => {
// In Helix mode, EndOfLine should position cursor ON the last character,
// not after it. We therefore need special handling for it.
self.update_editor(cx, |_, editor, cx| {
let text_layout_details = editor.text_layout_details(window, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let goal = selection.goal;
let cursor = if selection.is_empty() || selection.reversed {
selection.head()
@@ -426,7 +418,7 @@ impl Vim {
mode,
smartcase,
} => {
- self.helix_new_selections(window, cx, |cursor, map| {
+ self.helix_new_selections(window, cx, &mut |cursor, map| {
let start = cursor;
let mut last_boundary = start;
for _ in 0..times.unwrap_or(1) {
@@ -434,7 +426,7 @@ impl Vim {
map,
movement::right(map, last_boundary),
mode,
- |left, right| {
+ &mut |left, right| {
let current_char = if before { right } else { left };
motion::is_character_match(char, current_char, smartcase)
},
@@ -449,7 +441,7 @@ impl Vim {
mode,
smartcase,
} => {
- self.helix_new_selections(window, cx, |cursor, map| {
+ self.helix_new_selections(window, cx, &mut |cursor, map| {
let start = cursor;
let mut last_boundary = start;
for _ in 0..times.unwrap_or(1) {
@@ -457,7 +449,7 @@ impl Vim {
map,
last_boundary,
mode,
- |left, right| {
+ &mut |left, right| {
let current_char = if after { left } else { right };
motion::is_character_match(char, current_char, smartcase)
},
@@ -484,7 +476,7 @@ impl Vim {
if !has_selection {
// If no selection, expand to current character (like 'v' does)
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let head = selection.head();
let new_head = movement::saturating_right(map, head);
selection.set_tail(head, SelectionGoal::None);
@@ -498,7 +490,7 @@ impl Vim {
cx,
);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_map, selection| {
+ s.move_with(&mut |_map, selection| {
selection.collapse_to(selection.start, SelectionGoal::None);
});
});
@@ -521,7 +513,7 @@ impl Vim {
self.start_recording(cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_map, selection| {
+ s.move_with(&mut |_map, selection| {
// In helix normal mode, move cursor to start of selection and collapse
if !selection.is_empty() {
selection.collapse_to(selection.start, SelectionGoal::None);
@@ -596,7 +588,7 @@ impl Vim {
self.switch_mode(Mode::Insert, false, window, cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let point = if selection.is_empty() {
right(map, selection.head(), 1)
} else {
@@ -756,7 +748,7 @@ impl Vim {
editor.set_clip_at_line_ends(false, cx);
editor.transact(window, cx, |editor, window, cx| {
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.start == selection.end {
selection.end = movement::right(map, selection.end);
}
@@ -16,7 +16,7 @@ impl Vim {
self.stop_recording(cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let Some(range) = object
.helix_range(map, selection.clone(), around)
.unwrap_or({
@@ -45,7 +45,7 @@ impl Vim {
self.stop_recording(cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let Ok(Some(range)) = object.helix_next_range(map, selection.clone(), around)
else {
return;
@@ -69,7 +69,7 @@ impl Vim {
self.stop_recording(cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let Ok(Some(range)) =
object.helix_previous_range(map, selection.clone(), around)
else {
@@ -106,7 +106,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut selection_starts: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
selection_starts.insert(selection.id, anchor);
motion.expand_selection(
@@ -124,7 +124,7 @@ impl Vim {
IndentDirection::Auto => editor.autoindent(&Default::default(), window, cx),
}
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = selection_starts.remove(&selection.id).unwrap();
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
});
@@ -147,7 +147,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut original_positions: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
original_positions.insert(selection.id, anchor);
object.expand_selection(map, selection, around, times);
@@ -159,7 +159,7 @@ impl Vim {
IndentDirection::Auto => editor.autoindent(&Default::default(), window, cx),
}
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = original_positions.remove(&selection.id).unwrap();
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
});
@@ -62,7 +62,7 @@ impl Vim {
editor.dismiss_menus_and_popups(false, window, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, mut cursor, _| {
+ s.move_cursors_with(&mut |map, mut cursor, _| {
*cursor.column_mut() = cursor.column().saturating_sub(1);
(map.clip_point(cursor, Bias::Left), SelectionGoal::None)
});
@@ -1691,18 +1691,19 @@ pub(crate) fn next_word_start(
.ignore_punctuation(ignore_punctuation);
for _ in 0..times {
let mut crossed_newline = false;
- let new_point = movement::find_boundary(map, point, FindRange::MultiLine, |left, right| {
- let left_kind = classifier.kind(left);
- let right_kind = classifier.kind(right);
- let at_newline = right == '\n';
+ let new_point =
+ movement::find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
+ let left_kind = classifier.kind(left);
+ let right_kind = classifier.kind(right);
+ let at_newline = right == '\n';
- let found = (left_kind != right_kind && right_kind != CharKind::Whitespace)
- || at_newline && crossed_newline
- || at_newline && left == '\n'; // Prevents skipping repeated empty lines
+ let found = (left_kind != right_kind && right_kind != CharKind::Whitespace)
+ || at_newline && crossed_newline
+ || at_newline && left == '\n'; // Prevents skipping repeated empty lines
- crossed_newline |= at_newline;
- found
- });
+ crossed_newline |= at_newline;
+ found
+ });
if point == new_point {
break;
}
@@ -1717,7 +1718,7 @@ fn next_end_impl(
times: usize,
allow_cross_newline: bool,
always_advance: bool,
- mut is_boundary: impl FnMut(char, char) -> bool,
+ is_boundary: &mut dyn FnMut(char, char) -> bool,
) -> DisplayPoint {
for _ in 0..times {
let mut need_next_char = false;
@@ -1730,7 +1731,7 @@ fn next_end_impl(
map,
new_point,
FindRange::MultiLine,
- |left, right| {
+ &mut |left, right| {
let at_newline = right == '\n';
if !allow_cross_newline && at_newline {
@@ -1774,7 +1775,7 @@ pub(crate) fn next_word_end(
times,
allow_cross_newline,
always_advance,
- |left, right| {
+ &mut |left, right| {
let left_kind = classifier.kind(left);
let right_kind = classifier.kind(right);
left_kind != right_kind && left_kind != CharKind::Whitespace
@@ -1800,7 +1801,7 @@ pub(crate) fn next_subword_end(
times,
allow_cross_newline,
true,
- |left, right| {
+ &mut |left, right| {
let left_kind = classifier.kind(left);
let right_kind = classifier.kind(right);
let is_stopping_punct = |c: char| ".$=\"'{}[]()<>".contains(c);
@@ -1830,7 +1831,7 @@ fn previous_word_start(
map,
point,
FindRange::MultiLine,
- |left, right| {
+ &mut |left, right| {
let left_kind = classifier.kind(left);
let right_kind = classifier.kind(right);
@@ -1867,7 +1868,7 @@ fn previous_word_end(
&map.buffer_snapshot(),
point,
FindRange::MultiLine,
- |left, right| {
+ &mut |left, right| {
let left_kind = classifier.kind(left);
let right_kind = classifier.kind(right);
match (left_kind, right_kind) {
@@ -1914,21 +1915,22 @@ fn next_subword_start(
.ignore_punctuation(ignore_punctuation);
for _ in 0..times {
let mut crossed_newline = false;
- let new_point = movement::find_boundary(map, point, FindRange::MultiLine, |left, right| {
- let left_kind = classifier.kind(left);
- let right_kind = classifier.kind(right);
- let at_newline = right == '\n';
- let is_stopping_punct = |c: char| "$=\"'{}[]()<>".contains(c);
- let found_subword_start = is_subword_start(left, right, ".$_-");
- let is_word_start = (left_kind != right_kind)
- && (!right.is_ascii_punctuation() || is_stopping_punct(right));
- let found = (!right.is_whitespace() && (is_word_start || found_subword_start))
- || at_newline && crossed_newline
- || at_newline && left == '\n'; // Prevents skipping repeated empty lines
-
- crossed_newline |= at_newline;
- found
- });
+ let new_point =
+ movement::find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
+ let left_kind = classifier.kind(left);
+ let right_kind = classifier.kind(right);
+ let at_newline = right == '\n';
+ let is_stopping_punct = |c: char| "$=\"'{}[]()<>".contains(c);
+ let found_subword_start = is_subword_start(left, right, ".$_-");
+ let is_word_start = (left_kind != right_kind)
+ && (!right.is_ascii_punctuation() || is_stopping_punct(right));
+ let found = (!right.is_whitespace() && (is_word_start || found_subword_start))
+ || at_newline && crossed_newline
+ || at_newline && left == '\n'; // Prevents skipping repeated empty lines
+
+ crossed_newline |= at_newline;
+ found
+ });
if point == new_point {
break;
}
@@ -1955,7 +1957,7 @@ fn previous_subword_start(
map,
point,
FindRange::MultiLine,
- |left, right| {
+ &mut |left, right| {
let left_kind = classifier.kind(left);
let right_kind = classifier.kind(right);
let at_newline = right == '\n';
@@ -2004,7 +2006,7 @@ fn previous_subword_end(
&map.buffer_snapshot(),
point,
FindRange::MultiLine,
- |left, right| {
+ &mut |left, right| {
let left_kind = classifier.kind(left);
let right_kind = classifier.kind(right);
@@ -2754,7 +2756,7 @@ fn find_forward(
for _ in 0..times {
found = false;
- let new_to = find_boundary(map, to, mode, |_, right| {
+ let new_to = find_boundary(map, to, mode, &mut |_, right| {
found = is_character_match(target, right, smartcase);
found
});
@@ -2792,7 +2794,7 @@ fn find_backward(
let mut to = from;
for _ in 0..times {
- let new_to = find_preceding_boundary_display_point(map, to, mode, |_, right| {
+ let new_to = find_preceding_boundary_display_point(map, to, mode, &mut |_, right| {
is_character_match(target, right, smartcase)
});
if to == new_to {
@@ -2844,7 +2846,7 @@ fn sneak(
map,
movement::right(map, to),
FindRange::MultiLine,
- |left, right| {
+ &mut |left, right| {
found = is_character_match(first_target, left, smartcase)
&& is_character_match(second_target, right, smartcase);
found
@@ -2876,12 +2878,16 @@ fn sneak_backward(
for _ in 0..times {
found = false;
- let new_to =
- find_preceding_boundary_display_point(map, to, FindRange::MultiLine, |left, right| {
+ let new_to = find_preceding_boundary_display_point(
+ map,
+ to,
+ FindRange::MultiLine,
+ &mut |left, right| {
found = is_character_match(first_target, left, smartcase)
&& is_character_match(second_target, right, smartcase);
found
- });
+ },
+ );
if to == new_to {
break;
}
@@ -145,7 +145,7 @@ pub(crate) fn register(editor: &mut Editor, cx: &mut Context<Vim>) {
vim.record_current_action(cx);
vim.update_editor(cx, |_, editor, cx| {
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
selection.end = movement::right(map, selection.end)
}
@@ -159,7 +159,7 @@ pub(crate) fn register(editor: &mut Editor, cx: &mut Context<Vim>) {
Vim::action(editor, cx, |vim, _: &HelixCollapseSelection, window, cx| {
vim.update_editor(cx, |_, editor, cx| {
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let mut point = selection.head();
if !selection.reversed && !selection.is_empty() {
point = movement::left(map, selection.head());
@@ -598,7 +598,7 @@ impl Vim {
window,
cx,
|s| {
- s.move_cursors_with(|map, cursor, goal| {
+ s.move_cursors_with(&mut |map, cursor, goal| {
motion
.move_point(map, cursor, goal, times, &text_layout_details)
.unwrap_or((cursor, goal))
@@ -617,7 +617,9 @@ impl Vim {
self.switch_mode(Mode::Insert, false, window, cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, cursor, _| (right(map, cursor, 1), SelectionGoal::None));
+ s.move_cursors_with(&mut |map, cursor, _| {
+ (right(map, cursor, 1), SelectionGoal::None)
+ });
});
});
}
@@ -628,7 +630,7 @@ impl Vim {
let current_mode = self.mode;
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if current_mode == Mode::VisualLine {
let start_of_line = motion::start_of_line(map, false, selection.start);
selection.collapse_to(start_of_line, SelectionGoal::None)
@@ -652,7 +654,7 @@ impl Vim {
self.switch_mode(Mode::Insert, false, window, cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, cursor, _| {
+ s.move_cursors_with(&mut |map, cursor, _| {
(
first_non_whitespace(map, false, cursor),
SelectionGoal::None,
@@ -672,7 +674,7 @@ impl Vim {
self.switch_mode(Mode::Insert, false, window, cx);
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, cursor, _| {
+ s.move_cursors_with(&mut |map, cursor, _| {
(next_line_end(map, cursor, 1), SelectionGoal::None)
});
});
@@ -729,7 +731,7 @@ impl Vim {
.collect::<Vec<_>>();
editor.edit_with_autoindent(edits, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, cursor, _| {
+ s.move_cursors_with(&mut |map, cursor, _| {
let previous_line = map.start_of_relative_buffer_row(cursor, -1);
let insert_point = motion::end_of_line(map, false, previous_line, 1);
(insert_point, SelectionGoal::None)
@@ -770,7 +772,7 @@ impl Vim {
})
.collect::<Vec<_>>();
editor.change_selections(Default::default(), window, cx, |s| {
- s.maybe_move_cursors_with(|map, cursor, goal| {
+ s.maybe_move_cursors_with(&mut |map, cursor, goal| {
Motion::CurrentLine.move_point(
map,
cursor,
@@ -848,7 +850,7 @@ impl Vim {
editor.edit(edits, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
if let Some(position) = original_positions.get(&selection.id) {
selection.collapse_to(*position, SelectionGoal::None);
}
@@ -1025,7 +1027,7 @@ impl Vim {
}
editor.set_clip_at_line_ends(true, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let point = movement::saturating_left(map, selection.head());
selection.collapse_to(point, SelectionGoal::None)
});
@@ -1061,7 +1063,7 @@ impl Vim {
mut positions: HashMap<usize, Anchor>,
) {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if let Some(anchor) = positions.remove(&selection.id) {
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
}
@@ -40,7 +40,7 @@ impl Vim {
// We are swapping to insert mode anyway. Just set the line end clipping behavior now
editor.set_clip_at_line_ends(false, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let kind = match motion {
Motion::NextWordStart { ignore_punctuation }
| Motion::NextSubwordStart { ignore_punctuation } => {
@@ -116,7 +116,7 @@ impl Vim {
editor.set_clip_at_line_ends(false, cx);
editor.transact(window, cx, |editor, window, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
objects_found |= object.expand_selection(map, selection, around, times);
});
});
@@ -37,7 +37,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut selection_starts: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Left);
selection_starts.insert(selection.id, anchor);
motion.expand_selection(
@@ -67,7 +67,7 @@ impl Vim {
}
}
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = selection_starts.remove(&selection.id).unwrap();
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
});
@@ -92,7 +92,7 @@ impl Vim {
editor.set_clip_at_line_ends(false, cx);
let mut original_positions: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
object.expand_selection(map, selection, around, times);
original_positions.insert(
selection.id,
@@ -118,7 +118,7 @@ impl Vim {
}
}
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = original_positions.remove(&selection.id).unwrap();
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
});
@@ -31,7 +31,7 @@ impl Vim {
let mut motion_kind = None;
let mut ranges_to_copy = Vec::new();
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let original_head = selection.head();
original_columns.insert(selection.id, original_head.column());
let kind = motion.expand_selection(
@@ -73,7 +73,7 @@ impl Vim {
// Fixup cursor position after the deletion
editor.set_clip_at_line_ends(true, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let mut cursor = selection.head();
if kind.linewise()
&& let Some(column) = original_columns.get(&selection.id)
@@ -112,7 +112,7 @@ impl Vim {
let target_mode = object.target_visual_mode(vim.mode, around);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let cursor_point = selection.head().to_point(map);
if target_mode == Mode::VisualLine {
column_before_move.insert(selection.id, cursor_point.column);
@@ -174,7 +174,7 @@ impl Vim {
// Fixup cursor position after the deletion
editor.set_clip_at_line_ends(true, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let mut cursor = selection.head();
if should_move_to_start.contains(&selection.id) {
*cursor.column_mut() = 0;
@@ -249,7 +249,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
editor.set_clip_at_line_ends(false, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
object.expand_selection(map, selection, around, None);
});
});
@@ -263,7 +263,7 @@ impl Vim {
editor.insert(&text, window, cx);
editor.set_clip_at_line_ends(true, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.start = map.clip_point(selection.start, Bias::Left);
selection.end = selection.start
})
@@ -287,7 +287,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
editor.set_clip_at_line_ends(false, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
motion.expand_selection(
map,
selection,
@@ -307,7 +307,7 @@ impl Vim {
editor.insert(&text, window, cx);
editor.set_clip_at_line_ends(true, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.start = map.clip_point(selection.start, Bias::Left);
selection.end = selection.start
})
@@ -157,7 +157,7 @@ fn scroll_editor(
window,
cx,
|s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
// TODO: Improve the logic and function calls below to be dependent on
// the `amount`. If the amount is vertical, we don't care about
// columns, while if it's horizontal, we don't care about rows,
@@ -50,7 +50,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let text_layout_details = editor.text_layout_details(window, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.start == selection.end {
Motion::Right.expand_selection(
map,
@@ -19,7 +19,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut selection_starts: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
selection_starts.insert(selection.id, anchor);
motion.expand_selection(
@@ -33,7 +33,7 @@ impl Vim {
});
editor.toggle_comments(&Default::default(), window, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = selection_starts.remove(&selection.id).unwrap();
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
});
@@ -55,7 +55,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut original_positions: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
original_positions.insert(selection.id, anchor);
object.expand_selection(map, selection, around, times);
@@ -63,7 +63,7 @@ impl Vim {
});
editor.toggle_comments(&Default::default(), window, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = original_positions.remove(&selection.id).unwrap();
selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
});
@@ -29,7 +29,7 @@ impl Vim {
let mut original_positions: HashMap<_, _> = Default::default();
let mut kind = None;
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let original_position = (selection.head(), selection.goal);
kind = motion.expand_selection(
map,
@@ -49,7 +49,7 @@ impl Vim {
let Some(kind) = kind else { return };
vim.yank_selections_content(editor, kind, window, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
let (head, goal) = original_positions.remove(&selection.id).unwrap();
selection.collapse_to(head, goal);
});
@@ -72,7 +72,7 @@ impl Vim {
editor.set_clip_at_line_ends(false, cx);
let mut start_positions: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
object.expand_selection(map, selection, around, times);
let start_position = (selection.start, selection.goal);
start_positions.insert(selection.id, start_position);
@@ -84,7 +84,7 @@ impl Vim {
};
vim.yank_selections_content(editor, kind, window, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
let (head, goal) = start_positions.remove(&selection.id).unwrap();
selection.collapse_to(head, goal);
});
@@ -815,15 +815,17 @@ fn in_word(
map,
right(map, relative_to, 1),
movement::FindRange::SingleLine,
- |left, right| classifier.kind(left) != classifier.kind(right),
+ &mut |left, right| classifier.kind(left) != classifier.kind(right),
);
- let mut end =
- movement::find_boundary(map, relative_to, FindRange::SingleLine, |left, right| {
- classifier.kind(left) != classifier.kind(right)
- });
+ let mut end = movement::find_boundary(
+ map,
+ relative_to,
+ FindRange::SingleLine,
+ &mut |left, right| classifier.kind(left) != classifier.kind(right),
+ );
- let is_boundary = |left: char, right: char| classifier.kind(left) != classifier.kind(right);
+ let mut is_boundary = |left: char, right: char| classifier.kind(left) != classifier.kind(right);
for _ in 1..times {
let kind_at_end = map
@@ -834,10 +836,15 @@ fn in_word(
// Skip whitespace but not punctuation (punctuation is its own word unit).
let next_end = if kind_at_end == Some(CharKind::Whitespace) {
let after_whitespace =
- movement::find_boundary(map, end, FindRange::MultiLine, is_boundary);
- movement::find_boundary(map, after_whitespace, FindRange::MultiLine, is_boundary)
+ movement::find_boundary(map, end, FindRange::MultiLine, &mut is_boundary);
+ movement::find_boundary(
+ map,
+ after_whitespace,
+ FindRange::MultiLine,
+ &mut is_boundary,
+ )
} else {
- movement::find_boundary(map, end, FindRange::MultiLine, is_boundary)
+ movement::find_boundary(map, end, FindRange::MultiLine, &mut is_boundary)
};
if next_end == end {
break;
@@ -873,22 +880,32 @@ fn in_subword(
map,
right(map, relative_to, 1),
movement::FindRange::SingleLine,
- |left, right| {
+ &mut |left, right| {
let is_word_start = classifier.kind(left) != classifier.kind(right);
is_word_start || is_subword_start(left, right, "._-")
},
)
} else {
- movement::find_boundary(map, relative_to, FindRange::SingleLine, |left, right| {
- let is_word_start = classifier.kind(left) != classifier.kind(right);
- is_word_start || is_subword_start(left, right, "._-")
- })
+ movement::find_boundary(
+ map,
+ relative_to,
+ FindRange::SingleLine,
+ &mut |left, right| {
+ let is_word_start = classifier.kind(left) != classifier.kind(right);
+ is_word_start || is_subword_start(left, right, "._-")
+ },
+ )
};
- let end = movement::find_boundary(map, relative_to, FindRange::SingleLine, |left, right| {
- let is_word_end = classifier.kind(left) != classifier.kind(right);
- is_word_end || is_subword_end(left, right, "._-")
- });
+ let end = movement::find_boundary(
+ map,
+ relative_to,
+ FindRange::SingleLine,
+ &mut |left, right| {
+ let is_word_end = classifier.kind(left) != classifier.kind(right);
+ is_word_end || is_subword_end(left, right, "._-")
+ },
+ );
Some(start..end)
}
@@ -1027,7 +1044,7 @@ fn around_subword(
map,
right(map, relative_to, 1),
movement::FindRange::SingleLine,
- |left, right| {
+ &mut |left, right| {
let is_separator = |c: char| "._-".contains(c);
let is_word_start =
classifier.kind(left) != classifier.kind(right) && !is_separator(left);
@@ -1035,11 +1052,17 @@ fn around_subword(
},
);
- let end = movement::find_boundary(map, relative_to, FindRange::SingleLine, |left, right| {
- let is_separator = |c: char| "._-".contains(c);
- let is_word_end = classifier.kind(left) != classifier.kind(right) && !is_separator(right);
- is_word_end || is_subword_end(left, right, "._-")
- });
+ let end = movement::find_boundary(
+ map,
+ relative_to,
+ FindRange::SingleLine,
+ &mut |left, right| {
+ let is_separator = |c: char| "._-".contains(c);
+ let is_word_end =
+ classifier.kind(left) != classifier.kind(right) && !is_separator(right);
+ is_word_end || is_subword_end(left, right, "._-")
+ },
+ );
Some(start..end).map(|range| expand_to_include_whitespace(map, range, true))
}
@@ -1088,31 +1111,37 @@ fn around_next_word(
map,
right(map, relative_to, 1),
FindRange::SingleLine,
- |left, right| classifier.kind(left) != classifier.kind(right),
+ &mut |left, right| classifier.kind(left) != classifier.kind(right),
);
let mut word_found = false;
- let mut end = movement::find_boundary(map, relative_to, FindRange::MultiLine, |left, right| {
- let left_kind = classifier.kind(left);
- let right_kind = classifier.kind(right);
+ let mut end = movement::find_boundary(
+ map,
+ relative_to,
+ FindRange::MultiLine,
+ &mut |left, right| {
+ let left_kind = classifier.kind(left);
+ let right_kind = classifier.kind(right);
- let found = (word_found && left_kind != right_kind) || right == '\n' && left == '\n';
+ let found = (word_found && left_kind != right_kind) || right == '\n' && left == '\n';
- if right_kind != CharKind::Whitespace {
- word_found = true;
- }
+ if right_kind != CharKind::Whitespace {
+ word_found = true;
+ }
- found
- });
+ found
+ },
+ );
for _ in 1..times {
- let next_end = movement::find_boundary(map, end, FindRange::MultiLine, |left, right| {
- let left_kind = classifier.kind(left);
- let right_kind = classifier.kind(right);
-
- let in_word_unit = left_kind != CharKind::Whitespace;
- (in_word_unit && left_kind != right_kind) || right == '\n' && left == '\n'
- });
+ let next_end =
+ movement::find_boundary(map, end, FindRange::MultiLine, &mut |left, right| {
+ let left_kind = classifier.kind(left);
+ let right_kind = classifier.kind(right);
+
+ let in_word_unit = left_kind != CharKind::Whitespace;
+ (in_word_unit && left_kind != right_kind) || right == '\n' && left == '\n'
+ });
if next_end == end {
break;
}
@@ -263,7 +263,7 @@ impl Vim {
if let Some(position) = final_cursor_position {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_map, selection| {
+ s.move_with(&mut |_map, selection| {
selection.collapse_to(position, SelectionGoal::None);
});
})
@@ -29,7 +29,7 @@ pub(crate) fn register(editor: &mut Editor, cx: &mut Context<Vim>) {
cx,
);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if let Some(anchor) = positions.remove(&selection.id) {
let mut point = anchor.to_display_point(map);
*point.column_mut() = 0;
@@ -60,7 +60,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut selection_starts: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
selection_starts.insert(selection.id, anchor);
motion.expand_selection(
@@ -80,7 +80,7 @@ impl Vim {
cx,
);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = selection_starts.remove(&selection.id).unwrap();
let mut point = anchor.to_display_point(map);
*point.column_mut() = 0;
@@ -104,7 +104,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
let mut original_positions: HashMap<_, _> = Default::default();
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
original_positions.insert(selection.id, anchor);
object.expand_selection(map, selection, around, times);
@@ -118,7 +118,7 @@ impl Vim {
cx,
);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let anchor = original_positions.remove(&selection.id).unwrap();
let mut point = anchor.to_display_point(map);
*point.column_mut() = 0;
@@ -1204,7 +1204,7 @@ impl Vim {
self.update_editor(cx, |vim, editor, cx| {
if last_mode != Mode::VisualBlock && last_mode.is_visual() && mode == Mode::VisualBlock
{
- vim.visual_block_motion(true, editor, window, cx, |_, point, goal| {
+ vim.visual_block_motion(true, editor, window, cx, &mut |_, point, goal| {
Some((point, goal))
})
}
@@ -1262,7 +1262,7 @@ impl Vim {
vim.extended_pending_selection_id = s.pending_anchor().map(|p| p.id)
}
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if last_mode.is_visual() && !mode.is_visual() {
let mut point = selection.head();
if !selection.reversed && !selection.is_empty() {
@@ -1469,7 +1469,7 @@ impl Vim {
self.update_editor(cx, |_, editor, cx| {
editor.set_clip_at_line_ends(false, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
selection.collapse_to(selection.start, selection.goal)
})
});
@@ -1750,7 +1750,7 @@ impl Vim {
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
match original_mode {
Some(Mode::VisualLine) => {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
map.prev_line_boundary(selection.start.to_point(map)).1,
SelectionGoal::None,
@@ -1763,7 +1763,7 @@ impl Vim {
s.select_anchors(vec![first]);
}
_ => {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection.collapse_to(
map.clip_at_line_end(selection.start),
selection.goal,
@@ -1778,7 +1778,7 @@ impl Vim {
Mode::Normal => {
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
selection
.collapse_to(map.clip_at_line_end(selection.end), selection.goal)
})
@@ -1947,7 +1947,7 @@ impl Vim {
Mode::HelixNormal | Mode::HelixSelect => {
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if selection.is_empty() {
selection.end = movement::right(map, selection.start);
}
@@ -228,12 +228,18 @@ impl Vim {
)
{
let is_up_or_down = matches!(motion, Motion::Up { .. } | Motion::Down { .. });
- vim.visual_block_motion(is_up_or_down, editor, window, cx, |map, point, goal| {
- motion.move_point(map, point, goal, times, &text_layout_details)
- })
+ vim.visual_block_motion(
+ is_up_or_down,
+ editor,
+ window,
+ cx,
+ &mut |map, point, goal| {
+ motion.move_point(map, point, goal, times, &text_layout_details)
+ },
+ )
} else {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let was_reversed = selection.reversed;
let mut current_head = selection.head();
@@ -296,7 +302,7 @@ impl Vim {
editor: &mut Editor,
window: &mut Window,
cx: &mut Context<Editor>,
- mut move_selection: impl FnMut(
+ move_selection: &mut dyn FnMut(
&DisplaySnapshot,
DisplayPoint,
SelectionGoal,
@@ -436,7 +442,7 @@ impl Vim {
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let mut mut_selection = selection.clone();
// all our motions assume that the current character is
@@ -552,7 +558,7 @@ impl Vim {
self.update_editor(cx, |_, editor, cx| {
editor.split_selection_into_lines(&Default::default(), window, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, cursor, _| {
+ s.move_cursors_with(&mut |map, cursor, _| {
(next_line_end(map, cursor, 1), SelectionGoal::None)
});
});
@@ -570,7 +576,7 @@ impl Vim {
self.update_editor(cx, |_, editor, cx| {
editor.split_selection_into_lines(&Default::default(), window, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_cursors_with(|map, cursor, _| {
+ s.move_cursors_with(&mut |map, cursor, _| {
(
first_non_whitespace(map, false, cursor),
SelectionGoal::None,
@@ -593,7 +599,7 @@ impl Vim {
pub fn other_end(&mut self, _: &OtherEnd, window: &mut Window, cx: &mut Context<Self>) {
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
selection.reversed = !selection.reversed;
});
})
@@ -609,7 +615,7 @@ impl Vim {
let mode = self.mode;
self.update_editor(cx, |_, editor, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|_, selection| {
+ s.move_with(&mut |_, selection| {
selection.reversed = !selection.reversed;
});
if mode == Mode::VisualBlock {
@@ -628,7 +634,7 @@ impl Vim {
editor.transact(window, cx, |editor, window, cx| {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if line_mode {
let mut position = selection.head();
if !selection.reversed {
@@ -665,7 +671,7 @@ impl Vim {
if line_mode && vim.mode != Mode::VisualBlock {
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let end = selection.end.to_point(map);
let start = selection.start.to_point(map);
if end.row < map.buffer_snapshot().max_point().row {
@@ -686,7 +692,7 @@ impl Vim {
// Fixup cursor position after the deletion
editor.set_clip_at_line_ends(true, cx);
editor.change_selections(Default::default(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let mut cursor = selection.head().to_point(map);
if let Some(column) = original_columns.get(&selection.id) {
@@ -712,7 +718,7 @@ impl Vim {
// For visual line mode, adjust selections to avoid yanking the next line when on \n
if line_mode && vim.mode != Mode::VisualBlock {
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
let start = selection.start.to_point(map);
let end = selection.end.to_point(map);
if end.column == 0 && end > start {
@@ -735,7 +741,7 @@ impl Vim {
};
vim.yank_selections_content(editor, kind, window, cx);
editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
- s.move_with(|map, selection| {
+ s.move_with(&mut |map, selection| {
if line_mode {
selection.start = start_of_line(map, false, selection.start);
};
@@ -212,7 +212,7 @@ pub trait Item: Focusable + EventEmitter<Self::Event> + Render + Sized {
self.tab_tooltip_text(cx).map(TabTooltipContent::Text)
}
- fn to_item_events(_event: &Self::Event, _f: impl FnMut(ItemEvent)) {}
+ fn to_item_events(_event: &Self::Event, _f: &mut dyn FnMut(ItemEvent)) {}
fn deactivated(&mut self, _window: &mut Window, _: &mut Context<Self>) {}
fn discarded(&self, _project: Entity<Project>, _window: &mut Window, _cx: &mut Context<Self>) {}
@@ -579,7 +579,7 @@ impl<T: Item> ItemHandle for Entity<T> {
handler: Box<dyn Fn(ItemEvent, &mut Window, &mut App)>,
) -> gpui::Subscription {
window.subscribe(self, cx, move |_, event, window, cx| {
- T::to_item_events(event, |item_event| handler(item_event, window, cx));
+ T::to_item_events(event, &mut |item_event| handler(item_event, window, cx));
})
}
@@ -836,7 +836,7 @@ impl<T: Item> ItemHandle for Entity<T> {
workspace.enqueue_item_serialization(item).ok();
}
- T::to_item_events(event, |event| match event {
+ T::to_item_events(event, &mut |event| match event {
ItemEvent::CloseItem => {
pane.update(cx, |pane, cx| {
pane.close_item_by_id(
@@ -1545,7 +1545,7 @@ pub mod test {
impl Item for TestItem {
type Event = ItemEvent;
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(ItemEvent)) {
f(*event)
}
@@ -4528,7 +4528,7 @@ impl NavHistory {
pub fn for_each_entry(
&self,
cx: &App,
- mut f: impl FnMut(&NavigationEntry, (ProjectPath, Option<PathBuf>)),
+ f: &mut dyn FnMut(&NavigationEntry, (ProjectPath, Option<PathBuf>)),
) {
let borrowed_history = self.0.lock();
borrowed_history
@@ -2746,7 +2746,7 @@ mod tests {
ON DELETE CASCADE
) STRICT;
)],
- |_, _, _| false,
+ &mut |_, _, _| false,
)
.unwrap();
})
@@ -2795,7 +2795,7 @@ mod tests {
REFERENCES workspaces(workspace_id)
ON DELETE CASCADE
) STRICT;)],
- |_, _, _| false,
+ &mut |_, _, _| false,
)
})
.await
@@ -133,7 +133,7 @@ impl Item for SharedScreen {
})))
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(ItemEvent)) {
match event {
Event::Close => f(ItemEvent::CloseItem),
}
@@ -86,7 +86,7 @@ impl ThemePreview {}
impl Item for ThemePreview {
type Event = ();
- fn to_item_events(_: &Self::Event, _: impl FnMut(crate::item::ItemEvent)) {}
+ fn to_item_events(_: &Self::Event, _: &mut dyn FnMut(crate::item::ItemEvent)) {}
fn tab_content_text(&self, _detail: usize, cx: &App) -> SharedString {
let name = cx.theme().name.clone();
@@ -465,7 +465,7 @@ impl Item for WelcomePage {
false
}
- fn to_item_events(event: &Self::Event, mut f: impl FnMut(crate::item::ItemEvent)) {
+ fn to_item_events(event: &Self::Event, f: &mut dyn FnMut(crate::item::ItemEvent)) {
f(*event)
}
}
@@ -2100,7 +2100,7 @@ impl Workspace {
let pane = pane.read(cx);
pane.nav_history()
- .for_each_entry(cx, |entry, (project_path, fs_path)| {
+ .for_each_entry(cx, &mut |entry, (project_path, fs_path)| {
if let Some(fs_path) = &fs_path {
abs_paths_opened
.entry(fs_path.clone())
@@ -2179,7 +2179,13 @@ impl Workspace {
window: &mut Window,
cx: &mut Context<Workspace>,
) -> Task<Result<()>> {
- self.navigate_history_impl(pane, mode, window, |history, cx| history.pop(mode, cx), cx)
+ self.navigate_history_impl(
+ pane,
+ mode,
+ window,
+ &mut |history, cx| history.pop(mode, cx),
+ cx,
+ )
}
fn navigate_tag_history(
@@ -2193,7 +2199,7 @@ impl Workspace {
pane,
NavigationMode::Normal,
window,
- |history, _cx| history.pop_tag(mode),
+ &mut |history, _cx| history.pop_tag(mode),
cx,
)
}
@@ -2203,7 +2209,7 @@ impl Workspace {
pane: WeakEntity<Pane>,
mode: NavigationMode,
window: &mut Window,
- mut cb: impl FnMut(&mut NavHistory, &mut App) -> Option<NavigationEntry>,
+ cb: &mut dyn FnMut(&mut NavHistory, &mut App) -> Option<NavigationEntry>,
cx: &mut Context<Workspace>,
) -> Task<Result<()>> {
let to_load = if let Some(pane) = pane.upgrade() {
@@ -3624,7 +3630,7 @@ impl Workspace {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Entity<T>> {
- let panel = self.focus_or_unfocus_panel::<T>(window, cx, |_, _, _| true)?;
+ let panel = self.focus_or_unfocus_panel::<T>(window, cx, &mut |_, _, _| true)?;
panel.to_any().downcast().ok()
}
@@ -3638,7 +3644,7 @@ impl Workspace {
cx: &mut Context<Self>,
) -> bool {
let mut did_focus_panel = false;
- self.focus_or_unfocus_panel::<T>(window, cx, |panel, window, cx| {
+ self.focus_or_unfocus_panel::<T>(window, cx, &mut |panel, window, cx| {
did_focus_panel = !panel.panel_focus_handle(cx).contains_focused(window, cx);
did_focus_panel
});
@@ -3687,7 +3693,7 @@ impl Workspace {
&mut self,
window: &mut Window,
cx: &mut Context<Self>,
- mut should_focus: impl FnMut(&dyn PanelHandle, &mut Window, &mut Context<Dock>) -> bool,
+ should_focus: &mut dyn FnMut(&dyn PanelHandle, &mut Window, &mut Context<Dock>) -> bool,
) -> Option<Arc<dyn PanelHandle>> {
let mut result_panel = None;
let mut serialize = false;
@@ -12059,7 +12065,7 @@ mod tests {
// Check navigation history after close
let has_item = pane.read_with(cx, |pane, cx| {
let mut has_item = false;
- pane.nav_history().for_each_entry(cx, |entry, _| {
+ pane.nav_history().for_each_entry(cx, &mut |entry, _| {
if entry.item.id() == item1_id {
has_item = true;
}