Add excerpts into outline panel (#13034)

Follow-up of https://github.com/zed-industries/zed/pull/12637

Adds excerpt items into the outline panel: now all outline items are
initially hidden under excerpt items that could be toggled open/closed
similar to directories.


![Screenshot 2024-06-14 at 10 45
04](https://github.com/zed-industries/zed/assets/2690773/9c9ef91b-1666-43c3-acc4-96f850098a28)

On active editor's selection change, a corresponding outline will be
revealed still, expanding the corresponding excerpt

![Screenshot 2024-06-14 at 10 45
13](https://github.com/zed-industries/zed/assets/2690773/7dfd14f7-4aca-48f2-8760-8e1362b9a043)

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2024-06-14 12:03:16 +03:00 committed by GitHub
parent 1248788780
commit eb7a09b459
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 1106 additions and 894 deletions

View file

@ -94,9 +94,9 @@ pub enum Event {
DiffUpdated {
buffer: Model<Buffer>,
},
LanguageChanged,
LanguageChanged(BufferId),
CapabilityChanged,
Reparsed,
Reparsed(BufferId),
Saved,
FileHandleChanged,
Closed,
@ -538,9 +538,13 @@ impl MultiBuffer {
});
if let Some(buffer) = self.as_singleton() {
return buffer.update(cx, |buffer, cx| {
buffer.update(cx, |buffer, cx| {
buffer.edit(edits, autoindent_mode, cx);
});
cx.emit(Event::ExcerptsEdited {
ids: self.excerpt_ids(),
});
return;
}
let original_indent_columns = match &mut autoindent_mode {
@ -1639,8 +1643,8 @@ impl MultiBuffer {
language::Event::Reloaded => Event::Reloaded,
language::Event::DiffBaseChanged => Event::DiffBaseChanged,
language::Event::DiffUpdated => Event::DiffUpdated { buffer },
language::Event::LanguageChanged => Event::LanguageChanged,
language::Event::Reparsed => Event::Reparsed,
language::Event::LanguageChanged => Event::LanguageChanged(buffer.read(cx).remote_id()),
language::Event::Reparsed => Event::Reparsed(buffer.read(cx).remote_id()),
language::Event::DiagnosticsUpdated => Event::DiagnosticsUpdated,
language::Event::Closed => Event::Closed,
language::Event::CapabilityChanged => {