diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index 36938f62a3048b87dd890ca6e7ca8fc2499689e4..c9408b537eb15576691a45e75982cf96f5f4a160 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -761,6 +761,7 @@ impl LanguageServer { properties: vec![ "additionalTextEdits".to_string(), "command".to_string(), + "detail".to_string(), "documentation".to_string(), // NB: Do not have this resolved, otherwise Zed becomes slow to complete things // "textEdit".to_string(), diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index d9c74da8cb93c8f43004cb34b185b20d04bb1bbf..19660526ebd8015a872e8f79328aa74418d99798 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -6537,8 +6537,9 @@ impl LspStore { let mut new_label = match completion_item { Some(completion_item) => { - // 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... + // Some language servers always return `detail` lazily via resolve, regardless of + // the resolvable properties Zed advertises. Regenerate labels here to handle this. + // See: https://github.com/yioneko/vtsls/issues/213 let language = snapshot.language(); match language { Some(language) => {