]> git.eshelyaron.com Git - emacs.git/commit
Fix eglot-completion-at-point to work with bare completion-at-point
authorJoão Távora <joaotavora@gmail.com>
Sat, 12 Oct 2019 00:57:00 +0000 (01:57 +0100)
committerJoão Távora <joaotavora@gmail.com>
Mon, 14 Oct 2019 22:30:27 +0000 (23:30 +0100)
commitc2e084bc23f3e717605d54b334ead0816f6d445d
tree09accc2a6f1977fd84db692226907295f8e7bc8c
parent0aaaea5ae9be07e979cbcd636226a088c1650017
Fix eglot-completion-at-point to work with bare completion-at-point

Fixes https://github.com/joaotavora/eglot/issues/313, fixes https://github.com/joaotavora/eglot/issues/311, fixes https://github.com/joaotavora/eglot/issues/279

As is well known, LSP's and Emacs's completion mechanics don't fit
very well together, mostly because Emacs expects completion to be a
something of a pure function of a string argument and LSP treats as a
function of a concrete buffer position.

A further complication arises because some completion frontends like
"bare" completion-at-point make Emacs modify the buffer's contents
during the completion process, while other (notably company-mode)
don't do that.  Thus, 'eglot-completion-at-point' must take extra care
to answer to the questions listed in the "(elisp)Programmed
Completion" info node based on its (quite hacky) "completions" local
var and _not_ based on the intermediate buffer contents.  That var is
also used to cache the last LSP response and allow the :exit-function
callback to retrieve much more than just the completion text in

In yet another related problem, :exit-function won't be called at all
with completion-at-point if the completion table doesn't answer
properly to test-completion.  A previous use of
completion-table-dynamic was found to be unsuitable here: we must
answer all the requests separately.

* eglot.el (eglot-completion-at-point): Rework.
lisp/progmodes/eglot.el