[ANN] VS Code extension 1.224 pre-release

Hey everyone,

it’s been a while since we last had a noteworthy release of the Julia extension for VS Code, but this pre-release brings a significant rework of the underlying analysis engine and should fix many long standing bugs around anything that’s related to static analysis of Julia code.

You can find the changelog on GitHub, but even that doesn’t tell the full story: even for complex packages you should see almost no false positives anymore (though macros and isdefined guarded field access are still problems and unlikely to be fully solved). The LS should also be significantly faster and more responsive, especially for larger workspaces.

Just as an example: Opening Revise.jl shows no “proper” false positives in the src directory anymore


All missing-reference or missing-reference warnings are due to version or isdefined guarded branches.

That said, a rework this significant also needs a lot of real world testing, so we’d appreciate people trying this pre-release and reporting bugs on GitHub or Slack.

I see this crash:

ERROR: Salsa.DerivedFunctionException{MethodError}(MethodError(splitpath, (nothing,), 0x000000000000975a), Union{Salsa.DerivedKey{F, TT}, Salsa.InputKey{F, TT}} where {F, TT}[Salsa.DerivedKey{typeof(JuliaWorkspaces.derived_package_for_file), Tuple{JuliaWorkspaces.URIs2.URI}}((JuliaWorkspaces.URIs2.URI("untitled", nothing, "Untitled-1", nothing, nothing),)), Salsa.DerivedKey{typeof(JuliaWorkspaces.derived_testitems), Tuple{JuliaWorkspaces.URIs2.URI}}((JuliaWorkspaces.URIs2.URI("untitled", nothing, "Untitled-1", nothing, nothing),))])
Stacktrace:
  [1] (::JuliaWorkspaces.var"#%%__user_derived_package_for_file##6#%%__user_derived_package_for_file##7"{Nothing})(i::@NamedTuple{uri::JuliaWorkspaces.URIs2.URI, parts::Vector{String}})
    @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/layer_projects.jl:252
  [2] filter(f::JuliaWorkspaces.var"#%%__user_derived_package_for_file##6#%%__user_derived_package_for_file##7"{Nothing}, a::Vector{@NamedTuple{uri::JuliaWorkspaces.URIs2.URI, parts::Vector{String}}})
    @ Base ./array.jl:2937
  [3] #%%__user_derived_package_for_file##4
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/layer_projects.jl:251 [inlined]
  [4] |>
    @ ./operators.jl:972 [inlined]
  [5] #%%__user_derived_package_for_file##0
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/layer_projects.jl:246 [inlined]
  [6] |>(x::Vector{JuliaWorkspaces.URIs2.URI}, f::JuliaWorkspaces.var"#%%__user_derived_package_for_file##0#%%__user_derived_package_for_file##1"{Nothing})
    @ Base ./operators.jl:972
  [7] var"%%__user_derived_package_for_file"(rt::Salsa._TracingRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, file::JuliaWorkspaces.URIs2.URI)
    @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/layer_projects.jl:245
  [8] macro expansion
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/TraceLogging.jl:264 [inlined]
  [9] _memoized_lookup_internal(runtime::Salsa._TracingRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, key::Salsa.DerivedKey{typeof(JuliaWorkspaces.derived_package_for_file), Tuple{JuliaWorkspaces.URIs2.URI}})
    @ Salsa._DefaultSalsaStorage ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/default_storage.jl:269
 [10] memoized_lookup(rt::Salsa._TracingRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, dependency_key::Salsa.DerivedKey{typeof(JuliaWorkspaces.derived_package_for_file), Tuple{JuliaWorkspaces.URIs2.URI}})
    @ Salsa ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/runtime_generic.jl:20
 [11] memoized_lookup_unwrapped
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/runtime_generic.jl:43 [inlined]
 [12] derived_package_for_file
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/derived_macro.jl:109 [inlined]
 [13] var"%%__user_derived_testitems"(rt::Salsa._TracingRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, uri::JuliaWorkspaces.URIs2.URI)
    @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/layer_testitems.jl:45
 [14] macro expansion
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/TraceLogging.jl:264 [inlined]
 [15] _memoized_lookup_internal(runtime::Salsa._TracingRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, key::Salsa.DerivedKey{typeof(JuliaWorkspaces.derived_testitems), Tuple{JuliaWorkspaces.URIs2.URI}})
    @ Salsa._DefaultSalsaStorage ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/default_storage.jl:269
 [16] memoized_lookup(rt::Salsa._TopLevelRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, dependency_key::Salsa.DerivedKey{typeof(JuliaWorkspaces.derived_testitems), Tuple{JuliaWorkspaces.URIs2.URI}})
    @ Salsa ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/runtime_generic.jl:20
 [17] memoized_lookup_unwrapped
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/runtime_generic.jl:43 [inlined]
 [18] derived_testitems(rt::Salsa._TopLevelRuntime{JuliaWorkspaces.SContext, Salsa._DefaultSalsaStorage.DefaultStorage}, uri::JuliaWorkspaces.URIs2.URI)
    @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/Salsa/src/derived_macro.jl:109
 [19] get_test_items(jw::JuliaWorkspaces.JuliaWorkspace, uri::JuliaWorkspaces.URIs2.URI)
    @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/public.jl:588
 [20] publish_file_diagnostics_testitems(server::LanguageServer.LanguageServerInstance, uris::Vector{JuliaWorkspaces.URIs2.URI})
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/testitem_diagnostic_marking.jl:129
 [21] textDocument_didOpen_notification(params::LanguageServer.DidOpenTextDocumentParams, server::LanguageServer.LanguageServerInstance, conn::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming})
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/requests/textdocument.jl:26
 [22] invoke_handler(func::typeof(LanguageServer.textDocument_didOpen_notification), params::LanguageServer.DidOpenTextDocumentParams, server::LanguageServer.LanguageServerInstance, conn::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming})
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/languageserverinstance.jl:179
 [23] (::LanguageServer.var"#notification_wrapper##0#notification_wrapper##1"{typeof(LanguageServer.textDocument_didOpen_notification), LanguageServer.LanguageServerInstance})(conn::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, params::LanguageServer.DidOpenTextDocumentParams)
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/languageserverinstance.jl:214
 [24] dispatch_msg(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, dispatcher::JSONRPC.MsgDispatcher, msg::JSONRPC.Request)
    @ JSONRPC ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/typed.jl:0
 [25] (::LanguageServer.var"#123#124"{Vector{Any}, LanguageServer.LanguageServerInstance, LanguageServer.LSPTraceReceiver{LanguageServer.LanguageServerInstance}, Base.RefValue{Bool}})()
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/languageserverinstance.jl:476
 [26] with_logstate(f::LanguageServer.var"#123#124"{Vector{Any}, LanguageServer.LanguageServerInstance, LanguageServer.LSPTraceReceiver{LanguageServer.LanguageServerInstance}, Base.RefValue{Bool}}, logstate::Base.CoreLogging.LogState)
    @ Base.CoreLogging ./logging/logging.jl:542
 [27] with_logger
    @ ./logging/logging.jl:653 [inlined]
 [28] run(server::LanguageServer.LanguageServerInstance; timings::Vector{Any})
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/languageserverinstance.jl:339
 [29] run(server::LanguageServer.LanguageServerInstance)
    @ LanguageServer ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/LanguageServer/src/languageserverinstance.jl:310
 [30] top-level scope
    @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/languageserver/main.jl:198
 [31] include(mod::Module, _path::String)
    @ Base ./Base.jl:306
 [32] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:317
 [33] _start()
    @ Base ./client.jl:550

Should be fixed by fix: handle non-file URIs in derived_{package,project}_for_file - Pull Request #157 - julia-vscode/JuliaWorkspaces.jl - GitHub.

I hope if fixes the really troubles it has had. I can barely can use VSCode anymore because Language Server is always being compiled for looong periods and my Laptop melts in these hot summer days.

Performance should be significantly better now, since

  • online symbol cache generation works again, so the LS doesn’t have to load packages locally (and you can even disable it completely with the julia.enableDynamicIndexing setting)
  • precompilation caches are in the global depot (not sure if this is actually a win, but may help with the spurious precompile cache invalidations some people were seeing)
  • edits to Julia files now do not cause the LS to re-parse and re-analyze everything in the workspace

And again, please do open issues if something’s not working as expected or performance is still bad!

I see …

\[ Info: Starting LS with Julia 1.12.6

  Activating project at \`\~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/environments/languageserver/v1.12\`

\[ Info: Starting the Julia Language Server

\[ Info: Symbol server store is at '/home/abobroff/.config/Code/User/globalStorage/julialang.language-julia/symbolstore/v3'.

\[ Info: Starting LS at 1784811323

┌ Info: Downloading missing package caches

└   count = 379

┌ Warning: Could not fetch availability index, skipping cloud downloads

└ @ JuliaWorkspaces \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:642

┌ Info: Launching DJP for remaining missing packages

└   project_path = "/home/abobroff/.julia/environments/v1.12"

┌ Info: Starting DynamicJuliaProcess

│   kind = :watch_environment

│   project_path = "/home/abobroff/.julia/environments/v1.12"

└   package = nothing

┌ Error: Dynamic index request failed

│   key = JuliaWorkspaces.WatchEnvironmentKey("/home/abobroff/.julia/environments/v1.12", 0x158043ab5623b62d)

│   exception =

│    InternalError: Error handling request: ErrorException("(2, Int64)")

│    Stacktrace:

│     \[1\] send_request(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, method::String, params::Any; server_token::Nothing, client_token::Nothing)

│       @ JSONRPC \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/core.jl:591

│     \[2\] send_request

│       @ \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/core.jl:527 \[inlined\]

│     \[3\] send(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, request::JSONRPC.RequestType{JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams, String}, params::JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams; server_token::Nothing, client_token::Nothing)

│       @ JSONRPC \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/typed.jl:24

│     \[4\] send(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, request::JSONRPC.RequestType{JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams, String}, params::JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams)

│       @ JSONRPC \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/typed.jl:23

│     \[5\] index_project(djp::JuliaWorkspaces.DynamicJuliaProcess, store_path::String)

│       @ JuliaWorkspaces \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:54

│     \[6\] (::JuliaWorkspaces.var"#handle!##6#handle!##7"{JuliaWorkspaces.DynamicFeature, JuliaWorkspaces.DynamicJuliaProcess, JuliaWorkspaces.WatchEnvironmentKey})()

│       @ JuliaWorkspaces \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:1022

└ @ JuliaWorkspaces \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:1026

┌ Error: DynamicJuliaProcess failed

│   key = JuliaWorkspaces.WatchEnvironmentKey("/home/abobroff/.julia/environments/v1.12", 0x158043ab5623b62d)

│   exception = InternalError: Error handling request: ErrorException("(2, Int64)")

└ @ JuliaWorkspaces \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:1138

┌ Info: Killing DynamicJuliaProcess

│   kind = :watch_environment

│   project_path = "/home/abobroff/.julia/environments/v1.12"

└   package = nothing

┌ Warning: DJP reported failure

│   msg.key = JuliaWorkspaces.WatchEnvironmentKey("/home/abobroff/.julia/environments/v1.12", 0x158043ab5623b62d)

└ @ JuliaWorkspaces \~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/types.jl:552

┌ Info: Killing DynamicJuliaProcess due to cancellation

│   kind = :watch_environment

└   project_path = "/home/abobroff/.julia/environments/v1.12"

Thanks, should be fixed by fix: improve indexer resilience - Pull Request #159 - julia-vscode/JuliaWorkspaces.jl - GitHub.

When I switch to the preview version it

Then please click that button and report any error messages in the logs. If there are no logs, then describe your system setup (e.g. julia version/juliaup version/VS Code settings/…).

It’s a long stacktrace. Posting the first errors.
Windows and Julia 1.10 here

[ Info: Starting LS with Julia 1.10.11
Activating project at c:\Users\j\.vscode\extensions\julialang.language-julia-1.224.1\scripts\environments\languageserver\fallback
[ Info: Starting the Julia Language Server
ERROR: LoadError: UndefVarError: ScopedValues not defined
Stacktrace:
[1] getproperty(x::Module, f::Symbol)
@ Base .\Base.jl:31
[2] top-level scope
@ c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\TraceLogging.jl:14
[3] include(mod::Module, _path::String)
@ Base .\Base.jl:495
[4] include(x::String)
@ Salsa c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\Salsa.jl:1
[5] top-level scope
@ c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\packagedef.jl:4
[6] include(mod::Module, _path::String)
@ Base .\Base.jl:495
[7] include(x::String)
@ Salsa c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\Salsa.jl:1
[8] top-level scope
@ c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\Salsa.jl:11
[9] include
@ .\Base.jl:495 [inlined]
[10] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
@ Base .\loading.jl:2306
[11] top-level scope
@ stdin:5
in expression starting at c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\TraceLogging.jl:1
in expression starting at c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\packagedef.jl:4
in expression starting at c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\Salsa\src\Salsa.jl:1
in expression starting at stdin:5
ERROR: LoadError: Failed to precompile Salsa [1fbf2c77-44e2-4d5d-8131-0fa618a5c278] to “C:\Users\j\.julia\compiled\v1.10\Salsa\jl_86E1.tmp”.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool; loadable_exts::Nothing)
@ Base .\loading.jl:2547
[3] compilecache
@ .\loading.jl:2414 [inlined]
[4] (::Base.var"#973#974"{Base.PkgId})()
@ Base .\loading.jl:2058
[5] mkpidlock(f::Base.var"#973#974"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
@ FileWatching.Pidfile C:\programs\Julia-1.10\share\julia\stdlib\v1.10\FileWatching\src\pidfile.jl:93
[6] #mkpidlock#6
@ C:\programs\Julia-1.10\share\julia\stdlib\v1.10\FileWatching\src\pidfile.jl:88 [inlined]
[7] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
@ FileWatching.Pidfile C:\programs\Julia-1.10\share\julia\stdlib\v1.10\FileWatching\src\pidfile.jl:111
[8] #invokelatest#2
@ .\essentials.jl:894 [inlined]
[9] invokelatest
@ .\essentials.jl:889 [inlined]
[10] maybe_cachefile_lock(f::Base.var"#973#974"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
@ Base .\loading.jl:3062
[11] maybe_cachefile_lock
@ .\loading.jl:3059 [inlined]
[12] _require(pkg::Base.PkgId, env::String)
@ Base .\loading.jl:2044
[13] __require_prelocked(uuidkey::Base.PkgId, env::String)
@ Base .\loading.jl:1886
[14] #invoke_in_world#3
@ .\essentials.jl:926 [inlined]
[15] invoke_in_world
@ .\essentials.jl:923 [inlined]
[16] _require_prelocked(uuidkey::Base.PkgId, env::String)
@ Base .\loading.jl:1877
[17] macro expansion
@ .\loading.jl:1864 [inlined]
[18] macro expansion
@ .\lock.jl:270 [inlined]
[19] __require(into::Module, mod::Symbol)
@ Base .\loading.jl:1827
[20] #invoke_in_world#3
@ .\essentials.jl:926 [inlined]
[21] invoke_in_world
@ .\essentials.jl:923 [inlined]
[22] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1820
[23] include
@ .\Base.jl:495 [inlined]
[24] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
@ Base .\loading.jl:2306
[25] top-level scope
@ stdin:5
in expression starting at c:\Users\j.vscode\extensions\julialang.language-julia-1.224.1\scripts\packages\JuliaWorkspaces\src\JuliaWorkspaces.jl:1
in expression starting at stdin:5
ERROR: LoadError: Failed to precompile JuliaWorkspaces [e554591c-7f10-434f-9f27-2097f62a04fd] to “C:\Users\j\.julia\compiled\v1.10\JuliaWorkspaces\jl_8413.tmp”.

1.10 is incompatible, please run the LS with 1.12 (i.e. the juliaup release channel).

Again it crashes, after fix: improve indexer resilience - and Pull Request #157 and #159

[ Info: Starting LS with Julia 1.12.6
  Activating project at `~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/environments/languageserver/v1.12`
[ Info: Starting the Julia Language Server
[ Info: Symbol server store is at '/home/abobroff/.config/Code/User/globalStorage/julialang.language-julia/symbolstore/v3'.
[ Info: Starting LS at 1785003412
┌ Info: Downloading missing package caches
└   count = 4
┌ Info: Launching DJP for remaining missing packages
└   project_path = "/home/abobroff/.julia/environments/v1.12"
┌ Info: Starting DynamicJuliaProcess
│   kind = :watch_environment
│   project_path = "/home/abobroff/.julia/environments/v1.12"
└   package = nothing
┌ Error: Dynamic index request failed
│   key = JuliaWorkspaces.WatchEnvironmentKey("/home/abobroff/.julia/environments/v1.12", 0x29311332f398cbbd)
│   exception =
│    TransportError: Read error: connection lost
│    Stacktrace:
│     [1] send_request(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, method::String, params::Any; server_token::Nothing, client_token::Nothing)
│       @ JSONRPC ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/core.jl:571
│     [2] send_request
│       @ ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/core.jl:527 [inlined]
│     [3] send(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, request::JSONRPC.RequestType{JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams, String}, params::JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams; server_token::Nothing, client_token::Nothing)
│       @ JSONRPC ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/typed.jl:24
│     [4] send(x::JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint, JSON.Serializations.StandardSerialization, JSONRPC.ContentLengthFraming}, request::JSONRPC.RequestType{JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams, String}, params::JuliaWorkspaces.JuliaDynamicAnalysisProtocol.IndexProjectParams)
│       @ JSONRPC ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JSONRPC/src/typed.jl:23
│     [5] index_project(djp::JuliaWorkspaces.DynamicJuliaProcess, store_path::String)
│       @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:54
│     [6] (::JuliaWorkspaces.var"#handle!##6#handle!##7"{JuliaWorkspaces.DynamicFeature, JuliaWorkspaces.DynamicJuliaProcess, JuliaWorkspaces.WatchEnvironmentKey})()
│       @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:1022
└ @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:1026
┌ Info: Killing DynamicJuliaProcess due to cancellation
│   kind = :watch_environment
└   project_path = "/home/abobroff/.julia/environments/v1.12"
┌ Error: DynamicJuliaProcess failed
│   key = JuliaWorkspaces.WatchEnvironmentKey("/home/abobroff/.julia/environments/v1.12", 0x29311332f398cbbd)
│   exception = TransportError: Read error: connection lost
└ @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/dynamic_feature/dynamic_feature.jl:1138
┌ Info: Killing DynamicJuliaProcess
│   kind = :watch_environment
│   project_path = "/home/abobroff/.julia/environments/v1.12"
└   package = nothing
┌ Warning: DJP reported failure
│   msg.key = JuliaWorkspaces.WatchEnvironmentKey("/home/abobroff/.julia/environments/v1.12", 0x29311332f398cbbd)
└ @ JuliaWorkspaces ~/.vscode/extensions/julialang.language-julia-1.224.1/scripts/packages/JuliaWorkspaces/src/types.jl:552

Oops, you are saying that LS will not run in the LTS version? (I don’t want to use 1.12. I want to stick to 1.10)

Yes. You don’t have to use 1.12 for you own julia process, only for the LS.

I want to try out JETLS but I was reading that it doesn’t play nicely with the VSCode Julia extension

Any changes on that front with this new version?

Not yet, no. I still plan on getting JETLS into the official extension as an opt-in; further down the line it should be possible to daisy-chain language servers and get the best of both worlds, but that will take some careful consideration about how/when to invalidate results the faster static LS returned when the qualitatively better JETLS results come in etc.

I guess I’ll have to swallow the pillow (pill) this time :slight_smile:

But seriously. IMO it is very bad that VSC Julia extension cannot be used with the LTS version.

I can recommend using juliaup so you don’t have to worry about what version the LS launches with :slight_smile:

But it’s a fair point; getting the LS running on 1.10 probably isn’t hard, just lower priority than correctness and performance (and has the advantage of not adding more future work by having to test against multiple versions etc).

I have manifested here time to time against using juliaup on Windows (on *nix is fine, just not on Win). Installation go into a hidden directory, Julia not removed with uninstall but worse, ghostscript is now broken on Julia’s installed with juliaup. But that is not the point here. I have LTS installed in the Univ computer rooms and now the julia extension will be broken there.

juliaup is also not fine on *nix for my uses. Maybe the extension should bundle the version of Julia it is tested to work with as a fallback if juliaup is not installed? Julia 1.10 has many bugs and missing features compared to 1.12 and I would gladly give up a bit of disk space to have a more reliable IDE.