@@ -88,7 +88,6 @@ impl menu::Item for CompletionItem {
88pub struct CompletionItem {
88pub struct CompletionItem {
89 pub item: lsp::CompletionItem,
89 pub item: lsp::CompletionItem,
90 pub language_server_id: usize,
90 pub language_server_id: usize,
91− pub offset_encoding: OffsetEncoding,
92 pub resolved: bool,
91 pub resolved: bool,
@@ -121,6 +120,7 @@ impl Completion {
121 doc: &Document,
120 doc: &Document,
122 view_id: ViewId,
121 view_id: ViewId,
123 item: &CompletionItem,
122 item: &CompletionItem,
123+ offset_encoding: OffsetEncoding,
124 trigger_offset: usize,
124 trigger_offset: usize,
125 include_placeholder: bool,
125 include_placeholder: bool,
126 replace_mode: bool,
126 replace_mode: bool,
@@ -143,8 +143,6 @@ impl Completion {
146− let offset_encoding = item.offset_encoding;
148 let Some(range) = util::lsp_range_to_range(doc.text(), edit.range, offset_encoding) else{
146 let Some(range) = util::lsp_range_to_range(doc.text(), edit.range, offset_encoding) else{
149 return Transaction::new(doc.text());
147 return Transaction::new(doc.text());
@@ -238,8 +236,21 @@ impl Completion {
238 // always present here
236 // always present here
239 let item = item.unwrap();
237 let item = item.unwrap();
239+ let offset_encoding = editor
241+ .get_by_id(item.language_server_id)
242+ .expect("language server disappeared between completion request and application")
241− let transaction =
245+ let transaction = item_to_transaction(
242− item_to_transaction(doc, view.id, item, trigger_offset, true, replace_mode);
246+ doc,
243 doc.apply_temporary(&transaction, view.id);
254 doc.apply_temporary(&transaction, view.id);
245 PromptEvent::Validate => {
256 PromptEvent::Validate => {
@@ -251,6 +262,12 @@ impl Completion {
251 // always present here
262 // always present here
252 let mut item = item.unwrap().clone();
263 let mut item = item.unwrap().clone();
265+ let offset_encoding = editor
267+ .get_by_id(item.language_server_id)
268+ .expect("language server disappeared between completion request and application")
254 let language_server = editor
271 let language_server = editor
255 .language_servers
272 .language_servers
256 .get_by_id(item.language_server_id)
273 .get_by_id(item.language_server_id)
@@ -270,6 +287,7 @@ impl Completion {
273 trigger_offset,
291 trigger_offset,
275 replace_mode,
293 replace_mode,
@@ -287,7 +305,7 @@ impl Completion {
287 let transaction = util::generate_transaction_from_edits(
305 let transaction = util::generate_transaction_from_edits(
288 doc.text(),
306 doc.text(),
289 additional_edits,
307 additional_edits,
290− item.offset_encoding, // TODO: should probably transcode in Client
308+ offset_encoding, // TODO: should probably transcode in Client
292 doc.apply(&transaction, view.id);
310 doc.apply(&transaction, view.id);
@@ -414,7 +432,6 @@ impl Completion {
414 let resolved_item = CompletionItem {
432 let resolved_item = CompletionItem {
415 item: resolved_item,
433 item: resolved_item,
416 language_server_id: current_item.language_server_id,
434 language_server_id: current_item.language_server_id,
417− offset_encoding: current_item.offset_encoding,
418 resolved: true,
435 resolved: true,