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

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

[elpa] externals/eglot ace6fce 07/15: Check capabilities before sending


From: João Távora
Subject: [elpa] externals/eglot ace6fce 07/15: Check capabilities before sending :completionItem/resolve
Date: Sun, 20 May 2018 19:59:03 -0400 (EDT)

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

    Check capabilities before sending :completionItem/resolve
    
    * eglot.el (eglot--server-capable): Rewrite.
    (eglot-completion-at-point): Check caps before sending
    :completionItem/resolve
---
 eglot.el | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/eglot.el b/eglot.el
index e8af7ed..a5c4696 100644
--- a/eglot.el
+++ b/eglot.el
@@ -796,9 +796,16 @@ If optional MARKER, return a marker instead"
            (font-lock-ensure)
            (buffer-string)))))
 
-(defun eglot--server-capable (feat)
-  "Determine if current server is capable of FEAT."
-  (plist-get (eglot--capabilities (eglot--current-process-or-lose)) feat))
+(defun eglot--server-capable (&rest feats)
+  "Determine if current server is capable of FEATS."
+  (cl-loop for caps = (eglot--capabilities (eglot--current-process-or-lose))
+           then (cadr probe)
+           for feat in feats
+           for probe = (plist-member caps feat)
+           if (not probe) do (cl-return nil)
+           if (eq (cadr probe) t) do (cl-return t)
+           if (eq (cadr probe) :json-false) do (cl-return nil)
+           finally (cl-return (or probe t))))
 
 (defun eglot--range-region (range &optional markers)
   "Return region (BEG END) that represents LSP RANGE.
@@ -1323,9 +1330,11 @@ DUMMY is ignored"
        (lambda (obj)
          (let ((documentation
                 (or (get-text-property 0 :documentation obj)
-                    (plist-get (eglot--request proc :completionItem/resolve
-                                               (text-properties-at 0 obj))
-                               :documentation))))
+                    (and (eglot--server-capable :completionProvider
+                                                :resolveProvider)
+                         (plist-get (eglot--request proc 
:completionItem/resolve
+                                                    (text-properties-at 0 obj))
+                                    :documentation)))))
            (when documentation
              (with-current-buffer (get-buffer-create " *eglot doc*")
                (erase-buffer)



reply via email to

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