Skip to content

Commit 131beb5

Browse files
committed
Cache tests discovered during code lens request
1 parent a8050f0 commit 131beb5

File tree

4 files changed

+59
-14
lines changed

4 files changed

+59
-14
lines changed

lib/ruby_lsp/requests/code_lens.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ def provider
1818
end
1919
end
2020

21-
#: (GlobalState global_state, URI::Generic uri, Prism::Dispatcher dispatcher) -> void
22-
def initialize(global_state, uri, dispatcher)
21+
#: (GlobalState, RubyDocument | ERBDocument, Prism::Dispatcher) -> void
22+
def initialize(global_state, document, dispatcher)
2323
@response_builder = ResponseBuilders::CollectionResponseBuilder
2424
.new #: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens]
2525
super()
2626

27+
@document = document
2728
@test_builder = ResponseBuilders::TestCollection.new #: ResponseBuilders::TestCollection
29+
uri = document.uri
2830

2931
if global_state.enabled_feature?(:fullTestDiscovery)
3032
Listeners::TestStyle.new(@test_builder, global_state, dispatcher, uri)
@@ -45,6 +47,7 @@ def initialize(global_state, uri, dispatcher)
4547
# @override
4648
#: -> Array[Interface::CodeLens]
4749
def perform
50+
@document.cache_set("rubyLsp/discoverTests", @test_builder.response)
4851
@response_builder.response + @test_builder.code_lens
4952
end
5053
end

lib/ruby_lsp/server.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,12 +512,12 @@ def run_combined_requests(message)
512512
@global_state.index.handle_change(uri) do |index|
513513
index.delete(uri, skip_require_paths_tree: true)
514514
RubyIndexer::DeclarationListener.new(index, dispatcher, parse_result, uri, collect_comments: true)
515-
code_lens = Requests::CodeLens.new(@global_state, uri, dispatcher)
515+
code_lens = Requests::CodeLens.new(@global_state, document, dispatcher)
516516
dispatcher.dispatch(parse_result.value)
517517
end
518518
end
519519
else
520-
code_lens = Requests::CodeLens.new(@global_state, uri, dispatcher)
520+
code_lens = Requests::CodeLens.new(@global_state, document, dispatcher)
521521
dispatcher.dispatch(parse_result.value)
522522
end
523523

test/requests/code_lens_expectations_test.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def run_expectations(source)
1313

1414
dispatcher = Prism::Dispatcher.new
1515
stub_test_library("minitest")
16-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
16+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
1717
dispatcher.dispatch(document.parse_result.value)
1818
listener.perform
1919
end
@@ -30,7 +30,7 @@ def test_bar; end
3030
document = RubyLsp::RubyDocument.new(source: source, version: 1, uri: uri, global_state: @global_state)
3131

3232
dispatcher = Prism::Dispatcher.new
33-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
33+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
3434
dispatcher.dispatch(document.parse_result.value)
3535
response = listener.perform
3636

@@ -64,7 +64,7 @@ class FooTest < MiniTest::Spec
6464
document = RubyLsp::RubyDocument.new(source: source, version: 1, uri: uri, global_state: @global_state)
6565

6666
dispatcher = Prism::Dispatcher.new
67-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
67+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
6868
dispatcher.dispatch(document.parse_result.value)
6969
response = listener.perform
7070

@@ -102,7 +102,7 @@ def test_command_generation_for_minitest_spec_handles_specify_alias_for_it
102102
document = RubyLsp::RubyDocument.new(source: source, version: 1, uri: uri, global_state: @global_state)
103103

104104
dispatcher = Prism::Dispatcher.new
105-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
105+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
106106
dispatcher.dispatch(document.parse_result.value)
107107
response = listener.perform
108108

@@ -122,7 +122,7 @@ def test_bar; end
122122
document = RubyLsp::RubyDocument.new(source: source, version: 1, uri: uri, global_state: @global_state)
123123

124124
dispatcher = Prism::Dispatcher.new
125-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
125+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
126126
dispatcher.dispatch(document.parse_result.value)
127127
response = listener.perform
128128

@@ -154,7 +154,7 @@ def test_bar; end
154154

155155
dispatcher = Prism::Dispatcher.new
156156
stub_test_library("unknown")
157-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
157+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
158158
dispatcher.dispatch(document.parse_result.value)
159159
response = listener.perform
160160

@@ -173,7 +173,7 @@ def test_bar; end
173173

174174
dispatcher = Prism::Dispatcher.new
175175
stub_test_library("rspec")
176-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
176+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
177177
dispatcher.dispatch(document.parse_result.value)
178178
response = listener.perform
179179

@@ -192,7 +192,7 @@ def test_bar; end
192192

193193
dispatcher = Prism::Dispatcher.new
194194
stub_test_library("minitest")
195-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
195+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
196196
dispatcher.dispatch(document.parse_result.value)
197197
response = listener.perform
198198

@@ -211,7 +211,7 @@ def test_no_code_lens_for_unsaved_specs
211211

212212
dispatcher = Prism::Dispatcher.new
213213
stub_test_library("minitest")
214-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
214+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
215215
dispatcher.dispatch(document.parse_result.value)
216216
response = listener.perform
217217

@@ -266,7 +266,7 @@ def test_baz; end
266266
document = RubyLsp::RubyDocument.new(source: source, version: 1, uri: uri, global_state: @global_state)
267267

268268
dispatcher = Prism::Dispatcher.new
269-
listener = RubyLsp::Requests::CodeLens.new(@global_state, uri, dispatcher)
269+
listener = RubyLsp::Requests::CodeLens.new(@global_state, document, dispatcher)
270270
dispatcher.dispatch(document.parse_result.value)
271271
response = listener.perform
272272

test/server_test.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1593,6 +1593,48 @@ def test_code_lens_resolve_populates_debug_test_command
15931593
assert_equal(arguments, command.arguments)
15941594
end
15951595

1596+
def test_code_lens_caches_discovered_tests
1597+
uri = URI::Generic.from_path(path: "/foo.rb")
1598+
text = <<~RUBY
1599+
class MyTest < Minitest::Test
1600+
def test_something
1601+
end
1602+
end
1603+
RUBY
1604+
1605+
@server.process_message({
1606+
method: "textDocument/didOpen",
1607+
params: {
1608+
textDocument: {
1609+
uri: uri,
1610+
text: text,
1611+
version: 1,
1612+
languageId: "ruby",
1613+
},
1614+
},
1615+
})
1616+
1617+
@server.process_message({
1618+
id: 1,
1619+
method: "textDocument/codeLens",
1620+
params: {
1621+
textDocument: { uri: uri },
1622+
},
1623+
})
1624+
1625+
result = find_message(RubyLsp::Result, id: 1)
1626+
assert_equal(6, result.response.length)
1627+
1628+
RubyLsp::Requests::DiscoverTests.any_instance.expects(:perform).never
1629+
@server.process_message({
1630+
id: 2,
1631+
method: "rubyLsp/discoverTests",
1632+
params: {
1633+
textDocument: { uri: uri },
1634+
},
1635+
})
1636+
end
1637+
15961638
private
15971639

15981640
def wait_for_indexing

0 commit comments

Comments
 (0)