From a123fb60572720a5fd0817b194f4d34534f87b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Wed, 7 Sep 2022 16:42:33 +0900 Subject: [PATCH] Remove LspNotDefined, instead return an Option<> --- helix-lsp/src/lib.rs | 16 +++++----------- helix-term/src/ui/editor.rs | 1 + helix-view/src/editor.rs | 1 + 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs index 516c93ca..a39325fa 100644 --- a/helix-lsp/src/lib.rs +++ b/helix-lsp/src/lib.rs @@ -38,8 +38,6 @@ pub enum Error { Timeout, #[error("server closed the stream")] StreamClosed, - #[error("LSP not defined")] - LspNotDefined, #[error("Unhandled")] Unhandled, #[error(transparent)] @@ -320,14 +318,14 @@ impl Registry { .map(|(_, client)| client.as_ref()) } - pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result> { + pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result>> { let config = match &language_config.language_server { Some(config) => config, - None => return Err(Error::LspNotDefined), + None => return Ok(None), }; match self.inner.entry(language_config.scope.clone()) { - Entry::Occupied(entry) => Ok(entry.get().1.clone()), + Entry::Occupied(entry) => Ok(Some(entry.get().1.clone())), Entry::Vacant(entry) => { // initialize a new client let id = self.counter.fetch_add(1, Ordering::Relaxed); @@ -356,11 +354,7 @@ impl Registry { .await; if let Err(e) = value { - if let Error::LspNotDefined = e { - // Skip logging "lsp not defined" - } else { - log::error!("failed to initialize language server: {}", e); - } + log::error!("failed to initialize language server: {}", e); return; } @@ -374,7 +368,7 @@ impl Registry { }); entry.insert((id, client.clone())); - Ok(client) + Ok(Some(client)) } } } diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 64e95e33..7cb29c3b 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -1316,6 +1316,7 @@ impl Component for EditorView { if cx.editor.should_close() { return EventResult::Ignored(None); } + // if the focused view still exists and wasn't closed if cx.editor.tree.contains(focus) { let config = cx.editor.config(); diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index b6947e44..5eff9983 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -853,6 +853,7 @@ impl Editor { ) }) .ok() + .flatten() }); if let Some(language_server) = language_server { // only spawn a new lang server if the servers aren't the same