Class: RubyLsp::Rails::Hover

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Includes:
Requests::Support::Common
Defined in:
lib/ruby_lsp/ruby_lsp_rails/hover.rb

Overview

![Hover demo](../../hover.gif)

Augment [hover](microsoft.github.io/language-server-protocol/specification#textDocument_hover) with information about a model.

# Example

“‘ruby User.all # ^ hovering here will show information about the User model “`

Instance Method Summary collapse

Constructor Details

#initialize(client, response_builder, node_context, global_state, dispatcher) ⇒ Hover

Returns a new instance of Hover.



32
33
34
35
36
37
38
# File 'lib/ruby_lsp/ruby_lsp_rails/hover.rb', line 32

def initialize(client, response_builder, node_context, global_state, dispatcher)
  @client = client
  @response_builder = response_builder
  @nesting = T.let(node_context.nesting, T::Array[String])
  @index = T.let(global_state.index, RubyIndexer::Index)
  dispatcher.register(self, :on_constant_path_node_enter, :on_constant_read_node_enter, :on_call_node_enter)
end

Instance Method Details

#on_call_node_enter(node) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/ruby_lsp/ruby_lsp_rails/hover.rb', line 61

def on_call_node_enter(node)
  message_value = node.message
  message_loc = node.message_loc

  return unless message_value && message_loc

  generate_rails_document_link_hover(message_value, message_loc)
end

#on_constant_path_node_enter(node) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/ruby_lsp/ruby_lsp_rails/hover.rb', line 41

def on_constant_path_node_enter(node)
  entries = @index.resolve(node.slice, @nesting)
  return unless entries

  name = T.must(entries.first).name

  generate_column_content(name)

  generate_rails_document_link_hover(name, node.location)
end

#on_constant_read_node_enter(node) ⇒ Object



53
54
55
56
57
58
# File 'lib/ruby_lsp/ruby_lsp_rails/hover.rb', line 53

def on_constant_read_node_enter(node)
  entries = @index.resolve(node.name.to_s, @nesting)
  return unless entries

  generate_column_content(T.must(entries.first).name)
end