lsp: Provide completion reason in the request (#12893)

This should help LS make a better call about the completions it should
return back to the caller. For example, it speeds up import completions
for typescript.
Before: 


https://github.com/zed-industries/zed/assets/24362066/b38fd565-f9ff-4db7-a87f-c3b31a9fdc96

after: 


https://github.com/zed-industries/zed/assets/24362066/d4fbc9ae-9aab-4543-b9f6-16acf1619576


This should be merged after 06.12 Preview to give it some time on
Nightly.

Release Notes:

- N/A
This commit is contained in:
Piotr Osiewicz 2024-06-13 14:38:34 +02:00 committed by GitHub
parent eb7b5a7131
commit 0a13b9ee01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 86 additions and 26 deletions

View file

@ -16,8 +16,9 @@ use language::{
OffsetRangeExt, PointUtf16, ToOffset, ToPointUtf16, Transaction, Unclipped,
};
use lsp::{
CompletionListItemDefaultsEditRange, DocumentHighlightKind, LanguageServer, LanguageServerId,
LinkedEditingRangeServerCapabilities, OneOf, ServerCapabilities,
CompletionContext, CompletionListItemDefaultsEditRange, CompletionTriggerKind,
DocumentHighlightKind, LanguageServer, LanguageServerId, LinkedEditingRangeServerCapabilities,
OneOf, ServerCapabilities,
};
use std::{cmp::Reverse, ops::Range, path::Path, sync::Arc};
use text::{BufferId, LineEnding};
@ -127,6 +128,7 @@ pub(crate) struct GetHover {
pub(crate) struct GetCompletions {
pub position: PointUtf16,
pub context: CompletionContext,
}
#[derive(Clone)]
@ -1464,7 +1466,7 @@ impl LspCommand for GetCompletions {
lsp::TextDocumentIdentifier::new(lsp::Uri::from_file_path(path).unwrap().into()),
point_to_lsp(self.position),
),
context: Default::default(),
context: Some(self.context.clone()),
work_done_progress_params: Default::default(),
partial_result_params: Default::default(),
}
@ -1649,7 +1651,13 @@ impl LspCommand for GetCompletions {
})
})
.ok_or_else(|| anyhow!("invalid position"))??;
Ok(Self { position })
Ok(Self {
position,
context: CompletionContext {
trigger_kind: CompletionTriggerKind::INVOKED,
trigger_character: None,
},
})
}
fn response_to_proto(