Class: RubyLsp::Requests::FoldingRanges
- Extended by:
- T::Generic, T::Sig
- Defined in:
- lib/ruby_lsp/requests/folding_ranges.rb
Overview

The [folding ranges](microsoft.github.io/language-server-protocol/specification#textDocument_foldingRange) request informs the editor of the ranges where and how code can be folded.
# Example
“‘ruby def say_hello # <– folding range start
puts "Hello"
end # <– folding range end “‘
Constant Summary collapse
- ResponseType =
type_member { { fixed: T::Array[Interface::FoldingRange] } }
Instance Method Summary collapse
- #_response ⇒ Object
-
#initialize(comments, dispatcher, queue) ⇒ FoldingRanges
constructor
A new instance of FoldingRanges.
- #on_array_node_enter(node) ⇒ Object
- #on_begin_node_enter(node) ⇒ Object
- #on_block_node_enter(node) ⇒ Object
- #on_call_node_enter(node) ⇒ Object
- #on_case_node_enter(node) ⇒ Object
- #on_class_node_enter(node) ⇒ Object
- #on_def_node_enter(node) ⇒ Object
- #on_else_node_enter(node) ⇒ Object
- #on_ensure_node_enter(node) ⇒ Object
- #on_for_node_enter(node) ⇒ Object
- #on_hash_node_enter(node) ⇒ Object
- #on_if_node_enter(node) ⇒ Object
- #on_in_node_enter(node) ⇒ Object
- #on_interpolated_string_node_enter(node) ⇒ Object
- #on_lambda_node_enter(node) ⇒ Object
- #on_module_node_enter(node) ⇒ Object
- #on_rescue_node_enter(node) ⇒ Object
- #on_singleton_class_node_enter(node) ⇒ Object
- #on_string_concat_node_enter(node) ⇒ Object
- #on_unless_node_enter(node) ⇒ Object
- #on_until_node_enter(node) ⇒ Object
- #on_when_node_enter(node) ⇒ Object
- #on_while_node_enter(node) ⇒ Object
Methods inherited from Listener
Methods included from Support::Common
#create_code_lens, #defined_in_gem?, #markdown_from_index_entries, #range_from_location, #range_from_node, #self_receiver?, #visible?
Constructor Details
#initialize(comments, dispatcher, queue) ⇒ FoldingRanges
Returns a new instance of FoldingRanges.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 25 def initialize(comments, dispatcher, queue) super(dispatcher, queue) @_response = T.let([], ResponseType) @requires = T.let([], T::Array[Prism::CallNode]) @finalized_response = T.let(false, T::Boolean) @comments = comments dispatcher.register( self, :on_if_node_enter, :on_in_node_enter, :on_rescue_node_enter, :on_when_node_enter, :on_interpolated_string_node_enter, :on_array_node_enter, :on_block_node_enter, :on_case_node_enter, :on_class_node_enter, :on_module_node_enter, :on_for_node_enter, :on_hash_node_enter, :on_singleton_class_node_enter, :on_unless_node_enter, :on_until_node_enter, :on_while_node_enter, :on_else_node_enter, :on_ensure_node_enter, :on_begin_node_enter, :on_string_concat_node_enter, :on_def_node_enter, :on_call_node_enter, :on_lambda_node_enter, ) end |
Instance Method Details
#_response ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 62 def _response unless @finalized_response push_comment_ranges emit_requires_range @finalized_response = true end @_response end |
#on_array_node_enter(node) ⇒ Object
101 102 103 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 101 def on_array_node_enter(node) add_simple_range(node) end |
#on_begin_node_enter(node) ⇒ Object
166 167 168 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 166 def on_begin_node_enter(node) add_simple_range(node) end |
#on_block_node_enter(node) ⇒ Object
106 107 108 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 106 def on_block_node_enter(node) add_simple_range(node) end |
#on_call_node_enter(node) ⇒ Object
194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 194 def on_call_node_enter(node) # If we find a require, don't visit the child nodes (prevent `super`), so that we can keep accumulating into # the `@requires` array and then push the range whenever we find a node that isn't a CallNode if require?(node) @requires << node return end location = node.location add_lines_range(location.start_line, location.end_line - 1) end |
#on_case_node_enter(node) ⇒ Object
111 112 113 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 111 def on_case_node_enter(node) add_simple_range(node) end |
#on_class_node_enter(node) ⇒ Object
116 117 118 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 116 def on_class_node_enter(node) add_simple_range(node) end |
#on_def_node_enter(node) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 179 def on_def_node_enter(node) params = node.parameters parameter_loc = params&.location location = node.location if params && parameter_loc.end_line > location.start_line # Multiline parameters add_lines_range(location.start_line, parameter_loc.end_line) add_lines_range(parameter_loc.end_line + 1, location.end_line - 1) else add_lines_range(location.start_line, location.end_line - 1) end end |
#on_else_node_enter(node) ⇒ Object
156 157 158 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 156 def on_else_node_enter(node) add_simple_range(node) end |
#on_ensure_node_enter(node) ⇒ Object
161 162 163 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 161 def on_ensure_node_enter(node) add_simple_range(node) end |
#on_for_node_enter(node) ⇒ Object
126 127 128 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 126 def on_for_node_enter(node) add_simple_range(node) end |
#on_hash_node_enter(node) ⇒ Object
131 132 133 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 131 def on_hash_node_enter(node) add_simple_range(node) end |
#on_if_node_enter(node) ⇒ Object
73 74 75 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 73 def on_if_node_enter(node) add_statements_range(node) end |
#on_in_node_enter(node) ⇒ Object
78 79 80 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 78 def on_in_node_enter(node) add_statements_range(node) end |
#on_interpolated_string_node_enter(node) ⇒ Object
93 94 95 96 97 98 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 93 def on_interpolated_string_node_enter(node) opening_loc = node.opening_loc closing_loc = node.closing_loc add_lines_range(opening_loc.start_line, closing_loc.start_line - 1) if opening_loc && closing_loc end |
#on_lambda_node_enter(node) ⇒ Object
207 208 209 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 207 def on_lambda_node_enter(node) add_simple_range(node) end |
#on_module_node_enter(node) ⇒ Object
121 122 123 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 121 def on_module_node_enter(node) add_simple_range(node) end |
#on_rescue_node_enter(node) ⇒ Object
83 84 85 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 83 def on_rescue_node_enter(node) add_statements_range(node) end |
#on_singleton_class_node_enter(node) ⇒ Object
136 137 138 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 136 def on_singleton_class_node_enter(node) add_simple_range(node) end |
#on_string_concat_node_enter(node) ⇒ Object
171 172 173 174 175 176 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 171 def on_string_concat_node_enter(node) left = T.let(node.left, Prism::Node) left = left.left while left.is_a?(Prism::StringConcatNode) add_lines_range(left.location.start_line, node.right.location.end_line - 1) end |
#on_unless_node_enter(node) ⇒ Object
141 142 143 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 141 def on_unless_node_enter(node) add_simple_range(node) end |
#on_until_node_enter(node) ⇒ Object
146 147 148 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 146 def on_until_node_enter(node) add_simple_range(node) end |
#on_when_node_enter(node) ⇒ Object
88 89 90 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 88 def on_when_node_enter(node) add_statements_range(node) end |
#on_while_node_enter(node) ⇒ Object
151 152 153 |
# File 'lib/ruby_lsp/requests/folding_ranges.rb', line 151 def on_while_node_enter(node) add_simple_range(node) end |