on master help sign in
Hold `Config` in `Application`, expect at least one editor view
commitaca9d73fe400e5147f27995374794781c1c49079 authorwojciechkepka <wojtek.kepka@protonmail.com> dateMon 21 Jun 2021, 05:44 (5 years ago) parentcc357d5
1 file changed+23−31
helix-term/src/application.rs+23−31
helix-term/src/application.rs+23−31
@@ -44,12 +44,13 @@ pub struct Application {
4444 compositor: Compositor,
4545 editor: Editor,
4646
47+ config: Config,
48+
4749 theme_loader: Arc<theme::Loader>,
4850 syn_loader: Arc<syntax::Loader>,
49− callbacks: LspCallbacks,
5051
52+ callbacks: LspCallbacks,
5153 lsp_progress: LspProgressMap,
52− lsp_display_messages: bool,
5354}
5455
5556impl Application {
@@ -86,7 +87,7 @@ impl Application {
8687
8788 let mut editor = Editor::new(size, theme_loader.clone(), syn_loader.clone());
8889
89− let mut editor_view = Box::new(ui::EditorView::new(config.keymaps));
90+ let mut editor_view = Box::new(ui::EditorView::new(config.keymaps.clone()));
9091 compositor.push(editor_view);
9192
9293 if !args.files.is_empty() {
@@ -115,11 +116,13 @@ impl Application {
115116 compositor,
116117 editor,
117118
119+ config,
120+
118121 theme_loader,
119122 syn_loader,
123+
120124 callbacks: FuturesUnordered::new(),
121125 lsp_progress: LspProgressMap::new(),
122− lsp_display_messages: config.lsp.display_messages,
123126 };
124127
125128 Ok(app)
@@ -205,6 +208,15 @@ impl Application {
205208 server_id: usize,
206209 ) {
207210 use helix_lsp::{Call, MethodCall, Notification};
211+ let editor_view = self
212+ .compositor
213+ .find(std::any::type_name::<ui::EditorView>())
214+ .expect("expected at least one EditorView");
215+ let editor_view = editor_view
216+ .as_any_mut()
217+ .downcast_mut::<ui::EditorView>()
218+ .unwrap();
219+
208220 match call {
209221 Call::Notification(helix_lsp::jsonrpc::Notification { method, params, .. }) => {
210222 let notification = match Notification::parse(&method, params) {
@@ -313,15 +325,7 @@ impl Application {
313325 } else {
314326 self.lsp_progress.end_progress(server_id, &token);
315327 if !self.lsp_progress.is_progressing(server_id) {
316− let ui = self
317− .compositor
318− .find(std::any::type_name::<ui::EditorView>())
319− .unwrap();
320− if let Some(ui) =
321− ui.as_any_mut().downcast_mut::<ui::EditorView>()
322− {
323− ui.spinners_mut().get_or_create(server_id).stop();
324− };
328+ editor_view.spinners_mut().get_or_create(server_id).stop();
325329 }
326330 self.editor.clear_status();
327331 return;
@@ -362,19 +366,13 @@ impl Application {
362366 if let lsp::WorkDoneProgress::End(_) = work {
363367 self.lsp_progress.end_progress(server_id, &token);
364368 if !self.lsp_progress.is_progressing(server_id) {
365− let ui = self
366− .compositor
367− .find(std::any::type_name::<ui::EditorView>())
368− .unwrap();
369− if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
370− ui.spinners_mut().get_or_create(server_id).stop();
371− };
369+ editor_view.spinners_mut().get_or_create(server_id).stop();
372370 }
373371 } else {
374372 self.lsp_progress.update(server_id, token, work);
375373 }
376374
377− if self.lsp_display_messages {
375+ if self.config.lsp.display_messages {
378376 self.editor.set_status(status);
379377 }
380378 self.render();
@@ -400,16 +398,10 @@ impl Application {
400398 MethodCall::WorkDoneProgressCreate(params) => {
401399 self.lsp_progress.create(server_id, params.token);
402400
403− let ui = self
404− .compositor
405− .find(std::any::type_name::<ui::EditorView>())
406− .unwrap();
407− if let Some(ui) = ui.as_any_mut().downcast_mut::<ui::EditorView>() {
408− let spinner = ui.spinners_mut().get_or_create(server_id);
409− if spinner.is_stopped() {
410− spinner.start();
411− }
412− };
401+ let spinner = editor_view.spinners_mut().get_or_create(server_id);
402+ if spinner.is_stopped() {
403+ spinner.start();
404+ }
413405
414406 let doc = self.editor.documents().find(|doc| {
415407 doc.language_server()