@@ -4210,16 +4210,23 @@ pub fn completion(cx: &mut Context) {
42104210
42114211 let (view, doc) = current!(cx.editor);
42124212
4213+ let savepoint = if let Some(CompleteAction::Selected { savepoint }) = &cx.editor.last_completion
4214+ {
4215+ savepoint.clone()
4216+ } else {
4217+ doc.savepoint(view)
4218+ };
4219+
42134220 let language_server = match doc.language_server() {
42144221 Some(language_server) => language_server,
42154222 None => return,
42164223 };
42174224
42184225 let offset_encoding = language_server.offset_encoding();
4219− let text = doc.text().slice(..);
4220− let cursor = doc.selection(view.id).primary().cursor(text);
4226+ let text = savepoint.text.clone();
4227+ let cursor = savepoint.cursor();
42214228
4222− let pos = pos_to_lsp_pos(doc.text(), cursor, offset_encoding);
4229+ let pos = pos_to_lsp_pos(&text, cursor, offset_encoding);
42234230
42244231 let future = match language_server.completion(doc.identifier(), pos, None) {
42254232 Some(future) => future,
@@ -4254,12 +4261,6 @@ pub fn completion(cx: &mut Context) {
42544261 iter.reverse();
42554262 let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
42564263 let start_offset = cursor.saturating_sub(offset);
4257− let savepoint = if let Some(CompleteAction::Selected { savepoint }) = &cx.editor.last_completion
4258− {
4259− savepoint.clone()
4260− } else {
4261− doc.savepoint(view)
4262− };
42634264
42644265 let trigger_doc = doc.id();
42654266 let trigger_view = view.id;