🎨 Return an option task from confirm_completion

This commit is contained in:
Max Brunsfeld 2022-02-01 14:27:01 -08:00
parent 55cc7bb868
commit 1371a20e58
4 changed files with 36 additions and 54 deletions

View file

@ -1781,35 +1781,22 @@ impl Buffer {
&mut self,
completion: Completion<Anchor>,
cx: &mut ModelContext<Self>,
) -> Task<Result<()>> {
) -> Option<Task<Result<()>>> {
self.edit_with_autoindent([completion.old_range], completion.new_text.clone(), cx);
let file = if let Some(file) = self.file.as_ref() {
file
} else {
return Task::ready(Ok(Default::default()));
};
if file.is_local() {
let server = if let Some(lang) = self.language_server.as_ref() {
lang.server.clone()
} else {
return Task::ready(Ok(Default::default()));
};
cx.spawn(|this, mut cx| async move {
let resolved_completion = server
.request::<lsp::request::ResolveCompletionItem>(completion.lsp_completion)
.await?;
if let Some(additional_edits) = resolved_completion.additional_text_edits {
this.update(&mut cx, |this, cx| {
this.apply_lsp_edits(additional_edits, cx)
})?;
}
Ok::<_, anyhow::Error>(())
})
} else {
return Task::ready(Ok(Default::default()));
}
self.file.as_ref()?.as_local()?;
let server = self.language_server.as_ref()?.server.clone();
Some(cx.spawn(|this, mut cx| async move {
let resolved_completion = server
.request::<lsp::request::ResolveCompletionItem>(completion.lsp_completion)
.await?;
if let Some(additional_edits) = resolved_completion.additional_text_edits {
this.update(&mut cx, |this, cx| {
this.apply_lsp_edits(additional_edits, cx)
})?;
}
Ok::<_, anyhow::Error>(())
}))
}
}