Prevent outline items from accidentally spanning multiple lines
This commit is contained in:
parent
062e7a03a9
commit
d9948bf772
3 changed files with 34 additions and 5 deletions
|
@ -2168,8 +2168,6 @@ impl BufferSnapshot {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO - move later, after processing captures
|
|
||||||
|
|
||||||
let mut text = String::new();
|
let mut text = String::new();
|
||||||
let mut name_ranges = Vec::new();
|
let mut name_ranges = Vec::new();
|
||||||
let mut highlight_ranges = Vec::new();
|
let mut highlight_ranges = Vec::new();
|
||||||
|
@ -2183,7 +2181,13 @@ impl BufferSnapshot {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let range = capture.node.start_byte()..capture.node.end_byte();
|
let mut range = capture.node.start_byte()..capture.node.end_byte();
|
||||||
|
let start = capture.node.start_position();
|
||||||
|
if capture.node.end_position().row > start.row {
|
||||||
|
range.end =
|
||||||
|
range.start + self.line_len(start.row as u32) as usize - start.column;
|
||||||
|
}
|
||||||
|
|
||||||
if !text.is_empty() {
|
if !text.is_empty() {
|
||||||
text.push(' ');
|
text.push(' ');
|
||||||
}
|
}
|
||||||
|
|
|
@ -455,6 +455,32 @@ async fn test_outline(cx: &mut gpui::TestAppContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[gpui::test]
|
||||||
|
async fn test_outline_nodes_with_newlines(cx: &mut gpui::TestAppContext) {
|
||||||
|
let text = r#"
|
||||||
|
impl A for B<
|
||||||
|
C
|
||||||
|
> {
|
||||||
|
};
|
||||||
|
"#
|
||||||
|
.unindent();
|
||||||
|
|
||||||
|
let buffer =
|
||||||
|
cx.add_model(|cx| Buffer::new(0, text, cx).with_language(Arc::new(rust_lang()), cx));
|
||||||
|
let outline = buffer
|
||||||
|
.read_with(cx, |buffer, _| buffer.snapshot().outline(None))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
outline
|
||||||
|
.items
|
||||||
|
.iter()
|
||||||
|
.map(|item| (item.text.as_str(), item.depth))
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
&[("impl A for B<", 0)]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[gpui::test]
|
#[gpui::test]
|
||||||
async fn test_symbols_containing(cx: &mut gpui::TestAppContext) {
|
async fn test_symbols_containing(cx: &mut gpui::TestAppContext) {
|
||||||
let text = r#"
|
let text = r#"
|
||||||
|
|
|
@ -40,5 +40,4 @@
|
||||||
")" @context)) @item
|
")" @context)) @item
|
||||||
|
|
||||||
(field_declaration
|
(field_declaration
|
||||||
name: (_) @name
|
name: (_) @name) @item
|
||||||
type: (_) @context) @item
|
|
Loading…
Add table
Add a link
Reference in a new issue