Show function parameters in elixir outline view
Introduce a new capture in the outline query called 'context.extra', which causes text to appear in the outline, but not in the breadcrumbs.
This commit is contained in:
parent
7aeaa84657
commit
4b9a3c66e6
6 changed files with 76 additions and 11 deletions
|
@ -2253,7 +2253,7 @@ impl BufferSnapshot {
|
|||
}
|
||||
|
||||
pub fn outline(&self, theme: Option<&SyntaxTheme>) -> Option<Outline<Anchor>> {
|
||||
self.outline_items_containing(0..self.len(), theme)
|
||||
self.outline_items_containing(0..self.len(), true, theme)
|
||||
.map(Outline::new)
|
||||
}
|
||||
|
||||
|
@ -2265,6 +2265,7 @@ impl BufferSnapshot {
|
|||
let position = position.to_offset(self);
|
||||
let mut items = self.outline_items_containing(
|
||||
position.saturating_sub(1)..self.len().min(position + 1),
|
||||
false,
|
||||
theme,
|
||||
)?;
|
||||
let mut prev_depth = None;
|
||||
|
@ -2279,6 +2280,7 @@ impl BufferSnapshot {
|
|||
fn outline_items_containing(
|
||||
&self,
|
||||
range: Range<usize>,
|
||||
include_extra_context: bool,
|
||||
theme: Option<&SyntaxTheme>,
|
||||
) -> Option<Vec<OutlineItem<Anchor>>> {
|
||||
let mut matches = self.syntax.matches(range.clone(), &self.text, |grammar| {
|
||||
|
@ -2313,7 +2315,10 @@ impl BufferSnapshot {
|
|||
let node_is_name;
|
||||
if capture.index == config.name_capture_ix {
|
||||
node_is_name = true;
|
||||
} else if Some(capture.index) == config.context_capture_ix {
|
||||
} else if Some(capture.index) == config.context_capture_ix
|
||||
|| (Some(capture.index) == config.extra_context_capture_ix
|
||||
&& include_extra_context)
|
||||
{
|
||||
node_is_name = false;
|
||||
} else {
|
||||
continue;
|
||||
|
@ -2340,10 +2345,12 @@ impl BufferSnapshot {
|
|||
buffer_ranges.first().unwrap().0.start..buffer_ranges.last().unwrap().0.end,
|
||||
true,
|
||||
);
|
||||
let mut last_buffer_range_end = 0;
|
||||
for (buffer_range, is_name) in buffer_ranges {
|
||||
if !text.is_empty() {
|
||||
if !text.is_empty() && buffer_range.start > last_buffer_range_end {
|
||||
text.push(' ');
|
||||
}
|
||||
last_buffer_range_end = buffer_range.end;
|
||||
if is_name {
|
||||
let mut start = text.len();
|
||||
let end = start + buffer_range.len();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue