Use more LSP data when falling back to regular completions label (#23909)
Closes https://github.com/zed-industries/zed/issues/23590 Closes https://x.com/steeve/status/1865129235536568555 Before: <img width="773" alt="before" src="https://github.com/user-attachments/assets/129a8d12-9298-4bf5-8f2d-b3292c2562bf" /> After: <img width="768" alt="after" src="https://github.com/user-attachments/assets/e0516fb3-b02a-48be-8923-63bba05fdb69" /> The list obviously needs some solution for the cut-off part of the completion label, but this is the reality for all extensions' completions too, so one step at a time. Release Notes: - Improved default completion label fallback
This commit is contained in:
parent
48dba9a9d9
commit
9e4555797d
3 changed files with 62 additions and 12 deletions
|
@ -4380,7 +4380,8 @@ impl LspStore {
|
|||
|
||||
// NB: Zed does not have `details` inside the completion resolve capabilities, but certain language servers violate the spec and do not return `details` immediately, e.g. https://github.com/yioneko/vtsls/issues/213
|
||||
// So we have to update the label here anyway...
|
||||
let mut new_label = match snapshot.language() {
|
||||
let language = snapshot.language();
|
||||
let mut new_label = match language {
|
||||
Some(language) => {
|
||||
adapter
|
||||
.labels_for_completions(&[completion_item.clone()], language)
|
||||
|
@ -4391,9 +4392,9 @@ impl LspStore {
|
|||
.pop()
|
||||
.flatten()
|
||||
.unwrap_or_else(|| {
|
||||
CodeLabel::plain(
|
||||
completion_item.label,
|
||||
completion_item.filter_text.as_deref(),
|
||||
CodeLabel::fallback_for_completion(
|
||||
&completion_item,
|
||||
language.map(|language| language.as_ref()),
|
||||
)
|
||||
});
|
||||
ensure_uniform_list_compatible_label(&mut new_label);
|
||||
|
@ -8079,10 +8080,7 @@ async fn populate_labels_for_completions(
|
|||
};
|
||||
|
||||
let mut label = label.unwrap_or_else(|| {
|
||||
CodeLabel::plain(
|
||||
lsp_completion.label.clone(),
|
||||
lsp_completion.filter_text.as_deref(),
|
||||
)
|
||||
CodeLabel::fallback_for_completion(&lsp_completion, language.as_deref())
|
||||
});
|
||||
ensure_uniform_list_compatible_label(&mut label);
|
||||
|
||||
|
@ -8883,7 +8881,7 @@ fn include_text(server: &lsp::LanguageServer) -> Option<bool> {
|
|||
/// Completion items are displayed in a `UniformList`.
|
||||
/// Usually, those items are single-line strings, but in LSP responses,
|
||||
/// completion items `label`, `detail` and `label_details.description` may contain newlines or long spaces.
|
||||
/// Many language plugins construct these items by joining these parts together, and we may fall back to `CodeLabel::plain` that uses `label`.
|
||||
/// Many language plugins construct these items by joining these parts together, and we may use `CodeLabel::fallback_for_completion` that uses `label` at least.
|
||||
/// All that may lead to a newline being inserted into resulting `CodeLabel.text`, which will force `UniformList` to bloat each entry to occupy more space,
|
||||
/// breaking the completions menu presentation.
|
||||
///
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue