Skip to content

Commit

Permalink
Fix debug platform inclusion for Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
vinistock committed Dec 16, 2024
1 parent fface59 commit aed3f7a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
14 changes: 12 additions & 2 deletions lib/ruby_lsp/setup_bundler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,13 @@ def write_custom_gemfile
end

unless @dependencies["debug"]
parts << 'gem "debug", require: false, group: :development, platforms: :mri'
# The `mri` platform excludes Windows. We want to install the debug gem only on MRI for any operating system,
# but that constraint doesn't yet exist in Bundler. On Windows, we are manually checking if the engine is MRI
parts << if Gem.win_platform?
'gem "debug", require: false, group: :development, install_if: -> { RUBY_ENGINE == "ruby" }'
else
'gem "debug", require: false, group: :development, platforms: :mri'
end
end

if @rails_app && !@dependencies["ruby-lsp-rails"]
Expand Down Expand Up @@ -238,9 +244,13 @@ def run_bundle_install(bundle_gemfile = @gemfile)
sig { params(env: T::Hash[String, String]).returns(T::Hash[String, String]) }
def run_bundle_install_directly(env)
RubyVM::YJIT.enable if defined?(RubyVM::YJIT.enable)

# The ENV can only be merged after checking if an update is required because we depend on the original value of
# ENV["BUNDLE_GEMFILE"], which gets overridden after the merge
should_update = should_bundle_update?
T.unsafe(ENV).merge!(env)

unless should_bundle_update?
unless should_update
Bundler::CLI::Install.new({}).run
correct_relative_remote_paths if @custom_lockfile.exist?
return env
Expand Down
16 changes: 16 additions & 0 deletions test/integration_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,22 @@ def test_launch_mode_with_no_gemfile_and_bundle_path
end
end

def test_composed_bundle_includes_debug
in_temp_dir do |dir|
Bundler.with_unbundled_env do
launch(dir)

_stdout, stderr = capture_subprocess_io do
system(
{ "BUNDLE_GEMFILE" => File.join(dir, ".ruby-lsp", "Gemfile") },
"bundle exec ruby -e 'require \"debug\"'",
)
end
assert_empty(stderr)
end
end
end

private

def launch(workspace_path)
Expand Down

0 comments on commit aed3f7a

Please sign in to comment.