branch: externals/eglot commit ace6fce411e0dc0811875295df8ad4cb98934113 Author: João Távora <joaotav...@gmail.com> Commit: João Távora <joaotav...@gmail.com>
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)