emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/eglot a199c8e 070/139: Honour textDocumentSync


From: João Távora
Subject: [elpa] externals/eglot a199c8e 070/139: Honour textDocumentSync
Date: Mon, 14 May 2018 09:54:56 -0400 (EDT)

branch: externals/eglot
commit a199c8ef754434b6210cbd56f7dcef5f04e686c2
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Honour textDocumentSync
    
    * eglot.el (eglot--signal-textDocument/didChange): Honour textDocumentSync
---
 eglot.el | 72 +++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 37 insertions(+), 35 deletions(-)

diff --git a/eglot.el b/eglot.el
index 5701422..68fe3e2 100644
--- a/eglot.el
+++ b/eglot.el
@@ -251,7 +251,9 @@ SUCCESS-FN with no args if all goes well."
         (eglot--request
          proc
          :initialize
-         (eglot--obj :processId  (emacs-pid)
+         (eglot--obj :processId (unless (eq (process-type proc)
+                                            'network)
+                                  (emacs-pid))
                      :rootUri  (eglot--uri
                                 (expand-file-name (car (project-roots
                                                         (project-current)))))
@@ -1070,44 +1072,44 @@ Records START, END and PRE-CHANGE-LENGTH locally."
   "Send textDocument/didChange to server."
   (when (and eglot--recent-before-changes
              eglot--recent-after-changes)
-    (save-excursion
+    (let* ((proc (eglot--current-process-or-lose))
+           (sync-kind (plist-get (eglot--capabilities proc) 
:textDocumentSync)))
       (save-restriction
         (widen)
-        (if (/= (length eglot--recent-before-changes)
-                (length eglot--recent-after-changes))
-            (eglot--notify
-             (eglot--current-process-or-lose)
-             :textDocument/didChange
-             (eglot--obj
-              :textDocument 
(eglot--current-buffer-VersionedTextDocumentIdentifier)
-              :contentChanges
-              (vector
-               (eglot--obj
-                :text (buffer-substring-no-properties (point-min) 
(point-max))))))
-          (let ((combined (cl-mapcar 'append
-                                     eglot--recent-before-changes
-                                     eglot--recent-after-changes)))
-            (eglot--notify
-             (eglot--current-process-or-lose)
-             :textDocument/didChange
-             (eglot--obj
-              :textDocument 
(eglot--current-buffer-VersionedTextDocumentIdentifier)
-              :contentChanges
+        (unless (or (not sync-kind)
+                    (eq sync-kind 0))
+          (eglot--notify
+           proc
+           :textDocument/didChange
+           (eglot--obj
+            :textDocument
+            (eglot--current-buffer-VersionedTextDocumentIdentifier)
+            :contentChanges
+            (if (or (eq sync-kind 1)
+                    (/= (length eglot--recent-before-changes)
+                        (length eglot--recent-after-changes)))
+                (vector
+                 (eglot--obj
+                  :text (buffer-substring-no-properties (point-min) 
(point-max))))
               (apply
                #'vector
-               (mapcar (pcase-lambda (`(,before-start-position
-                                        ,before-end-position
-                                        ,after-start
-                                        ,after-end
-                                        ,len))
-                         (eglot--obj
-                          :range
-                          (eglot--obj
-                           :start before-start-position
-                           :end before-end-position)
-                          :rangeLength len
-                          :text (buffer-substring-no-properties after-start 
after-end)))
-                       (reverse combined))))))))))
+               (mapcar
+                (pcase-lambda (`(,before-start-position
+                                 ,before-end-position
+                                 ,after-start
+                                 ,after-end
+                                 ,len))
+                  (eglot--obj
+                   :range
+                   (eglot--obj
+                    :start before-start-position
+                    :end before-end-position)
+                   :rangeLength len
+                   :text (buffer-substring-no-properties after-start 
after-end)))
+                (reverse
+                 (cl-mapcar 'append
+                            eglot--recent-before-changes
+                            eglot--recent-after-changes)))))))))))
   (setq eglot--recent-before-changes nil
         eglot--recent-after-changes nil))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]