Skip to content

Commit

Permalink
Add FoldFunctionBodies editor action
Browse files Browse the repository at this point in the history
Co-authored-by: Conrad <[email protected]>
  • Loading branch information
cole-miller and ConradIrwin committed Dec 4, 2024
1 parent 3019960 commit a489c7f
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 0 deletions.
1 change: 1 addition & 0 deletions crates/editor/src/actions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ gpui::actions!(
FindAllReferences,
Fold,
FoldAll,
FoldFunctionBodies,
FoldRecursive,
FoldSelectedRanges,
ToggleFold,
Expand Down
17 changes: 17 additions & 0 deletions crates/editor/src/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11097,6 +11097,23 @@ impl Editor {
self.fold_creases(fold_ranges, true, cx);
}

pub fn fold_function_bodies(
&mut self,
_: &actions::FoldFunctionBodies,
cx: &mut ViewContext<Self>,
) {
let snapshot = self.buffer.read(cx).snapshot(cx);
let Some((_, _, buffer)) = snapshot.as_singleton() else {
return;
};
let creases = buffer
.function_body_fold_ranges(0..buffer.len())
.map(|range| Crease::simple(range, self.display_map.read(cx).fold_placeholder.clone()))
.collect();

self.fold_creases(creases, true, cx);
}

pub fn fold_recursive(&mut self, _: &actions::FoldRecursive, cx: &mut ViewContext<Self>) {
let mut to_fold = Vec::new();
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
Expand Down
1 change: 1 addition & 0 deletions crates/editor/src/element.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,7 @@ impl EditorElement {
register_action(view, cx, Editor::fold);
register_action(view, cx, Editor::fold_at_level);
register_action(view, cx, Editor::fold_all);
register_action(view, cx, Editor::fold_function_bodies);
register_action(view, cx, Editor::fold_at);
register_action(view, cx, Editor::fold_recursive);
register_action(view, cx, Editor::toggle_fold);
Expand Down
8 changes: 8 additions & 0 deletions crates/language/src/buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3355,6 +3355,14 @@ impl BufferSnapshot {
})
}

pub fn function_body_fold_ranges<T: ToOffset>(
&self,
within: Range<T>,
) -> impl Iterator<Item = Range<usize>> + '_ {
self.text_object_ranges(within, TreeSitterOptions::default())
.filter_map(|(range, obj)| (obj == TextObject::InsideFunction).then_some(range))
}

/// For each grammar in the language, runs the provided
/// [`tree_sitter::Query`] against the given range.
pub fn matches(
Expand Down

0 comments on commit a489c7f

Please sign in to comment.