on master help sign in
Simplify compositor.find
commitfa4c59df4623ac33c307c5637dcf74c83c71d763 authorBlaž Hrastnik <blaz@mxxn.io> dateThu 18 Nov 2021, 11:08 (5 years ago) parent90fd09f
3 files changed+15−30
helix-term/src/application.rs+3−15 helix-term/src/commands.rs+9−13 helix-term/src/compositor.rs+3−2
helix-term/src/application.rs+3−15
@@ -270,12 +270,8 @@ impl Application {
270270 }
271271 let editor_view = self
272272 .compositor
273− .find(std::any::type_name::<ui::EditorView>())
273+ .find::<ui::EditorView>()
274274 .expect("expected at least one EditorView");
275− let editor_view = editor_view
276− .as_any_mut()
277− .downcast_mut::<ui::EditorView>()
278− .unwrap();
279275
280276 if editor_view.completion.is_some() {
281277 return;
@@ -440,12 +436,8 @@ impl Application {
440436 {
441437 let editor_view = self
442438 .compositor
443− .find(std::any::type_name::<ui::EditorView>())
439+ .find::<ui::EditorView>()
444440 .expect("expected at least one EditorView");
445− let editor_view = editor_view
446− .as_any_mut()
447− .downcast_mut::<ui::EditorView>()
448− .unwrap();
449441 let lsp::ProgressParams { token, value } = params;
450442
451443 let lsp::ProgressParamsValue::WorkDone(work) = value;
@@ -559,12 +551,8 @@ impl Application {
559551
560552 let editor_view = self
561553 .compositor
562− .find(std::any::type_name::<ui::EditorView>())
554+ .find::<ui::EditorView>()
563555 .expect("expected at least one EditorView");
564− let editor_view = editor_view
565− .as_any_mut()
566− .downcast_mut::<ui::EditorView>()
567− .unwrap();
568556 let spinner = editor_view.spinners_mut().get_or_create(server_id);
569557 if spinner.is_stopped() {
570558 spinner.start();
helix-term/src/commands.rs+9−13
@@ -4735,19 +4735,15 @@ pub fn completion(cx: &mut Context) {
47354735 return;
47364736 }
47374737 let size = compositor.size();
4738− let ui = compositor
4739− .find(std::any::type_name::<ui::EditorView>())
4740− .unwrap();
4741− if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
4742− ui.set_completion(
4743− editor,
4744− items,
4745− offset_encoding,
4746− start_offset,
4747− trigger_offset,
4748− size,
4749− );
4750− };
4738+ let ui = compositor.find::<ui::EditorView>().unwrap();
4739+ ui.set_completion(
4740+ editor,
4741+ items,
4742+ offset_encoding,
4743+ start_offset,
4744+ trigger_offset,
4745+ size,
4746+ );
47514747 },
47524748 );
47534749}
helix-term/src/compositor.rs+3−2
@@ -177,11 +177,12 @@ impl Compositor {
177177 .any(|component| component.type_name() == type_name)
178178 }
179179
180− pub fn find(&mut self, type_name: &str) -> Option<&mut dyn Component> {
180+ pub fn find<T: 'static>(&mut self) -> Option<&mut T> {
181+ let type_name = std::any::type_name::<T>();
181182 self.layers
182183 .iter_mut()
183184 .find(|component| component.type_name() == type_name)
184− .map(|component| component.as_mut())
185+ .and_then(|component| component.as_any_mut().downcast_mut())
185186 }
186187}
187188