Skip to content

Commit 9f41f77

Browse files
authored
Merge pull request #299 from julia-vscode/sp/robust-subprocess-startup
fix: make subprocess startup more robust
2 parents 5367aa5 + 36e20b3 commit 9f41f77

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

src/SymbolServer.jl

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,28 @@ function getstore(ssi::SymbolServerInstance, environment_path::AbstractString, p
230230
# 1.11 introduces the --compiled-modules=existing option, which should be much faster than no
231231
# as of 2023-11-09, loading Pkg with --compiled-modules=no also changes something with the
232232
# active project, which breaks the server.jl script
233-
p = if ssi.julia_exe_version > v"1.11-"
234-
open(pipeline(Cmd(`$(ssi.julia_exe_path) --code-coverage=$(use_code_coverage==0 ? "none" : "user") --startup-file=no --compiled-modules=existing --history-file=no --project=$environment_path $server_script $(ssi.store_path) $pipename`, env=env_to_use), stderr=stderr), read=true, write=true)
235-
else
236-
open(pipeline(Cmd(`$(ssi.julia_exe_path) --code-coverage=$(use_code_coverage==0 ? "none" : "user") --startup-file=no --compiled-modules=no --history-file=no --project=$environment_path $server_script $(ssi.store_path) $pipename`, env=env_to_use), stderr=stderr), read=true, write=true)
233+
p = try
234+
path = ssi.julia_exe_path
235+
spath = split(path)
236+
# is julia up spec
237+
if length(spath) == 2 && occursin(r"^\+\d", spath[2])
238+
path = spath
239+
else
240+
path = [path]
241+
end
242+
cmd = Cmd(path)
243+
if ssi.julia_exe_version > v"1.11-"
244+
open(pipeline(Cmd(`$(cmd) --code-coverage=$(use_code_coverage==0 ? "none" : "user") --startup-file=no --compiled-modules=existing --history-file=no --project=$environment_path $server_script $(ssi.store_path) $pipename`, env=env_to_use), stderr=stderr), read=true, write=true)
245+
else
246+
open(pipeline(Cmd(`$(cmd) --code-coverage=$(use_code_coverage==0 ? "none" : "user") --startup-file=no --compiled-modules=no --history-file=no --project=$environment_path $server_script $(ssi.store_path) $pipename`, env=env_to_use), stderr=stderr), read=true, write=true)
247+
end
248+
catch err
249+
if stderr_for_client_process !== nothing
250+
showerror(stderr_for_client_process, err)
251+
end
252+
return :failure, stderr_for_client_process
237253
end
254+
238255
ssi.process = p
239256

240257
yield()

0 commit comments

Comments
 (0)