Skip to content

Commit a5fb4df

Browse files
committed
Support hover over gem name in Gemfile
1 parent 92f6e5b commit a5fb4df

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

Diff for: lib/ruby_lsp/listeners/hover.rb

+8
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,14 @@ def initialize(response_builder, global_state, uri, node_context, dispatcher, so
9292

9393
#: (Prism::StringNode node) -> void
9494
def on_string_node_enter(node)
95+
if @path && File.basename(@path) == GEMFILE_NAME
96+
parent = @node_context.parent
97+
if parent.is_a?(Prism::CallNode) && parent.name == :gem && parent.arguments&.arguments&.first == node
98+
generate_gem_hover(parent)
99+
return
100+
end
101+
end
102+
95103
generate_heredoc_hover(node)
96104
end
97105

Diff for: test/requests/hover_expectations_test.rb

+39-1
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ class A
273273
end
274274
end
275275

276-
def test_hovering_over_gemfile_dependency
276+
def test_hovering_over_gemfile_dependency_using_gem_call
277277
source = <<~RUBY
278278
gem 'rake'
279279
RUBY
@@ -295,6 +295,44 @@ def test_hovering_over_gemfile_dependency
295295
end
296296
end
297297

298+
def test_hovering_over_gemfile_dependency_using_gem_name
299+
source = <<~RUBY
300+
gem 'rake'
301+
RUBY
302+
303+
# We need to pretend that Sorbet is not a dependency or else we can't properly test
304+
with_server(source, URI("file:///Gemfile"), stub_no_typechecker: true) do |server, uri|
305+
server.process_message(
306+
id: 1,
307+
method: "textDocument/hover",
308+
params: { textDocument: { uri: uri }, position: { character: 5, line: 0 } },
309+
)
310+
311+
response = server.pop_response.response
312+
313+
assert_includes(response.contents.value, "rake")
314+
end
315+
end
316+
317+
def test_hovering_over_gemfile_dependency_triggers_only_for_first_arg
318+
source = <<~RUBY
319+
gem 'rake', "~> 1.0"
320+
RUBY
321+
322+
# We need to pretend that Sorbet is not a dependency or else we can't properly test
323+
with_server(source, URI("file:///Gemfile"), stub_no_typechecker: true) do |server, uri|
324+
server.process_message(
325+
id: 1,
326+
method: "textDocument/hover",
327+
params: { textDocument: { uri: uri }, position: { character: 13, line: 0 } },
328+
)
329+
330+
response = server.pop_response.response
331+
332+
assert_nil(response)
333+
end
334+
end
335+
298336
def test_hovering_over_gemfile_dependency_with_missing_argument
299337
source = <<~RUBY
300338
gem()

0 commit comments

Comments
 (0)