I just tried out eglot today, and I must say that I am very very impressed. However, like all software, the julia language server has a few quirks that need to be worked around. Long story short, I have two folders (not nested or anything):
-
folder1
- A git repository of a large julia project that I cloned. Startingeglot
here only works partially. Anything imported from other packages is a missing reference. -
folder2
- A folder I created with various scripts that I wrote for the project infolder1
. It contains aProject.toml
detailing the necessary julia environment for those scripts to work. Startingeglot
here works flawlessly. Both functions defined infolder1
as well as the other packagesfolder1
relies upon are referenced correctly.
Is there a way for me to start eglot
in folder2
but have it work as if I have started it in folder1
?
I believe one potential solution might be to tell Project.el
that the git repository in folder1
belongs to the project in folder2
, but I couldn’t find a command for doing so.
Alternatively, can I tell eglot
in folder1
to connect to the language server that was started by eglot
in folder2
?
edit: Hope the question makes sense, and apologies if not everything is phrased in the correct language. I’m pretty new to both eglot
and project.el
. Many thanks in advance for any help or hints!
I have a similar requirement.
If folder1 and folder2 have different project root marker, it’s possible to start multiple language servers viaproject-vc-extra-root-markers
.But the tricky part is when it’s started from folder2, it needs to cd to folder1 before executing the language server.
I achieve this by creating a wrapper script for language server and create a function that sets an environment variable before executing the script and does do complex things in the script.
It’d be nice if there was a better solution without depending on .dir-locals.el and etc, like passing a function for the server program so that I don’t have to use a script + environment variable.
I believe you should use
project-external-roots
for this.In the context of autoconf or CMake srcdir!=builddir builds, I would suggest that you choose the builddir as the project-root based on Makefile, and use
VPATH
from the Makefile to get the srcdir inproject-external-roots
.In your case,
folder2
would be the project-root, andfolder1
would be included inproject-external-roots
.