aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/commands.rs19
-rw-r--r--helix-view/src/document.rs14
2 files changed, 24 insertions, 9 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 8d70cd9e..80774cea 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -4210,16 +4210,23 @@ pub fn completion(cx: &mut Context) {
let (view, doc) = current!(cx.editor);
+ let savepoint = if let Some(CompleteAction::Selected { savepoint }) = &cx.editor.last_completion
+ {
+ savepoint.clone()
+ } else {
+ doc.savepoint(view)
+ };
+
let language_server = match doc.language_server() {
Some(language_server) => language_server,
None => return,
};
let offset_encoding = language_server.offset_encoding();
- let text = doc.text().slice(..);
- let cursor = doc.selection(view.id).primary().cursor(text);
+ let text = savepoint.text.clone();
+ let cursor = savepoint.cursor();
- let pos = pos_to_lsp_pos(doc.text(), cursor, offset_encoding);
+ let pos = pos_to_lsp_pos(&text, cursor, offset_encoding);
let future = match language_server.completion(doc.identifier(), pos, None) {
Some(future) => future,
@@ -4254,12 +4261,6 @@ pub fn completion(cx: &mut Context) {
iter.reverse();
let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
let start_offset = cursor.saturating_sub(offset);
- let savepoint = if let Some(CompleteAction::Selected { savepoint }) = &cx.editor.last_completion
- {
- savepoint.clone()
- } else {
- doc.savepoint(view)
- };
let trigger_doc = doc.id();
let trigger_view = view.id;
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index 4948befd..e467efd3 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -114,6 +114,19 @@ pub struct SavePoint {
/// The view this savepoint is associated with
pub view: ViewId,
revert: Mutex<Transaction>,
+ pub text: Rope,
+}
+
+impl SavePoint {
+ pub fn cursor(&self) -> usize {
+ // we always create transactions with selections
+ self.revert
+ .lock()
+ .selection()
+ .unwrap()
+ .primary()
+ .cursor(self.text.slice(..))
+ }
}
pub struct Document {
@@ -1230,6 +1243,7 @@ impl Document {
let savepoint = Arc::new(SavePoint {
view: view.id,
revert: Mutex::new(revert),
+ text: self.text.clone(),
});
self.savepoints.push(Arc::downgrade(&savepoint));
savepoint