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

@ -58,7 +58,7 @@ use language::{
};
use log::error;
use lsp::{
DiagnosticSeverity, DiagnosticTag, DidChangeWatchedFilesRegistrationOptions,
CompletionContext, DiagnosticSeverity, DiagnosticTag, DidChangeWatchedFilesRegistrationOptions,
DocumentHighlightKind, Edit, FileSystemWatcher, LanguageServer, LanguageServerBinary,
LanguageServerId, LspRequestFuture, MessageActionItem, OneOf, ServerCapabilities,
ServerHealthStatus, ServerStatus, TextEdit, Uri,
@ -651,6 +651,12 @@ pub enum SearchResult {
LimitReached,
}
#[cfg(any(test, feature = "test-support"))]
pub const DEFAULT_COMPLETION_CONTEXT: CompletionContext = CompletionContext {
trigger_kind: lsp::CompletionTriggerKind::INVOKED,
trigger_character: None,
};
impl Project {
pub fn init_settings(cx: &mut AppContext) {
WorktreeSettings::register(cx);
@ -5875,6 +5881,7 @@ impl Project {
&self,
buffer: &Model<Buffer>,
position: PointUtf16,
context: CompletionContext,
cx: &mut ModelContext<Self>,
) -> Task<Result<Vec<Completion>>> {
let language_registry = self.languages.clone();
@ -5908,7 +5915,10 @@ impl Project {
this.request_lsp(
buffer.clone(),
LanguageServerToQuery::Other(server_id),
GetCompletions { position },
GetCompletions {
position,
context: context.clone(),
},
cx,
),
));
@ -5935,7 +5945,7 @@ impl Project {
let task = self.send_lsp_proto_request(
buffer.clone(),
project_id,
GetCompletions { position },
GetCompletions { position, context },
cx,
);
let language = buffer.read(cx).language().cloned();
@ -5969,10 +5979,11 @@ impl Project {
&self,
buffer: &Model<Buffer>,
position: T,
context: CompletionContext,
cx: &mut ModelContext<Self>,
) -> Task<Result<Vec<Completion>>> {
let position = position.to_point_utf16(buffer.read(cx));
self.completions_impl(buffer, position, cx)
self.completions_impl(buffer, position, context, cx)
}
pub fn resolve_completions(