Use originating language server to resolve additional completion edits

This commit is contained in:
Julia 2023-08-15 16:34:15 -04:00
parent 7a67ec5743
commit 40ce099780
6 changed files with 10 additions and 4 deletions

View file

@ -149,6 +149,7 @@ pub struct Completion {
pub old_range: Range<Anchor>, pub old_range: Range<Anchor>,
pub new_text: String, pub new_text: String,
pub label: CodeLabel, pub label: CodeLabel,
pub server_id: LanguageServerId,
pub lsp_completion: lsp::CompletionItem, pub lsp_completion: lsp::CompletionItem,
} }

View file

@ -433,6 +433,7 @@ pub fn serialize_completion(completion: &Completion) -> proto::Completion {
old_start: Some(serialize_anchor(&completion.old_range.start)), old_start: Some(serialize_anchor(&completion.old_range.start)),
old_end: Some(serialize_anchor(&completion.old_range.end)), old_end: Some(serialize_anchor(&completion.old_range.end)),
new_text: completion.new_text.clone(), new_text: completion.new_text.clone(),
server_id: completion.server_id.0 as u64,
lsp_completion: serde_json::to_vec(&completion.lsp_completion).unwrap(), lsp_completion: serde_json::to_vec(&completion.lsp_completion).unwrap(),
} }
} }
@ -465,6 +466,7 @@ pub async fn deserialize_completion(
lsp_completion.filter_text.as_deref(), lsp_completion.filter_text.as_deref(),
) )
}), }),
server_id: LanguageServerId(completion.server_id as usize),
lsp_completion, lsp_completion,
}) })
} }

View file

@ -1338,7 +1338,7 @@ impl LspCommand for GetCompletions {
completions: Option<lsp::CompletionResponse>, completions: Option<lsp::CompletionResponse>,
_: ModelHandle<Project>, _: ModelHandle<Project>,
buffer: ModelHandle<Buffer>, buffer: ModelHandle<Buffer>,
_: LanguageServerId, server_id: LanguageServerId,
cx: AsyncAppContext, cx: AsyncAppContext,
) -> Result<Vec<Completion>> { ) -> Result<Vec<Completion>> {
let completions = if let Some(completions) = completions { let completions = if let Some(completions) = completions {
@ -1425,6 +1425,7 @@ impl LspCommand for GetCompletions {
lsp_completion.filter_text.as_deref(), lsp_completion.filter_text.as_deref(),
) )
}), }),
server_id,
lsp_completion, lsp_completion,
} }
}) })

View file

@ -4470,7 +4470,8 @@ impl Project {
let buffer_id = buffer.remote_id(); let buffer_id = buffer.remote_id();
if self.is_local() { if self.is_local() {
let lang_server = match self.primary_language_server_for_buffer(buffer, cx) { let server_id = completion.server_id;
let lang_server = match self.language_server_for_buffer(buffer, server_id, cx) {
Some((_, server)) => server.clone(), Some((_, server)) => server.clone(),
_ => return Task::ready(Ok(Default::default())), _ => return Task::ready(Ok(Default::default())),
}; };

View file

@ -630,7 +630,8 @@ message Completion {
Anchor old_start = 1; Anchor old_start = 1;
Anchor old_end = 2; Anchor old_end = 2;
string new_text = 3; string new_text = 3;
bytes lsp_completion = 4; uint64 server_id = 4;
bytes lsp_completion = 5;
} }
message GetCodeActions { message GetCodeActions {

View file

@ -6,4 +6,4 @@ pub use conn::Connection;
pub use peer::*; pub use peer::*;
mod macros; mod macros;
pub const PROTOCOL_VERSION: u32 = 59; pub const PROTOCOL_VERSION: u32 = 60;