]> git.eshelyaron.com Git - emacs.git/commit
Eglot: partial fix for middle-of-symbol completions
authorJoão Távora <joaotavora@gmail.com>
Tue, 26 Dec 2023 00:31:29 +0000 (00:31 +0000)
committerEshel Yaron <me@eshelyaron.com>
Tue, 26 Dec 2023 07:07:48 +0000 (08:07 +0100)
commit38a5f78a6384cf92bf8034fafc7047917a96f60f
tree80f2790ef9cd9a682ad3159cc54daf7e666eb0e7
parent5c2febec784a1e989c199fce67b3f12274b9a5ea
Eglot: partial fix for middle-of-symbol completions

* lisp/progmodes/eglot.el (eglot-completion-at-point): Fix
completion reversion in :exit-function.

In a rust-ts-mode buffer such as this main.rs file

  fn main() {
    let v: usize = 1;
    v.c<cursor-here>1234.1234567890
  }

the server wants to edit the line to read, after C-M-i and selecting
"count_ones"

    v.count_ones<cursor-here>.1234567890

But it couldn't apply the edit to the correct initial state because
that state wasn't correctly restored.  This commit fixes that.

However, if the initial state is

    v.count_on1234.1234567890

then completion still fails, because the 'try-completion' call in
eglot-completion-at-point will just return complete to "count_ones"
and Emacs doesn't consider this a completion "exit", so it'll
completely ignore the exit function.

I think 'try-completion' (and 'test-completion') simply can't be used
here (for one, they obey styles, and styles are off-limits in LSP),
but I'll leave that for another commit.

Github-reference: https://github.com/joaotavora/eglot/issues/1339
(cherry picked from commit a6ef458e3831001b0acad57cf8fa75b77a4aff3f)
lisp/progmodes/eglot.el