@@ -21,6 +21,8 @@ class Hover
2121 Prism ::InstanceVariableWriteNode ,
2222 Prism ::SymbolNode ,
2323 Prism ::StringNode ,
24+ Prism ::SuperNode ,
25+ Prism ::ForwardingSuperNode ,
2426 ] ,
2527 T ::Array [ T . class_of ( Prism ::Node ) ] ,
2628 )
@@ -64,6 +66,8 @@ def initialize(response_builder, global_state, uri, node_context, dispatcher, ty
6466 :on_instance_variable_operator_write_node_enter ,
6567 :on_instance_variable_or_write_node_enter ,
6668 :on_instance_variable_target_node_enter ,
69+ :on_super_node_enter ,
70+ :on_forwarding_super_node_enter ,
6771 )
6872 end
6973
@@ -106,17 +110,7 @@ def on_call_node_enter(node)
106110 message = node . message
107111 return unless message
108112
109- type = @type_inferrer . infer_receiver_type ( @node_context )
110- return unless type
111-
112- methods = @index . resolve_method ( message , type )
113- return unless methods
114-
115- title = "#{ message } #{ T . must ( methods . first ) . decorated_parameters } "
116-
117- categorized_markdown_from_index_entries ( title , methods ) . each do |category , content |
118- @response_builder . push ( content , category : category )
119- end
113+ handle_method_hover ( message )
120114 end
121115
122116 sig { params ( node : Prism ::InstanceVariableReadNode ) . void }
@@ -149,8 +143,41 @@ def on_instance_variable_target_node_enter(node)
149143 handle_instance_variable_hover ( node . name . to_s )
150144 end
151145
146+ sig { params ( node : Prism ::SuperNode ) . void }
147+ def on_super_node_enter ( node )
148+ handle_super_node_hover
149+ end
150+
151+ sig { params ( node : Prism ::ForwardingSuperNode ) . void }
152+ def on_forwarding_super_node_enter ( node )
153+ handle_super_node_hover
154+ end
155+
152156 private
153157
158+ sig { void }
159+ def handle_super_node_hover
160+ surrounding_method = @node_context . surrounding_method
161+ return unless surrounding_method
162+
163+ handle_method_hover ( surrounding_method , inherited_only : true )
164+ end
165+
166+ sig { params ( message : String , inherited_only : T ::Boolean ) . void }
167+ def handle_method_hover ( message , inherited_only : false )
168+ type = @type_inferrer . infer_receiver_type ( @node_context )
169+ return unless type
170+
171+ methods = @index . resolve_method ( message , type , inherited_only : inherited_only )
172+ return unless methods
173+
174+ title = "#{ message } #{ T . must ( methods . first ) . decorated_parameters } "
175+
176+ categorized_markdown_from_index_entries ( title , methods ) . each do |category , content |
177+ @response_builder . push ( content , category : category )
178+ end
179+ end
180+
154181 sig { params ( name : String ) . void }
155182 def handle_instance_variable_hover ( name )
156183 type = @type_inferrer . infer_receiver_type ( @node_context )
0 commit comments