Description
Description
The collection of the Ruby LSP information will not work, presumably because it assumes YJIT is available (e.g., doesn't work with TruffleRuby). I've collected it from another window running with CRuby and tried to manually hack it together:
Ruby LSP Info
### Ruby LSP Information
#### VS Code Version
1.95.3
#### Ruby LSP Extension Version
0.8.14
#### Ruby LSP Server Version
0.22.1
#### Ruby LSP Addons
#### Ruby Version
3.3.5
#### Ruby Version Manager
none
Failed to setup the bundle: Command failed: gem list ruby-lsp language_server-protocol prism rbs sorbet-runtime ERROR: truffleruby: invalid option --yjit (Use --help for usage instructions.) . See Troubleshooting for help
Reproduction steps
- Use TruffleRuby for your project (e.g.,
truffleruby-24.1.1
from ruby-build) - Start the Ruby LSP using VS Code
- Open a Ruby file
- See the LSP fail to activate because the
--yjit
flag is invalid
Code snippet or error message
The console output suggests that it will only enable YJIT if RubyVM::YJIT
is defined:
2024-11-25 11:16:27.635 [info] (nuevo-protobuf) Discovered version manager shadowenv
2024-11-25 11:16:27.641 [info] (nuevo-protobuf) Found shadowenv executable at /opt/homebrew/bin
2024-11-25 11:16:27.642 [info] (nuevo-protobuf) Running command: `/opt/homebrew/bin/shadowenv exec -- ruby -W0 -rjson -e 'STDERR.print("RUBY_LSP_ACTIVATION_SEPARATOR" + { env: ENV.to_h, yjit: !!defined?(RubyVM::YJIT), version: RUBY_VERSION, gemPath: Gem.path }.to_json + "RUBY_LSP_ACTIVATION_SEPARATOR")'` in /Users/nirvdrum/src/github.com/Shopify/nuevo-protobuf using shell: /opt/homebrew/bin/fish
However, I see an error dialog with:
Failed to setup the bundle: Command failed: gem list ruby-lsp language_server-protocol prism rbs sorbet-runtime ERROR: truffleruby: invalid option --yjit (Use --help for usage instructions.) . See [Troubleshooting](https://shopify.github.io/ruby-lsp/troubleshooting.html) for help
Browsing the code, I think the issue is:
Line 235 in 35fc5e9
TruffleRuby 24.1.1 reports as being Ruby 3.2.4 compatible. While dev builds of TruffleRuby 24.2.0-dev now report as 3.3.5. The check for whether YJIT is available needs to consider more context than just the Ruby version number. I think the check for RubyVM::YJIT
is the best approach since it's possible to have a CRuby build without YJIT, so checking for RUBY_ENGINE == "ruby"
may be insufficient.
I haven't tried running with JRuby, but I strongly suspect the LSP doesn't run there for similar reasons.