Allow all completions with preresolved additional text edits (#2711)
Deals with https://github.com/zed-industries/community/issues/752 Deals with https://github.com/zed-industries/community/issues/566 Currently, when converting from LSP to Zed objects, completions with non-empty `additional_text_edits` are filtered out. Later, all other completions form a list and the selected one gets the `Editor::confirm_completion` call, which always queries an LSP completion resolve request to get the `additional_text_edits` field. Otherwise, `additional_text_edits` field is ignored entirely for the rest of the completion lifetime — and we always pass the selected completion through the resolve request. The PR changes the logic, removing the `additional_text_edits` filtering and instead of resolving every completion, now we check for `additional_text_edits` in the completion before resolving: resolve happens only if the data is absent. Generally, feels like resolve has to happen before the completion selection: LSP servers may send us markdown for completion documentation preview pop ups and similar extra info. Also, the server may lack resolve capabilities entirely, always sending the request seems dangerous. For now, the PR does not attempt to change either. Release Notes: - Brings rust-analyzer's postfix completions and others completions with preresolved additional text edits
This commit is contained in:
commit
d164034198
3 changed files with 95 additions and 14 deletions
|
@ -4447,11 +4447,11 @@ impl Project {
|
|||
};
|
||||
|
||||
cx.spawn(|this, mut cx| async move {
|
||||
let resolved_completion = lang_server
|
||||
let additional_text_edits = lang_server
|
||||
.request::<lsp::request::ResolveCompletionItem>(completion.lsp_completion)
|
||||
.await?;
|
||||
|
||||
if let Some(edits) = resolved_completion.additional_text_edits {
|
||||
.await?
|
||||
.additional_text_edits;
|
||||
if let Some(edits) = additional_text_edits {
|
||||
let edits = this
|
||||
.update(&mut cx, |this, cx| {
|
||||
this.edits_from_lsp(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue