@@ -4210,16 +4210,23 @@ pub fn completion(cx: &mut Context) {
4211 let (view, doc) = current!(cx.editor);
4211 let (view, doc) = current!(cx.editor);
4213+ let savepoint = if let Some(CompleteAction::Selected { savepoint }) = &cx.editor.last_completion
4217+ doc.savepoint(view)
4213 let language_server = match doc.language_server() {
4220 let language_server = match doc.language_server() {
4214 Some(language_server) => language_server,
4221 Some(language_server) => language_server,
4215 None => return,
4222 None => return,
4218 let offset_encoding = language_server.offset_encoding();
4225 let offset_encoding = language_server.offset_encoding();
4219− let text = doc.text().slice(..);
4226+ let text = savepoint.text.clone();
4220− let cursor = doc.selection(view.id).primary().cursor(text);
4227+ let cursor = savepoint.cursor();
4222− let pos = pos_to_lsp_pos(doc.text(), cursor, offset_encoding);
4229+ let pos = pos_to_lsp_pos(&text, cursor, offset_encoding);
4224 let future = match language_server.completion(doc.identifier(), pos, None) {
4231 let future = match language_server.completion(doc.identifier(), pos, None) {
4225 Some(future) => future,
4232 Some(future) => future,
@@ -4254,12 +4261,6 @@ pub fn completion(cx: &mut Context) {
4254 iter.reverse();
4261 iter.reverse();
4255 let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
4262 let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
4256 let start_offset = cursor.saturating_sub(offset);
4263 let start_offset = cursor.saturating_sub(offset);
4257− let savepoint = if let Some(CompleteAction::Selected { savepoint }) = &cx.editor.last_completion
4261− doc.savepoint(view)
4264 let trigger_doc = doc.id();
4265 let trigger_doc = doc.id();
4265 let trigger_view = view.id;
4266 let trigger_view = view.id;