diff --git a/lib/ruby_lsp/requests/code_lens.rb b/lib/ruby_lsp/requests/code_lens.rb index da445ef00f..a7b8d5856f 100644 --- a/lib/ruby_lsp/requests/code_lens.rb +++ b/lib/ruby_lsp/requests/code_lens.rb @@ -29,6 +29,7 @@ class CodeLens < Listener BASE_COMMAND = T.let((File.exist?("Gemfile.lock") ? "bundle exec ruby" : "ruby") + " -Itest ", String) ACCESS_MODIFIERS = T.let(["public", "private", "protected"], T::Array[String]) + SUPPORTED_TEST_LIBRARIES = T.let(["minitest", "test-unit"], T::Array[String]) sig { override.returns(ResponseType) } attr_reader :response @@ -156,6 +157,9 @@ def merge_response!(other) sig { params(node: SyntaxTree::Node, name: String, command: String, kind: Symbol).void } def add_test_code_lens(node, name:, command:, kind:) + # don't add code lenses if the test library is not supported or unknown + return unless SUPPORTED_TEST_LIBRARIES.include?(@test_library) + arguments = [ @path, name, diff --git a/lib/ruby_lsp/requests/support/dependency_detector.rb b/lib/ruby_lsp/requests/support/dependency_detector.rb index 8e49f745b9..9aa49e52f9 100644 --- a/lib/ruby_lsp/requests/support/dependency_detector.rb +++ b/lib/ruby_lsp/requests/support/dependency_detector.rb @@ -27,8 +27,7 @@ def detected_test_library elsif direct_dependency?(/^rspec/) "rspec" else - warn("WARNING: No test library detected. Assuming minitest.") - "minitest" + "unknown" end end diff --git a/test/requests/code_lens_expectations_test.rb b/test/requests/code_lens_expectations_test.rb index e9ae54a2e5..954c55c7de 100644 --- a/test/requests/code_lens_expectations_test.rb +++ b/test/requests/code_lens_expectations_test.rb @@ -43,6 +43,42 @@ def test_bar; end ) end + def test_no_code_lens_for_unknown_test_framework + source = <<~RUBY + class FooTest < Test::Unit::TestCase + def test_bar; end + end + RUBY + uri = "file:///fake.rb" + + document = RubyLsp::Document.new(source: source, version: 1, uri: uri) + + emitter = RubyLsp::EventEmitter.new + listener = RubyLsp::Requests::CodeLens.new(uri, emitter, @message_queue, "unknown") + emitter.visit(document.tree) + response = listener.response + + assert_equal(0, response.size) + end + + def test_no_code_lens_for_rspec + source = <<~RUBY + class FooTest < Test::Unit::TestCase + def test_bar; end + end + RUBY + uri = "file:///fake.rb" + + document = RubyLsp::Document.new(source: source, version: 1, uri: uri) + + emitter = RubyLsp::EventEmitter.new + listener = RubyLsp::Requests::CodeLens.new(uri, emitter, @message_queue, "rspec") + emitter.visit(document.tree) + response = listener.response + + assert_equal(0, response.size) + end + def test_after_request_hook message_queue = Thread::Queue.new create_code_lens_hook_class