tag: 1.2
commit d48e737ccdb665fe362c8a2e255429afdf44bcf4
Author: João Távora <[email protected]>
Commit: João Távora <[email protected]>
Per #63: Accept functions as entries in eglot-server-programs
CONTACT in the (MAJOR-MODE . CONTACT) association in
eglot-server-programs can now be a function of no arguments producing
any value previously valid for contact. The function is called at
time of `M-x eglot` or `eglot-ensure`. This is useful for servers
requiring command-line invocations that depend on the specific
momentary environment.
* eglot.el (eglot-server-programs): CONTACT can be a fucntion of no
arguments.
(eglot--guess-contact, eglot--connect): Accept function
CONTACTs.
---
eglot.el | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/eglot.el b/eglot.el
index c3a0d51..33b478f 100644
--- a/eglot.el
+++ b/eglot.el
@@ -121,7 +121,10 @@ of those modes. CONTACT can be:
converted to produce a plist with a suitable :PROCESS initarg
to CLASS-NAME. The class `eglot-lsp-server' descends
`jsonrpc-process-connection', which you should see for the
- semantics of the mandatory :PROCESS argument.")
+ semantics of the mandatory :PROCESS argument.
+
+* A function of no arguments producing any of the above values
+ for CONTACT.")
(defface eglot-mode-line
'((t (:inherit font-lock-constant-face :weight bold)))
@@ -310,6 +313,7 @@ be guessed."
(lambda (m1 m2)
(or (eq m1 m2)
(and (listp m1) (memq m2 m1)))))))
+ (guess (if (functionp guess) (funcall guess) guess))
(class (or (and (consp guess) (symbolp (car guess))
(prog1 (car guess) (setq guess (cdr guess))))
'eglot-lsp-server))
@@ -457,6 +461,7 @@ This docstring appeases checkdoc, that's all."
(nickname (file-name-base (directory-file-name default-directory)))
(readable-name (format "EGLOT (%s/%s)" nickname managed-major-mode))
autostart-inferior-process
+ (contact (if (functionp contact) (funcall contact) contact))
(initargs
(cond ((keywordp (car contact)) contact)
((integerp (cadr contact))
@@ -1658,7 +1663,7 @@ If SKIP-SIGNATURE, don't try to send
textDocument/signatureHelp."
"Passes through required cquery initialization options"
(let* ((root (car (project-roots (eglot--project server))))
(cache (expand-file-name ".cquery_cached_index/" root)))
- (list :cacheDirectory (file-name-as-directory cache)
+ (list :cacheDirectory (file-name-as-directory cache)Ini
:progressReportFrequencyMs -1)))