summaryrefslogtreecommitdiff
path: root/utils/julia/run.jl
diff options
context:
space:
mode:
Diffstat (limited to 'utils/julia/run.jl')
-rw-r--r--utils/julia/run.jl37
1 files changed, 37 insertions, 0 deletions
diff --git a/utils/julia/run.jl b/utils/julia/run.jl
new file mode 100644
index 00000000..4662e1b2
--- /dev/null
+++ b/utils/julia/run.jl
@@ -0,0 +1,37 @@
+# Load LanguageServer from the project next to this file
+## Save old load path
+old_load_path = copy(LOAD_PATH)
+push!(empty!(LOAD_PATH), @__DIR__)
+## Load packages
+using LanguageServer, SymbolServer
+## Restore old load path
+append!(empty!(LOAD_PATH), old_load_path)
+
+# Figure out the active project
+## This configuration is a good default
+project_path = let
+ dirname(something(
+ ## 1. Finds an explicitly set project (JULIA_PROJECT)
+ Base.load_path_expand((
+ p = get(ENV, "JULIA_PROJECT", nothing);
+ p === nothing ? nothing : isempty(p) ? nothing : p
+ )),
+ ## 2. Look for a Project.toml file in the current working directory,
+ ## or parent directories, with $HOME as an upper boundary
+ Base.current_project(),
+ ## 3. First entry in the load path
+ get(Base.load_path(), 1, nothing),
+ ## 4. Fallback to default global environment,
+ ## this is more or less unreachable
+ Base.load_path_expand("@v#.#"),
+ ))
+end
+
+# Depot path for the server to index (empty uses default).
+depot_path = get(ENV, "JULIA_DEPOT_PATH", "")
+
+# Start the server
+@info "Running julia language server" VERSION project_path depot_path
+server = LanguageServer.LanguageServerInstance(stdin, stdout, project_path, depot_path)
+server.runlinter = true
+run(server)