From 6fe45749c3881b0875d3b21a2afbf25572d10e8e Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:41:44 +0200 Subject: [PATCH] Consolidate RuboCop feature loading Closes #2604 Alternative to #2605 This moves the two command CI checks into the test suite. They would have cought this error, _expect_ rubocop is available to these. So, create a seperate Gemfile that contains only the gem itself. Co-authored-by: Theodore Liu --- .github/workflows/ci.yml | 3 -- .github/workflows/lsp_check.yml | 18 -------- lib/ruby_lsp/internal.rb | 4 +- lib/ruby_lsp/requests/support/rubocop.rb | 22 ++++++++++ .../requests/support/rubocop_formatter.rb | 2 - .../requests/support/rubocop_runner.rb | 16 ------- test/integration_test.rb | 44 +++++++++++++++++++ 7 files changed, 67 insertions(+), 42 deletions(-) delete mode 100644 .github/workflows/lsp_check.yml create mode 100644 lib/ruby_lsp/requests/support/rubocop.rb create mode 100644 test/integration_test.rb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5899ad6160..8af71be742 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,9 +43,6 @@ jobs: - name: Run tests run: bundle exec rake - - - name: Run index troubleshooting tool - run: bundle exec ruby-lsp --doctor lint_node: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/lsp_check.yml b/.github/workflows/lsp_check.yml deleted file mode 100644 index 877bb02cd3..0000000000 --- a/.github/workflows/lsp_check.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: lsp_check - -on: [push, pull_request] - -jobs: - build: - runs-on: ubuntu-latest - name: LSP check - steps: - - uses: actions/checkout@v4 - - - name: Set up Ruby - uses: ruby/setup-ruby@v1 - with: - bundler-cache: true - - - name: Run ruby-lsp-check - run: bundle exec ruby-lsp-check diff --git a/lib/ruby_lsp/internal.rb b/lib/ruby_lsp/internal.rb index 6cb064161d..ac14869444 100644 --- a/lib/ruby_lsp/internal.rb +++ b/lib/ruby_lsp/internal.rb @@ -47,15 +47,13 @@ require "ruby_lsp/response_builders/signature_help" # Request support -require "ruby_lsp/requests/support/rubocop_diagnostic" require "ruby_lsp/requests/support/selection_range" require "ruby_lsp/requests/support/annotation" require "ruby_lsp/requests/support/sorbet" require "ruby_lsp/requests/support/common" require "ruby_lsp/requests/support/formatter" -require "ruby_lsp/requests/support/rubocop_runner" -require "ruby_lsp/requests/support/rubocop_formatter" require "ruby_lsp/requests/support/syntax_tree_formatter" +require "ruby_lsp/requests/support/rubocop" # Requests require "ruby_lsp/requests/request" diff --git a/lib/ruby_lsp/requests/support/rubocop.rb b/lib/ruby_lsp/requests/support/rubocop.rb new file mode 100644 index 0000000000..5bc93760ad --- /dev/null +++ b/lib/ruby_lsp/requests/support/rubocop.rb @@ -0,0 +1,22 @@ +# typed: strict +# frozen_string_literal: true + +begin + require "rubocop" +rescue LoadError + return +end + +begin + gem("rubocop", ">= 1.4.0") +rescue LoadError + raise StandardError, "Incompatible RuboCop version. Ruby LSP requires >= 1.4.0" +end + +if RuboCop.const_defined?(:LSP) # This condition will be removed when requiring RuboCop >= 1.61. + RuboCop::LSP.enable +end + +require "ruby_lsp/requests/support/rubocop_diagnostic" +require "ruby_lsp/requests/support/rubocop_runner" +require "ruby_lsp/requests/support/rubocop_formatter" diff --git a/lib/ruby_lsp/requests/support/rubocop_formatter.rb b/lib/ruby_lsp/requests/support/rubocop_formatter.rb index 5ab4ed174f..1f66bcace1 100644 --- a/lib/ruby_lsp/requests/support/rubocop_formatter.rb +++ b/lib/ruby_lsp/requests/support/rubocop_formatter.rb @@ -1,8 +1,6 @@ # typed: strict # frozen_string_literal: true -return unless defined?(RubyLsp::Requests::Support::RuboCopRunner) - module RubyLsp module Requests module Support diff --git a/lib/ruby_lsp/requests/support/rubocop_runner.rb b/lib/ruby_lsp/requests/support/rubocop_runner.rb index 40f164b6b5..c17f1936ae 100644 --- a/lib/ruby_lsp/requests/support/rubocop_runner.rb +++ b/lib/ruby_lsp/requests/support/rubocop_runner.rb @@ -1,22 +1,6 @@ # typed: strict # frozen_string_literal: true -begin - require "rubocop" -rescue LoadError - return -end - -begin - gem("rubocop", ">= 1.4.0") -rescue LoadError - raise StandardError, "Incompatible RuboCop version. Ruby LSP requires >= 1.4.0" -end - -if RuboCop.const_defined?(:LSP) # This condition will be removed when requiring RuboCop >= 1.61. - RuboCop::LSP.enable -end - module RubyLsp module Requests module Support diff --git a/test/integration_test.rb b/test/integration_test.rb new file mode 100644 index 0000000000..1f7137ecd7 --- /dev/null +++ b/test/integration_test.rb @@ -0,0 +1,44 @@ +# typed: true +# frozen_string_literal: true + +require "test_helper" + +class IntegrationTest < Minitest::Test + def test_ruby_lsp_doctor_works + skip("CI only") unless ENV["CI"] + in_isolation do + system("bundle exec ruby-lsp --doctor") + assert_equal(0, $CHILD_STATUS) + end + end + + def test_ruby_lsp_check_works + skip("CI only") unless ENV["CI"] + in_isolation do + system("bundle exec ruby-lsp-check") + assert_equal(0, $CHILD_STATUS) + end + end + + private + + def in_isolation(&block) + gem_path = T.must(__dir__) + "/../" + Dir.mktmpdir do |dir| + Dir.chdir(dir) do + File.write(File.join(dir, "Gemfile"), <<~GEMFILE) + source "https://rubygems.org" + gem "ruby-lsp", path: "#{gem_path}" + + # This causes ruby-lsp to run in its own directory without + # all the supplementary gems like rubocop + Dir.chdir("#{gem_path}") + GEMFILE + + capture_subprocess_io do + Bundler.with_unbundled_env(&block) + end + end + end + end +end