Class: RubyLsp::Listeners::Hover

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

Constant Summary collapse

ALLOWED_TARGETS =
T.let(
  [
    Prism::CallNode,
    Prism::ConstantReadNode,
    Prism::ConstantWriteNode,
    Prism::ConstantPathNode,
    Prism::InstanceVariableReadNode,
    Prism::InstanceVariableAndWriteNode,
    Prism::InstanceVariableOperatorWriteNode,
    Prism::InstanceVariableOrWriteNode,
    Prism::InstanceVariableTargetNode,
    Prism::InstanceVariableWriteNode,
    Prism::SymbolNode,
    Prism::StringNode,
    Prism::SuperNode,
    Prism::ForwardingSuperNode,
  ],
  T::Array[T.class_of(Prism::Node)],
)
ALLOWED_REMOTE_PROVIDERS =
T.let(
  [
    "https://github.com",
    "https://gitlab.com",
  ].freeze,
  T::Array[String],
)

Instance Method Summary collapse

Methods included from Requests::Support::Common

#categorized_markdown_from_index_entries, #constant_name, #create_code_lens, #each_constant_path_part, #kind_for_entry, #markdown_from_index_entries, #namespace_constant_name, #not_in_dependencies?, #range_from_location, #range_from_node, #self_receiver?, #sorbet_level_true_or_higher?, #visible?

Constructor Details

#initialize(response_builder, global_state, uri, node_context, dispatcher, sorbet_level) ⇒ Hover

rubocop:disable Metrics/ParameterLists



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/ruby_lsp/listeners/hover.rb', line 48

def initialize(response_builder, global_state, uri, node_context, dispatcher, sorbet_level) # rubocop:disable Metrics/ParameterLists
  @response_builder = response_builder
  @global_state = global_state
  @index = T.let(global_state.index, RubyIndexer::Index)
  @type_inferrer = T.let(global_state.type_inferrer, TypeInferrer)
  @path = T.let(uri.to_standardized_path, T.nilable(String))
  @node_context = node_context
  @sorbet_level = sorbet_level

  dispatcher.register(
    self,
    :on_constant_read_node_enter,
    :on_constant_write_node_enter,
    :on_constant_path_node_enter,
    :on_call_node_enter,
    :on_instance_variable_read_node_enter,
    :on_instance_variable_write_node_enter,
    :on_instance_variable_and_write_node_enter,
    :on_instance_variable_operator_write_node_enter,
    :on_instance_variable_or_write_node_enter,
    :on_instance_variable_target_node_enter,
    :on_super_node_enter,
    :on_forwarding_super_node_enter,
  )
end

Instance Method Details

#on_call_node_enter(node) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/ruby_lsp/listeners/hover.rb', line 102

def on_call_node_enter(node)
  if @path && File.basename(@path) == GEMFILE_NAME && node.name == :gem
    generate_gem_hover(node)
    return
  end

  return if sorbet_level_true_or_higher?(@sorbet_level) && self_receiver?(node)

  message = node.message
  return unless message

  handle_method_hover(message)
end

#on_constant_path_node_enter(node) ⇒ Object



92
93
94
95
96
97
98
99
# File 'lib/ruby_lsp/listeners/hover.rb', line 92

def on_constant_path_node_enter(node)
  return if @sorbet_level != RubyDocument::SorbetLevel::Ignore

  name = constant_name(node)
  return if name.nil?

  generate_hover(name, node.location)
end

#on_constant_read_node_enter(node) ⇒ Object



75
76
77
78
79
80
81
82
# File 'lib/ruby_lsp/listeners/hover.rb', line 75

def on_constant_read_node_enter(node)
  return if @sorbet_level != RubyDocument::SorbetLevel::Ignore

  name = constant_name(node)
  return if name.nil?

  generate_hover(name, node.location)
end

#on_constant_write_node_enter(node) ⇒ Object



85
86
87
88
89
# File 'lib/ruby_lsp/listeners/hover.rb', line 85

def on_constant_write_node_enter(node)
  return if @sorbet_level != RubyDocument::SorbetLevel::Ignore

  generate_hover(node.name.to_s, node.name_loc)
end

#on_forwarding_super_node_enter(node) ⇒ Object



152
153
154
# File 'lib/ruby_lsp/listeners/hover.rb', line 152

def on_forwarding_super_node_enter(node)
  handle_super_node_hover
end

#on_instance_variable_and_write_node_enter(node) ⇒ Object



127
128
129
# File 'lib/ruby_lsp/listeners/hover.rb', line 127

def on_instance_variable_and_write_node_enter(node)
  handle_instance_variable_hover(node.name.to_s)
end

#on_instance_variable_operator_write_node_enter(node) ⇒ Object



132
133
134
# File 'lib/ruby_lsp/listeners/hover.rb', line 132

def on_instance_variable_operator_write_node_enter(node)
  handle_instance_variable_hover(node.name.to_s)
end

#on_instance_variable_or_write_node_enter(node) ⇒ Object



137
138
139
# File 'lib/ruby_lsp/listeners/hover.rb', line 137

def on_instance_variable_or_write_node_enter(node)
  handle_instance_variable_hover(node.name.to_s)
end

#on_instance_variable_read_node_enter(node) ⇒ Object



117
118
119
# File 'lib/ruby_lsp/listeners/hover.rb', line 117

def on_instance_variable_read_node_enter(node)
  handle_instance_variable_hover(node.name.to_s)
end

#on_instance_variable_target_node_enter(node) ⇒ Object



142
143
144
# File 'lib/ruby_lsp/listeners/hover.rb', line 142

def on_instance_variable_target_node_enter(node)
  handle_instance_variable_hover(node.name.to_s)
end

#on_instance_variable_write_node_enter(node) ⇒ Object



122
123
124
# File 'lib/ruby_lsp/listeners/hover.rb', line 122

def on_instance_variable_write_node_enter(node)
  handle_instance_variable_hover(node.name.to_s)
end

#on_super_node_enter(node) ⇒ Object



147
148
149
# File 'lib/ruby_lsp/listeners/hover.rb', line 147

def on_super_node_enter(node)
  handle_super_node_hover
end