From ef596c64f8e38fc184ca7da781488bf1be80611d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 13 Jan 2022 11:35:43 +0100 Subject: [PATCH] Add OutlineItem::depth so that we can render a tree in the outline view --- crates/language/src/buffer.rs | 11 ++++++++++- crates/language/src/outline.rs | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 515def357f..a0c9e38349 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -1853,8 +1853,9 @@ impl BufferSnapshot { let context_capture_ix = grammar.outline_query.capture_index_for_name("context")?; let name_capture_ix = grammar.outline_query.capture_index_for_name("name")?; + let mut stack: Vec> = Default::default(); let mut id = 0; - let mut items = matches + let items = matches .filter_map(|mat| { let item_node = mat.nodes_for_capture_index(item_capture_ix).next()?; let mut name_node = Some(mat.nodes_for_capture_index(name_capture_ix).next()?); @@ -1899,8 +1900,16 @@ impl BufferSnapshot { text.extend(self.text_for_range(range)); } + while stack.last().map_or(false, |prev_range| { + !prev_range.contains(&range.start) || !prev_range.contains(&range.end) + }) { + stack.pop(); + } + stack.push(range.clone()); + Some(OutlineItem { id, + depth: stack.len() - 1, range, text, name_range_in_text, diff --git a/crates/language/src/outline.rs b/crates/language/src/outline.rs index 427b91d464..c824c6cd87 100644 --- a/crates/language/src/outline.rs +++ b/crates/language/src/outline.rs @@ -6,6 +6,7 @@ pub struct Outline(pub Vec); #[derive(Debug)] pub struct OutlineItem { pub id: usize, + pub depth: usize, pub range: Range, pub text: String, pub name_range_in_text: Range,