Remove LspNotDefined, instead return an Option<>

This commit is contained in:
Blaž Hrastnik 2022-09-07 16:42:33 +09:00
parent fe37a66046
commit a123fb6057
No known key found for this signature in database
GPG key ID: 1238B9C4AD889640
3 changed files with 7 additions and 11 deletions

View file

@ -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<Arc<Client>> {
pub fn get(&mut self, language_config: &LanguageConfiguration) -> Result<Option<Arc<Client>>> {
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))
}
}
}

View file

@ -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();

View file

@ -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