branch: externals/eglot
commit 64da240c45228a126dc22a10c8d4123b5bc4f6c4
Author: João Távora <[email protected]>
Commit: João Távora <[email protected]>
Fix #196: run connection hooks with proper dir-locals
eglot-connect-hook and eglot-server-initialized-hook must run in a
buffer with properly setup directory-local variables for the project.
This is crucial for things like eglot-signal-didChangeConfiguration,
which needs a properly setup value of eglot-workspace-configuration to
succeed.
I could have chosen any of the buffers where Eglot is activating
itself, but the approach using
hack-dir-local-variables-non-file-buffer seems more correct, despite
the name.
* eglot.el (eglot--connect): Run connection hooks with proper
dir-locals.
---
eglot.el | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/eglot.el b/eglot.el
index 4416e52..39f4842 100644
--- a/eglot.el
+++ b/eglot.el
@@ -840,8 +840,11 @@ This docstring appeases checkdoc, that's all."
(lambda ()
(setf (eglot--inhibit-autoreconnect
server)
(null eglot-autoreconnect)))))))
- (run-hook-with-args 'eglot-connect-hook server)
- (run-hook-with-args 'eglot-server-initialized-hook
server)
+ (let ((default-directory (car (project-roots
project)))
+ (major-mode managed-major-mode))
+ (hack-dir-local-variables-non-file-buffer)
+ (run-hook-with-args 'eglot-connect-hook server)
+ (run-hook-with-args 'eglot-server-initialized-hook
server))
(eglot--message
"Connected! Server `%s' now managing `%s' buffers \
in project `%s'."