Class: RubyLsp::RailsPartial::Hover

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_lsp/ruby_lsp_rails_partial/hover.rb

Overview

When the cursor is on the partial name string of a render call, shows the list of resolved file paths in a tooltip (Markdown).

NOTE: A hover request does not pass a uri to the listener (unlike definition/completion). A bare name ‘render ’form’‘ needs a uri to infer the current directory, so it is out of scope; only slash-qualified names like `render ’admin/areas/form’‘ are resolved.

Instance Method Summary collapse

Constructor Details

#initialize(response_builder, node_context, resolver, dispatcher) ⇒ Hover

Returns a new instance of Hover.



12
13
14
15
16
17
18
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/hover.rb', line 12

def initialize(response_builder, node_context, resolver, dispatcher)
  @response_builder = response_builder
  @node_context = node_context
  @resolver = resolver

  dispatcher.register(self, :on_string_node_enter)
end

Instance Method Details

#on_string_node_enter(node) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/hover.rb', line 20

def on_string_node_enter(node)
  return unless render_partial_argument?(node)

  reference = node.unescaped
  return if reference.empty?

  paths = @resolver.resolve_without_context(reference)
  return if paths.empty?

  @response_builder.push("**Rails partial: `#{reference}`**", category: :title)
  @response_builder.push(links_markdown(paths), category: :links)
end