on master help sign in
Remove LspNotDefined, instead return an Option<>
a123fb6Blaž Hrastnik
helix-lsp/src/lib.rs+5−11
@@ -38,8 +38,6 @@ pub enum Error {
38 Timeout,
38 Timeout,
39 #[error("server closed the stream")]
39 #[error("server closed the stream")]
40 StreamClosed,
40 StreamClosed,
41− #[error("LSP not defined")]
42− LspNotDefined,
43 #[error("Unhandled")]
41 #[error("Unhandled")]
44 Unhandled,
42 Unhandled,
45 #[error(transparent)]
43 #[error(transparent)]
@@ -320,14 +318,14 @@ impl Registry {
320 .map(|(_, client)| client.as_ref())
318 .map(|(_, client)| client.as_ref())
321 }
319 }
322
320
323− pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result<Arc<Client>> {
321+ pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result<Option<Arc<Client>>> {
324 let config = match &language_config.language_server {
322 let config = match &language_config.language_server {
325 Some(config) => config,
323 Some(config) => config,
326− None => return Err(Error::LspNotDefined),
324+ None => return Ok(None),
327 };
325 };
328
326
329 match self.inner.entry(language_config.scope.clone()) {
327 match self.inner.entry(language_config.scope.clone()) {
330− Entry::Occupied(entry) => Ok(entry.get().1.clone()),
328+ Entry::Occupied(entry) => Ok(Some(entry.get().1.clone())),
331 Entry::Vacant(entry) => {
329 Entry::Vacant(entry) => {
332 // initialize a new client
330 // initialize a new client
333 let id = self.counter.fetch_add(1, Ordering::Relaxed);
331 let id = self.counter.fetch_add(1, Ordering::Relaxed);
@@ -356,11 +354,7 @@ impl Registry {
356 .await;
354 .await;
357
355
358 if let Err(e) = value {
356 if let Err(e) = value {
359− if let Error::LspNotDefined = e {
360− // Skip logging "lsp not defined"
361− } else {
362− log::error!("failed to initialize language server: {}", e);
357+ log::error!("failed to initialize language server: {}", e);
363− }
364 return;
358 return;
365 }
359 }
366
360
@@ -374,7 +368,7 @@ impl Registry {
374 });
368 });
375
369
376 entry.insert((id, client.clone()));
370 entry.insert((id, client.clone()));
377− Ok(client)
371+ Ok(Some(client))
378 }
372 }
379 }
373 }
380 }
374 }
helix-term/src/ui/editor.rs+1
@@ -1316,6 +1316,7 @@ impl Component for EditorView {
1316 if cx.editor.should_close() {
1316 if cx.editor.should_close() {
1317 return EventResult::Ignored(None);
1317 return EventResult::Ignored(None);
1318 }
1318 }
1319+
1319 // if the focused view still exists and wasn't closed
1320 // if the focused view still exists and wasn't closed
1320 if cx.editor.tree.contains(focus) {
1321 if cx.editor.tree.contains(focus) {
1321 let config = cx.editor.config();
1322 let config = cx.editor.config();
helix-view/src/editor.rs+1
@@ -853,6 +853,7 @@ impl Editor {
853 )
853 )
854 })
854 })
855 .ok()
855 .ok()
856+ .flatten()
856 });
857 });
857 if let Some(language_server) = language_server {
858 if let Some(language_server) = language_server {
858 // only spawn a new lang server if the servers aren't the same
859 // only spawn a new lang server if the servers aren't the same