gnu: emacs-eglot-x: Fix compatibility with emacs-eglot.

The current emacs-eglot-x version we package is broken when used with an eglot
version higher than 1.16  (emacs-eglot is currently at version 1.17).
Upstream has an as-of-yet unreleased fix, so let's backport that to our
package.

* gnu/packages/patches/emacs-eglot-x-fix-apply-text-edits.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it here.
* gnu/packages/emacs-xyz.scm (emacs-eglot-x)[patches]: Use it here.

Change-Id: Id39f4805dc37902048139049785a4f7852202a8c
Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
This commit is contained in:
Javier Olaechea 2025-01-15 19:48:42 -05:00 committed by Liliana Marie Prikler
parent 56dff9d303
commit 5aa63d06a9
No known key found for this signature in database
GPG key ID: 442A84B8C70E2F87
3 changed files with 29 additions and 1 deletions

View file

@ -1207,6 +1207,7 @@ dist_patch_DATA = \
%D%/packages/patches/emacs-deferred-fix-number-of-arguments.patch \ %D%/packages/patches/emacs-deferred-fix-number-of-arguments.patch \
%D%/packages/patches/emacs-elpy-dup-test-name.patch \ %D%/packages/patches/emacs-elpy-dup-test-name.patch \
%D%/packages/patches/emacs-disable-jit-compilation.patch \ %D%/packages/patches/emacs-disable-jit-compilation.patch \
%D%/packages/patches/emacs-eglot-x-fix-apply-text-edits.patch \
%D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-exec-path.patch \
%D%/packages/patches/emacs-fix-scheme-indent-function.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \
%D%/packages/patches/emacs-helpful-fix-tests.patch \ %D%/packages/patches/emacs-helpful-fix-tests.patch \

View file

@ -21505,7 +21505,11 @@ (define-public emacs-eglot-x
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (sha256
(base32 (base32
"0s17nv59gzgqgskid41lfacsqnzdiq2p3ds0vglcfqwypr3k898c")))) "0s17nv59gzgqgskid41lfacsqnzdiq2p3ds0vglcfqwypr3k898c"))
;; Backporting an unreleased fix from
;; https://github.com/nemethf/eglot-x/commit/354150c299e241df09c8b904b68177fd9b41fe0e
;; Remove this patch once version 0.7 is released
(patches (search-patches "emacs-eglot-x-fix-apply-text-edits.patch"))))
(build-system emacs-build-system) (build-system emacs-build-system)
(inputs (list emacs-eglot)) (inputs (list emacs-eglot))
(home-page "https://github.com/nemethf/eglot-x") (home-page "https://github.com/nemethf/eglot-x")

View file

@ -0,0 +1,23 @@
diff --git a/eglot-x.el b/eglot-x.el
index a694f90..221822d 100644
--- a/eglot-x.el
+++ b/eglot-x.el
@@ -659,10 +659,17 @@ (defun eglot-x--check-capability (&rest capabilities)
;;; Snippet TextEdit
-(defun eglot-x--apply-text-edits (edits &optional version)
+(defun eglot-x--apply-text-edits (edits &optional version silent)
"Apply EDITS for current buffer if at VERSION, or if it's nil.
This is almost a verbatim copy of `eglot--apply-text-edits', but
it handles the SnippetTextEdit format."
+ ;; NOTE: eglot--apply-text-edits changed a lot since this defun was
+ ;; imlemented. Additionally, rust-analyzer has changed as well.
+ ;; Now it only sends one SnippetTextEdit. Hence the implementation
+ ;; should be updated, but "if it ain't broke, don't fix it". And
+ ;; this whole extension is going to be obsoleted soon:
+ ;; https://github.com/microsoft/language-server-protocol/issues/724#issuecomment-1850413029
+
;; This is quite rust-analyzer specific. It assumes there is at
;; most one meaningful SnippetTextEdit and that can be identified by
;; searching for "$0".