ruby-lsp 0.3.6 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,34 +18,38 @@ module RubyLsp
18
18
  class FoldingRanges < BaseRequest
19
19
  extend T::Sig
20
20
 
21
- SIMPLE_FOLDABLES = T.let([
22
- SyntaxTree::ArrayLiteral,
23
- SyntaxTree::BraceBlock,
24
- SyntaxTree::Case,
25
- SyntaxTree::ClassDeclaration,
26
- SyntaxTree::Command,
27
- SyntaxTree::DoBlock,
28
- SyntaxTree::FCall,
29
- SyntaxTree::For,
30
- SyntaxTree::HashLiteral,
31
- SyntaxTree::Heredoc,
32
- SyntaxTree::If,
33
- SyntaxTree::ModuleDeclaration,
34
- SyntaxTree::SClass,
35
- SyntaxTree::Unless,
36
- SyntaxTree::Until,
37
- SyntaxTree::While,
38
- SyntaxTree::Else,
39
- SyntaxTree::Ensure,
40
- SyntaxTree::Begin,
41
- ].freeze, T::Array[T.class_of(SyntaxTree::Node)])
42
-
43
- NODES_WITH_STATEMENTS = T.let([
44
- SyntaxTree::Elsif,
45
- SyntaxTree::In,
46
- SyntaxTree::Rescue,
47
- SyntaxTree::When,
48
- ].freeze, T::Array[T.class_of(SyntaxTree::Node)])
21
+ SIMPLE_FOLDABLES = T.let(
22
+ [
23
+ SyntaxTree::ArrayLiteral,
24
+ SyntaxTree::BlockNode,
25
+ SyntaxTree::Case,
26
+ SyntaxTree::ClassDeclaration,
27
+ SyntaxTree::Command,
28
+ SyntaxTree::For,
29
+ SyntaxTree::HashLiteral,
30
+ SyntaxTree::Heredoc,
31
+ SyntaxTree::IfNode,
32
+ SyntaxTree::ModuleDeclaration,
33
+ SyntaxTree::SClass,
34
+ SyntaxTree::UnlessNode,
35
+ SyntaxTree::UntilNode,
36
+ SyntaxTree::WhileNode,
37
+ SyntaxTree::Else,
38
+ SyntaxTree::Ensure,
39
+ SyntaxTree::Begin,
40
+ ].freeze,
41
+ T::Array[T.class_of(SyntaxTree::Node)],
42
+ )
43
+
44
+ NODES_WITH_STATEMENTS = T.let(
45
+ [
46
+ SyntaxTree::Elsif,
47
+ SyntaxTree::In,
48
+ SyntaxTree::Rescue,
49
+ SyntaxTree::When,
50
+ ].freeze,
51
+ T::Array[T.class_of(SyntaxTree::Node)],
52
+ )
49
53
 
50
54
  StatementNode = T.type_alias do
51
55
  T.any(
@@ -86,10 +90,17 @@ module RubyLsp
86
90
  add_lines_range(location.start_line, location.end_line - 1)
87
91
  when *NODES_WITH_STATEMENTS
88
92
  add_statements_range(T.must(node), T.cast(node, StatementNode).statements)
89
- when SyntaxTree::Call, SyntaxTree::CommandCall
90
- add_call_range(node)
91
- return
92
- when SyntaxTree::Def, SyntaxTree::Defs
93
+ when SyntaxTree::CallNode, SyntaxTree::CommandCall
94
+ # If there is a receiver, it may be a chained invocation,
95
+ # so we need to process it in special way.
96
+ if node.receiver.nil?
97
+ location = node.location
98
+ add_lines_range(location.start_line, location.end_line - 1)
99
+ else
100
+ add_call_range(node)
101
+ return
102
+ end
103
+ when SyntaxTree::DefNode
93
104
  add_def_range(node)
94
105
  when SyntaxTree::StringConcat
95
106
  add_string_concat(node)
@@ -192,19 +203,19 @@ module RubyLsp
192
203
  @partial_range = nil
193
204
  end
194
205
 
195
- sig { params(node: T.any(SyntaxTree::Call, SyntaxTree::CommandCall)).void }
206
+ sig { params(node: T.any(SyntaxTree::CallNode, SyntaxTree::CommandCall)).void }
196
207
  def add_call_range(node)
197
208
  receiver = T.let(node.receiver, SyntaxTree::Node)
198
209
  loop do
199
210
  case receiver
200
- when SyntaxTree::Call
211
+ when SyntaxTree::CallNode
201
212
  visit(receiver.arguments)
202
213
  receiver = receiver.receiver
203
214
  when SyntaxTree::MethodAddBlock
204
215
  visit(receiver.block)
205
216
  receiver = receiver.call
206
217
 
207
- if receiver.is_a?(SyntaxTree::Call) || receiver.is_a?(SyntaxTree::CommandCall)
218
+ if receiver.is_a?(SyntaxTree::CallNode) || receiver.is_a?(SyntaxTree::CommandCall)
208
219
  receiver = receiver.receiver
209
220
  end
210
221
  else
@@ -212,13 +223,17 @@ module RubyLsp
212
223
  end
213
224
  end
214
225
 
215
- add_lines_range(receiver.location.start_line, node.location.end_line - 1)
226
+ add_lines_range(receiver.location.start_line, node.location.end_line - 1) if receiver
216
227
 
217
228
  visit(node.arguments)
218
229
  end
219
230
 
220
- sig { params(node: T.any(SyntaxTree::Def, SyntaxTree::Defs)).void }
231
+ sig { params(node: SyntaxTree::DefNode).void }
221
232
  def add_def_range(node)
233
+ # For an endless method with no arguments, `node.params` returns `nil` for Ruby 3.0, but a `Syntax::Params`
234
+ # for Ruby 3.1
235
+ return unless node.params
236
+
222
237
  params_location = node.params.location
223
238
 
224
239
  if params_location.start_line < params_location.end_line
@@ -228,7 +243,12 @@ module RubyLsp
228
243
  add_lines_range(location.start_line, location.end_line - 1)
229
244
  end
230
245
 
231
- visit(node.bodystmt.statements)
246
+ bodystmt = node.bodystmt
247
+ if bodystmt.is_a?(SyntaxTree::BodyStmt)
248
+ visit(bodystmt.statements)
249
+ else
250
+ visit(bodystmt)
251
+ end
232
252
  end
233
253
 
234
254
  sig { params(node: SyntaxTree::Node, statements: SyntaxTree::Statements).void }
@@ -11,6 +11,8 @@ module RubyLsp
11
11
  # request uses RuboCop to fix auto-correctable offenses in the document. This requires enabling format on save and
12
12
  # registering the ruby-lsp as the Ruby formatter.
13
13
  #
14
+ # If RuboCop is not available, the request will fall back to SyntaxTree.
15
+ #
14
16
  # # Example
15
17
  #
16
18
  # ```ruby
@@ -20,28 +20,37 @@ module RubyLsp
20
20
  class Hover < BaseRequest
21
21
  extend T::Sig
22
22
 
23
+ ALLOWED_TARGETS = T.let(
24
+ [
25
+ SyntaxTree::Command,
26
+ SyntaxTree::CallNode,
27
+ SyntaxTree::ConstPathRef,
28
+ ],
29
+ T::Array[T.class_of(SyntaxTree::Node)],
30
+ )
31
+
23
32
  sig { params(document: Document, position: Document::PositionShape).void }
24
33
  def initialize(document, position)
25
34
  super(document)
26
35
 
27
- @position = T.let(Document::Scanner.new(document.source).find_position(position), Integer)
36
+ @position = T.let(document.create_scanner.find_char_position(position), Integer)
28
37
  end
29
38
 
30
39
  sig { override.returns(T.nilable(LanguageServer::Protocol::Interface::Hover)) }
31
40
  def run
32
41
  return unless @document.parsed?
33
42
 
34
- target, _ = locate_node_and_parent(
35
- T.must(@document.tree), [SyntaxTree::Command, SyntaxTree::FCall, SyntaxTree::ConstPathRef], @position
36
- )
43
+ target, parent = locate(T.must(@document.tree), @position)
44
+ target = parent if !ALLOWED_TARGETS.include?(target.class) && ALLOWED_TARGETS.include?(parent.class)
37
45
 
38
46
  case target
39
47
  when SyntaxTree::Command
40
48
  message = target.message
41
49
  generate_rails_document_link_hover(message.value, message)
42
- when SyntaxTree::FCall
43
- message = target.value
44
- generate_rails_document_link_hover(message.value, message)
50
+ when SyntaxTree::CallNode
51
+ return if target.message == :call
52
+
53
+ generate_rails_document_link_hover(target.message.value, target.message)
45
54
  when SyntaxTree::ConstPathRef
46
55
  constant_name = full_constant_name(target)
47
56
  generate_rails_document_link_hover(constant_name, target)
@@ -40,7 +40,7 @@ module RubyLsp
40
40
  return unless node.exception.nil?
41
41
 
42
42
  loc = node.location
43
- return unless @range.cover?(loc.start_line - 1) && @range.cover?(loc.end_line - 1)
43
+ return unless visible?(node, @range)
44
44
 
45
45
  @hints << LanguageServer::Protocol::Interface::InlayHint.new(
46
46
  position: { line: loc.start_line - 1, character: loc.start_column + RESCUE_STRING_LENGTH },
@@ -18,18 +18,21 @@ module RubyLsp
18
18
  class OnTypeFormatting < BaseRequest
19
19
  extend T::Sig
20
20
 
21
- END_REGEXES = T.let([
22
- /(if|unless|for|while|class|module|until|def|case).*/,
23
- /.*\sdo/,
24
- ], T::Array[Regexp])
21
+ END_REGEXES = T.let(
22
+ [
23
+ /(if|unless|for|while|class|module|until|def|case).*/,
24
+ /.*\sdo/,
25
+ ],
26
+ T::Array[Regexp],
27
+ )
25
28
 
26
29
  sig { params(document: Document, position: Document::PositionShape, trigger_character: String).void }
27
30
  def initialize(document, position, trigger_character)
28
31
  super(document)
29
32
 
30
- scanner = Document::Scanner.new(document.source)
31
- line_begin = position[:line] == 0 ? 0 : scanner.find_position({ line: position[:line] - 1, character: 0 })
32
- line_end = scanner.find_position(position)
33
+ scanner = document.create_scanner
34
+ line_begin = position[:line] == 0 ? 0 : scanner.find_char_position({ line: position[:line] - 1, character: 0 })
35
+ line_end = scanner.find_char_position(position)
33
36
  line = T.must(@document.source[line_begin..line_end])
34
37
 
35
38
  @indentation = T.let(find_indentation(line), Integer)
@@ -41,17 +44,17 @@ module RubyLsp
41
44
 
42
45
  sig { override.returns(T.nilable(T.all(T::Array[Interface::TextEdit], Object))) }
43
46
  def run
44
- handle_comment_line
45
-
46
- return @edits unless @document.syntax_errors?
47
-
48
47
  case @trigger_character
49
48
  when "{"
50
- handle_curly_brace
49
+ handle_curly_brace if @document.syntax_error?
51
50
  when "|"
52
- handle_pipe
51
+ handle_pipe if @document.syntax_error?
53
52
  when "\n"
54
- handle_statement_end
53
+ if (comment_match = @previous_line.match(/^#(\s*)/))
54
+ handle_comment_line(T.must(comment_match[1]))
55
+ elsif @document.syntax_error?
56
+ handle_statement_end
57
+ end
55
58
  end
56
59
 
57
60
  @edits
@@ -85,14 +88,8 @@ module RubyLsp
85
88
  move_cursor_to(@position[:line], @indentation + 2)
86
89
  end
87
90
 
88
- sig { void }
89
- def handle_comment_line
90
- return unless @trigger_character == "\n"
91
-
92
- is_comment_match = @previous_line.match(/^#(\s*)/)
93
- return unless is_comment_match
94
-
95
- spaces = T.must(is_comment_match[1])
91
+ sig { params(spaces: String).void }
92
+ def handle_comment_line(spaces)
96
93
  add_edit_with_text("##{spaces}")
97
94
  move_cursor_to(@position[:line], @indentation + spaces.size + 1)
98
95
  end
@@ -11,6 +11,8 @@ module RubyLsp
11
11
  #
12
12
  # Trigger this request with: Ctrl + Shift + -> or Ctrl + Shift + <-
13
13
  #
14
+ # Note that if using VSCode Neovim, you will need to be in Insert mode for this to work correctly.
15
+ #
14
16
  # # Example
15
17
  #
16
18
  # ```ruby
@@ -21,44 +23,44 @@ module RubyLsp
21
23
  class SelectionRanges < BaseRequest
22
24
  extend T::Sig
23
25
 
24
- NODES_THAT_CAN_BE_PARENTS = T.let([
25
- SyntaxTree::Assign,
26
- SyntaxTree::ArrayLiteral,
27
- SyntaxTree::Begin,
28
- SyntaxTree::BraceBlock,
29
- SyntaxTree::Call,
30
- SyntaxTree::Case,
31
- SyntaxTree::ClassDeclaration,
32
- SyntaxTree::Command,
33
- SyntaxTree::Def,
34
- SyntaxTree::Defs,
35
- SyntaxTree::DoBlock,
36
- SyntaxTree::Elsif,
37
- SyntaxTree::Else,
38
- SyntaxTree::EmbDoc,
39
- SyntaxTree::Ensure,
40
- SyntaxTree::FCall,
41
- SyntaxTree::For,
42
- SyntaxTree::HashLiteral,
43
- SyntaxTree::Heredoc,
44
- SyntaxTree::HeredocBeg,
45
- SyntaxTree::HshPtn,
46
- SyntaxTree::If,
47
- SyntaxTree::In,
48
- SyntaxTree::Lambda,
49
- SyntaxTree::MethodAddBlock,
50
- SyntaxTree::ModuleDeclaration,
51
- SyntaxTree::Params,
52
- SyntaxTree::Rescue,
53
- SyntaxTree::RescueEx,
54
- SyntaxTree::StringConcat,
55
- SyntaxTree::StringLiteral,
56
- SyntaxTree::Unless,
57
- SyntaxTree::Until,
58
- SyntaxTree::VCall,
59
- SyntaxTree::When,
60
- SyntaxTree::While,
61
- ].freeze, T::Array[T.class_of(SyntaxTree::Node)])
26
+ NODES_THAT_CAN_BE_PARENTS = T.let(
27
+ [
28
+ SyntaxTree::Assign,
29
+ SyntaxTree::ArrayLiteral,
30
+ SyntaxTree::Begin,
31
+ SyntaxTree::BlockNode,
32
+ SyntaxTree::CallNode,
33
+ SyntaxTree::Case,
34
+ SyntaxTree::ClassDeclaration,
35
+ SyntaxTree::Command,
36
+ SyntaxTree::DefNode,
37
+ SyntaxTree::Elsif,
38
+ SyntaxTree::Else,
39
+ SyntaxTree::EmbDoc,
40
+ SyntaxTree::Ensure,
41
+ SyntaxTree::For,
42
+ SyntaxTree::HashLiteral,
43
+ SyntaxTree::Heredoc,
44
+ SyntaxTree::HeredocBeg,
45
+ SyntaxTree::HshPtn,
46
+ SyntaxTree::IfNode,
47
+ SyntaxTree::In,
48
+ SyntaxTree::Lambda,
49
+ SyntaxTree::MethodAddBlock,
50
+ SyntaxTree::ModuleDeclaration,
51
+ SyntaxTree::Params,
52
+ SyntaxTree::Rescue,
53
+ SyntaxTree::RescueEx,
54
+ SyntaxTree::StringConcat,
55
+ SyntaxTree::StringLiteral,
56
+ SyntaxTree::UnlessNode,
57
+ SyntaxTree::UntilNode,
58
+ SyntaxTree::VCall,
59
+ SyntaxTree::When,
60
+ SyntaxTree::WhileNode,
61
+ ].freeze,
62
+ T::Array[T.class_of(SyntaxTree::Node)],
63
+ )
62
64
 
63
65
  sig { params(document: Document).void }
64
66
  def initialize(document)
@@ -22,52 +22,61 @@ module RubyLsp
22
22
  extend T::Sig
23
23
  include SyntaxTree::WithEnvironment
24
24
 
25
- TOKEN_TYPES = T.let({
26
- namespace: 0,
27
- type: 1,
28
- class: 2,
29
- enum: 3,
30
- interface: 4,
31
- struct: 5,
32
- typeParameter: 6,
33
- parameter: 7,
34
- variable: 8,
35
- property: 9,
36
- enumMember: 10,
37
- event: 11,
38
- function: 12,
39
- method: 13,
40
- macro: 14,
41
- keyword: 15,
42
- modifier: 16,
43
- comment: 17,
44
- string: 18,
45
- number: 19,
46
- regexp: 20,
47
- operator: 21,
48
- decorator: 22,
49
- }.freeze, T::Hash[Symbol, Integer])
50
-
51
- TOKEN_MODIFIERS = T.let({
52
- declaration: 0,
53
- definition: 1,
54
- readonly: 2,
55
- static: 3,
56
- deprecated: 4,
57
- abstract: 5,
58
- async: 6,
59
- modification: 7,
60
- documentation: 8,
61
- default_library: 9,
62
- }.freeze, T::Hash[Symbol, Integer])
63
-
64
- SPECIAL_RUBY_METHODS = T.let([
65
- Module.instance_methods(false),
66
- Kernel.instance_methods(false),
67
- Kernel.methods(false),
68
- Bundler::Dsl.instance_methods(false),
69
- Module.private_instance_methods(false),
70
- ].flatten.map(&:to_s), T::Array[String])
25
+ TOKEN_TYPES = T.let(
26
+ {
27
+ namespace: 0,
28
+ type: 1,
29
+ class: 2,
30
+ enum: 3,
31
+ interface: 4,
32
+ struct: 5,
33
+ typeParameter: 6,
34
+ parameter: 7,
35
+ variable: 8,
36
+ property: 9,
37
+ enumMember: 10,
38
+ event: 11,
39
+ function: 12,
40
+ method: 13,
41
+ macro: 14,
42
+ keyword: 15,
43
+ modifier: 16,
44
+ comment: 17,
45
+ string: 18,
46
+ number: 19,
47
+ regexp: 20,
48
+ operator: 21,
49
+ decorator: 22,
50
+ }.freeze,
51
+ T::Hash[Symbol, Integer],
52
+ )
53
+
54
+ TOKEN_MODIFIERS = T.let(
55
+ {
56
+ declaration: 0,
57
+ definition: 1,
58
+ readonly: 2,
59
+ static: 3,
60
+ deprecated: 4,
61
+ abstract: 5,
62
+ async: 6,
63
+ modification: 7,
64
+ documentation: 8,
65
+ default_library: 9,
66
+ }.freeze,
67
+ T::Hash[Symbol, Integer],
68
+ )
69
+
70
+ SPECIAL_RUBY_METHODS = T.let(
71
+ [
72
+ Module.instance_methods(false),
73
+ Kernel.instance_methods(false),
74
+ Kernel.methods(false),
75
+ Bundler::Dsl.instance_methods(false),
76
+ Module.private_instance_methods(false),
77
+ ].flatten.map(&:to_s),
78
+ T::Array[String],
79
+ )
71
80
 
72
81
  class SemanticToken < T::Struct
73
82
  const :location, SyntaxTree::Location
@@ -76,13 +85,20 @@ module RubyLsp
76
85
  const :modifier, T::Array[Integer]
77
86
  end
78
87
 
79
- sig { params(document: Document, encoder: T.nilable(Support::SemanticTokenEncoder)).void }
80
- def initialize(document, encoder: nil)
88
+ sig do
89
+ params(
90
+ document: Document,
91
+ range: T.nilable(T::Range[Integer]),
92
+ encoder: T.nilable(Support::SemanticTokenEncoder),
93
+ ).void
94
+ end
95
+ def initialize(document, range: nil, encoder: nil)
81
96
  super(document)
82
97
 
83
98
  @encoder = encoder
84
99
  @tokens = T.let([], T::Array[SemanticToken])
85
100
  @tree = T.let(T.must(document.tree), SyntaxTree::Node)
101
+ @range = range
86
102
  @special_methods = T.let(nil, T.nilable(T::Array[String]))
87
103
  end
88
104
 
@@ -103,24 +119,32 @@ module RubyLsp
103
119
  @encoder.encode(@tokens)
104
120
  end
105
121
 
106
- sig { override.params(node: SyntaxTree::Call).void }
122
+ sig { override.params(node: SyntaxTree::CallNode).void }
107
123
  def visit_call(node)
124
+ return super unless visible?(node, @range)
125
+
108
126
  visit(node.receiver)
109
127
 
110
128
  message = node.message
111
- add_token(message.location, :method) if message != :call
129
+ unless message == :call || special_method?(message.value)
130
+ add_token(message.location, :method)
131
+ end
112
132
 
113
133
  visit(node.arguments)
114
134
  end
115
135
 
116
136
  sig { override.params(node: SyntaxTree::Command).void }
117
137
  def visit_command(node)
138
+ return super unless visible?(node, @range)
139
+
118
140
  add_token(node.message.location, :method) unless special_method?(node.message.value)
119
141
  visit(node.arguments)
120
142
  end
121
143
 
122
144
  sig { override.params(node: SyntaxTree::CommandCall).void }
123
145
  def visit_command_call(node)
146
+ return super unless visible?(node, @range)
147
+
124
148
  visit(node.receiver)
125
149
  add_token(node.message.location, :method)
126
150
  visit(node.arguments)
@@ -128,41 +152,26 @@ module RubyLsp
128
152
 
129
153
  sig { override.params(node: SyntaxTree::Const).void }
130
154
  def visit_const(node)
155
+ return super unless visible?(node, @range)
156
+
131
157
  add_token(node.location, :namespace)
132
158
  end
133
159
 
134
- sig { override.params(node: SyntaxTree::Def).void }
160
+ sig { override.params(node: SyntaxTree::DefNode).void }
135
161
  def visit_def(node)
136
- add_token(node.name.location, :method, [:declaration])
137
- visit(node.params)
138
- visit(node.bodystmt)
139
- end
140
-
141
- sig { override.params(node: SyntaxTree::DefEndless).void }
142
- def visit_def_endless(node)
143
- add_token(node.name.location, :method, [:declaration])
144
- visit(node.paren)
145
- visit(node.operator)
146
- visit(node.statement)
147
- end
162
+ return super unless visible?(node, @range)
148
163
 
149
- sig { override.params(node: SyntaxTree::Defs).void }
150
- def visit_defs(node)
151
- visit(node.target)
152
- visit(node.operator)
153
164
  add_token(node.name.location, :method, [:declaration])
154
165
  visit(node.params)
155
166
  visit(node.bodystmt)
156
- end
157
-
158
- sig { override.params(node: SyntaxTree::FCall).void }
159
- def visit_fcall(node)
160
- add_token(node.value.location, :method) unless special_method?(node.value.value)
161
- visit(node.arguments)
167
+ visit(node.target) if node.target
168
+ visit(node.operator) if node.operator
162
169
  end
163
170
 
164
171
  sig { override.params(node: SyntaxTree::Kw).void }
165
172
  def visit_kw(node)
173
+ return super unless visible?(node, @range)
174
+
166
175
  case node.value
167
176
  when "self"
168
177
  add_token(node.location, :variable, [:default_library])
@@ -171,6 +180,8 @@ module RubyLsp
171
180
 
172
181
  sig { override.params(node: SyntaxTree::Params).void }
173
182
  def visit_params(node)
183
+ return super unless visible?(node, @range)
184
+
174
185
  node.keywords.each do |keyword,|
175
186
  location = keyword.location
176
187
  add_token(location_without_colon(location), :parameter)
@@ -191,6 +202,8 @@ module RubyLsp
191
202
 
192
203
  sig { override.params(node: SyntaxTree::Field).void }
193
204
  def visit_field(node)
205
+ return super unless visible?(node, @range)
206
+
194
207
  add_token(node.name.location, :method)
195
208
 
196
209
  super
@@ -198,6 +211,8 @@ module RubyLsp
198
211
 
199
212
  sig { override.params(node: SyntaxTree::VarField).void }
200
213
  def visit_var_field(node)
214
+ return super unless visible?(node, @range)
215
+
201
216
  value = node.value
202
217
 
203
218
  case value
@@ -211,6 +226,8 @@ module RubyLsp
211
226
 
212
227
  sig { override.params(node: SyntaxTree::VarRef).void }
213
228
  def visit_var_ref(node)
229
+ return super unless visible?(node, @range)
230
+
214
231
  value = node.value
215
232
 
216
233
  case value
@@ -224,11 +241,15 @@ module RubyLsp
224
241
 
225
242
  sig { override.params(node: SyntaxTree::VCall).void }
226
243
  def visit_vcall(node)
244
+ return super unless visible?(node, @range)
245
+
227
246
  add_token(node.value.location, :method) unless special_method?(node.value.value)
228
247
  end
229
248
 
230
249
  sig { override.params(node: SyntaxTree::ClassDeclaration).void }
231
250
  def visit_class(node)
251
+ return super unless visible?(node, @range)
252
+
232
253
  add_token(node.constant.location, :class, [:declaration])
233
254
  add_token(node.superclass.location, :class) if node.superclass
234
255
  visit(node.bodystmt)
@@ -236,6 +257,8 @@ module RubyLsp
236
257
 
237
258
  sig { override.params(node: SyntaxTree::ModuleDeclaration).void }
238
259
  def visit_module(node)
260
+ return super unless visible?(node, @range)
261
+
239
262
  add_token(node.constant.location, :class, [:declaration])
240
263
  visit(node.bodystmt)
241
264
  end