mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Introduce MultiBuffer::symbols_containing
This commit is contained in:
parent
bfa5dd52dd
commit
099250c691
@ -2264,6 +2264,33 @@ impl MultiBufferSnapshot {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn symbols_containing<T: ToOffset>(
|
||||||
|
&self,
|
||||||
|
offset: T,
|
||||||
|
theme: Option<&SyntaxTheme>,
|
||||||
|
) -> Option<(BufferSnapshot, Vec<OutlineItem<Anchor>>)> {
|
||||||
|
let anchor = self.anchor_before(offset);
|
||||||
|
let excerpt_id = anchor.excerpt_id();
|
||||||
|
let excerpt = self.excerpt(excerpt_id)?;
|
||||||
|
Some((
|
||||||
|
excerpt.buffer.clone(),
|
||||||
|
excerpt
|
||||||
|
.buffer
|
||||||
|
.symbols_containing(anchor.text_anchor, theme)
|
||||||
|
.into_iter()
|
||||||
|
.flatten()
|
||||||
|
.map(|item| OutlineItem {
|
||||||
|
depth: item.depth,
|
||||||
|
range: self.anchor_in_excerpt(excerpt_id.clone(), item.range.start)
|
||||||
|
..self.anchor_in_excerpt(excerpt_id.clone(), item.range.end),
|
||||||
|
text: item.text,
|
||||||
|
highlight_ranges: item.highlight_ranges,
|
||||||
|
name_ranges: item.name_ranges,
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
fn excerpt<'a>(&'a self, excerpt_id: &'a ExcerptId) -> Option<&'a Excerpt> {
|
fn excerpt<'a>(&'a self, excerpt_id: &'a ExcerptId) -> Option<&'a Excerpt> {
|
||||||
let mut cursor = self.excerpts.cursor::<Option<&ExcerptId>>();
|
let mut cursor = self.excerpts.cursor::<Option<&ExcerptId>>();
|
||||||
cursor.seek(&Some(excerpt_id), Bias::Left, &());
|
cursor.seek(&Some(excerpt_id), Bias::Left, &());
|
||||||
|
@ -4,7 +4,7 @@ use anyhow::Result;
|
|||||||
use std::{cmp::Ordering, fmt::Debug, ops::Range};
|
use std::{cmp::Ordering, fmt::Debug, ops::Range};
|
||||||
use sum_tree::Bias;
|
use sum_tree::Bias;
|
||||||
|
|
||||||
#[derive(Clone, Eq, PartialEq, Debug, Hash)]
|
#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
|
||||||
pub struct Anchor {
|
pub struct Anchor {
|
||||||
pub timestamp: clock::Local,
|
pub timestamp: clock::Local,
|
||||||
pub offset: usize,
|
pub offset: usize,
|
||||||
|
Loading…
Reference in New Issue
Block a user