Some servers return both.
PR: https://github.com/joaotavora/eglot/issues/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.
GitHub-reference: fix https://github.com/joaotavora/eglot/issues/704
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)))