Remove LspNotDefined, instead return an Option<>

pull/3215/head^2
Blaž Hrastnik 2 years ago
parent fe37a66046
commit a123fb6057
No known key found for this signature in database
GPG Key ID: 1238B9C4AD889640

@ -38,8 +38,6 @@ pub enum Error {
Timeout, Timeout,
#[error("server closed the stream")] #[error("server closed the stream")]
StreamClosed, StreamClosed,
#[error("LSP not defined")]
LspNotDefined,
#[error("Unhandled")] #[error("Unhandled")]
Unhandled, Unhandled,
#[error(transparent)] #[error(transparent)]
@ -320,14 +318,14 @@ impl Registry {
.map(|(_, client)| client.as_ref()) .map(|(_, client)| client.as_ref())
} }
pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result<Arc<Client>> { pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result<Option<Arc<Client>>> {
let config = match &language_config.language_server { let config = match &language_config.language_server {
Some(config) => config, Some(config) => config,
None => return Err(Error::LspNotDefined), None => return Ok(None),
}; };
match self.inner.entry(language_config.scope.clone()) { 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) => { Entry::Vacant(entry) => {
// initialize a new client // initialize a new client
let id = self.counter.fetch_add(1, Ordering::Relaxed); let id = self.counter.fetch_add(1, Ordering::Relaxed);
@ -356,11 +354,7 @@ impl Registry {
.await; .await;
if let Err(e) = value { 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; return;
} }
@ -374,7 +368,7 @@ impl Registry {
}); });
entry.insert((id, client.clone())); entry.insert((id, client.clone()));
Ok(client) Ok(Some(client))
} }
} }
} }

@ -1316,6 +1316,7 @@ impl Component for EditorView {
if cx.editor.should_close() { if cx.editor.should_close() {
return EventResult::Ignored(None); return EventResult::Ignored(None);
} }
// if the focused view still exists and wasn't closed // if the focused view still exists and wasn't closed
if cx.editor.tree.contains(focus) { if cx.editor.tree.contains(focus) {
let config = cx.editor.config(); let config = cx.editor.config();

@ -853,6 +853,7 @@ impl Editor {
) )
}) })
.ok() .ok()
.flatten()
}); });
if let Some(language_server) = language_server { if let Some(language_server) = language_server {
// only spawn a new lang server if the servers aren't the same // only spawn a new lang server if the servers aren't the same

Loading…
Cancel
Save