summaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-11-18 02:08:47 +0000
committerBlaž Hrastnik2021-11-18 02:09:04 +0000
commitfa4c59df4623ac33c307c5637dcf74c83c71d763 (patch)
treef8f4a197641d5fd9fbbdaecd9281c37bb14bd23b /helix-term
parent90fd09f2cc4e5dfa7380036b0748adf95ffdf371 (diff)
Simplify compositor.find
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/application.rs18
-rw-r--r--helix-term/src/commands.rs22
-rw-r--r--helix-term/src/compositor.rs5
3 files changed, 15 insertions, 30 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 2969a9e5..78b93cd9 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -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;
@@ -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;
@@ -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();
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index e9bfdfdd..847e6f09 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -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,
+ );
},
);
}
diff --git a/helix-term/src/compositor.rs b/helix-term/src/compositor.rs
index dc8b91d7..3a644750 100644
--- a/helix-term/src/compositor.rs
+++ b/helix-term/src/compositor.rs
@@ -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())
}
}