1
0
Fork 0
mirror of https://github.com/helix-editor/helix synced 2024-05-20 03:46:05 +02:00

Simplify compositor.find

This commit is contained in:
Blaž Hrastnik 2021-11-18 11:08:47 +09:00
parent 90fd09f2cc
commit fa4c59df46
3 changed files with 15 additions and 30 deletions

View File

@ -270,12 +270,8 @@ pub fn handle_idle_timeout(&mut self) {
}
let editor_view = self
.compositor
.find(std::any::type_name::<ui::EditorView>())
.find::<ui::EditorView>()
.expect("expected at least one EditorView");
let editor_view = editor_view
.as_any_mut()
.downcast_mut::<ui::EditorView>()
.unwrap();
if editor_view.completion.is_some() {
return;
@ -440,12 +436,8 @@ pub async fn handle_language_server_message(
{
let editor_view = self
.compositor
.find(std::any::type_name::<ui::EditorView>())
.find::<ui::EditorView>()
.expect("expected at least one EditorView");
let editor_view = editor_view
.as_any_mut()
.downcast_mut::<ui::EditorView>()
.unwrap();
let lsp::ProgressParams { token, value } = params;
let lsp::ProgressParamsValue::WorkDone(work) = value;
@ -559,12 +551,8 @@ pub async fn handle_language_server_message(
let editor_view = self
.compositor
.find(std::any::type_name::<ui::EditorView>())
.find::<ui::EditorView>()
.expect("expected at least one EditorView");
let editor_view = editor_view
.as_any_mut()
.downcast_mut::<ui::EditorView>()
.unwrap();
let spinner = editor_view.spinners_mut().get_or_create(server_id);
if spinner.is_stopped() {
spinner.start();

View File

@ -4735,19 +4735,15 @@ pub fn completion(cx: &mut Context) {
return;
}
let size = compositor.size();
let ui = compositor
.find(std::any::type_name::<ui::EditorView>())
.unwrap();
if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
ui.set_completion(
editor,
items,
offset_encoding,
start_offset,
trigger_offset,
size,
);
};
let ui = compositor.find::<ui::EditorView>().unwrap();
ui.set_completion(
editor,
items,
offset_encoding,
start_offset,
trigger_offset,
size,
);
},
);
}

View File

@ -177,11 +177,12 @@ pub fn has_component(&self, type_name: &str) -> bool {
.any(|component| component.type_name() == type_name)
}
pub fn find(&mut self, type_name: &str) -> Option<&mut dyn Component> {
pub fn find<T: 'static>(&mut self) -> Option<&mut T> {
let type_name = std::any::type_name::<T>();
self.layers
.iter_mut()
.find(|component| component.type_name() == type_name)
.map(|component| component.as_mut())
.and_then(|component| component.as_any_mut().downcast_mut())
}
}