Skip to content

Commit

Permalink
Simplify compositor.find
Browse files Browse the repository at this point in the history
  • Loading branch information
archseer committed Nov 18, 2021
1 parent 90fd09f commit fa4c59d
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 30 deletions.
18 changes: 3 additions & 15 deletions helix-term/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,12 +270,8 @@ impl Application {
}
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;
Expand Down Expand Up @@ -440,12 +436,8 @@ impl Application {
{
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;
Expand Down Expand Up @@ -559,12 +551,8 @@ impl Application {

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();
Expand Down
22 changes: 9 additions & 13 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
);
},
);
}
Expand Down
5 changes: 3 additions & 2 deletions helix-term/src/compositor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,11 +177,12 @@ impl Compositor {
.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())
}
}

Expand Down

0 comments on commit fa4c59d

Please sign in to comment.