branch: externals/eglot
commit 06e6dd6693123a737fb883dcf277432d63d6518e
Author: Theodor Thornhill <[email protected]>
Commit: GitHub <[email protected]>

    Fix #704: Prefer documentChanges to changes in server-initiated edits
    
    Some servers return both.
    
    PR: #949
    
    * eglot.el (eglot--apply-workspace-edit): When both documentChanges
    and changes are present, prefer the documentChanges.  By doing that we
    ensure that we don't double edit, rendering the document in an
    unusable state.
---
 eglot.el | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/eglot.el b/eglot.el
index 80f0b65470..e399b29f09 100644
--- a/eglot.el
+++ b/eglot.el
@@ -3016,8 +3016,12 @@ Returns a list as described in docstring of 
`imenu--index-alist'."
                          textDocument
                        (list (eglot--uri-to-path uri) edits version)))
                    documentChanges)))
-      (cl-loop for (uri edits) on changes by #'cddr
-               do (push (list (eglot--uri-to-path uri) edits) prepared))
+      (unless (and changes documentChanges)
+        ;; We don't want double edits, and some servers send both
+        ;; changes and documentChanges.  This unless ensures that we
+        ;; prefer documentChanges over changes.
+        (cl-loop for (uri edits) on changes by #'cddr
+                 do (push (list (eglot--uri-to-path uri) edits) prepared)))
       (if (or confirm
               (cl-notevery #'find-buffer-visiting
                            (mapcar #'car prepared)))

Reply via email to