ruby-lsp 0.19.0 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/exe/ruby-lsp-check +1 -1
  4. data/lib/core_ext/uri.rb +2 -2
  5. data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +85 -36
  6. data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +5 -1
  7. data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +46 -98
  8. data/lib/ruby_indexer/lib/ruby_indexer/index.rb +7 -6
  9. data/lib/ruby_indexer/lib/ruby_indexer/location.rb +22 -0
  10. data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +20 -5
  11. data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +76 -14
  12. data/lib/ruby_indexer/test/classes_and_modules_test.rb +12 -0
  13. data/lib/ruby_indexer/test/enhancements_test.rb +5 -7
  14. data/lib/ruby_indexer/test/global_variable_test.rb +49 -0
  15. data/lib/ruby_indexer/test/index_test.rb +3 -0
  16. data/lib/ruby_indexer/test/rbs_indexer_test.rb +14 -0
  17. data/lib/ruby_indexer/test/reference_finder_test.rb +162 -6
  18. data/lib/ruby_lsp/erb_document.rb +20 -2
  19. data/lib/ruby_lsp/internal.rb +3 -1
  20. data/lib/ruby_lsp/listeners/definition.rb +20 -0
  21. data/lib/ruby_lsp/listeners/folding_ranges.rb +3 -3
  22. data/lib/ruby_lsp/requests/code_action_resolve.rb +16 -4
  23. data/lib/ruby_lsp/requests/completion.rb +1 -0
  24. data/lib/ruby_lsp/requests/definition.rb +2 -0
  25. data/lib/ruby_lsp/requests/document_highlight.rb +5 -1
  26. data/lib/ruby_lsp/requests/hover.rb +1 -0
  27. data/lib/ruby_lsp/requests/range_formatting.rb +57 -0
  28. data/lib/ruby_lsp/requests/references.rb +146 -0
  29. data/lib/ruby_lsp/requests/rename.rb +16 -9
  30. data/lib/ruby_lsp/requests/semantic_highlighting.rb +1 -1
  31. data/lib/ruby_lsp/requests/signature_help.rb +6 -1
  32. data/lib/ruby_lsp/requests/support/common.rb +1 -1
  33. data/lib/ruby_lsp/requests/support/formatter.rb +3 -0
  34. data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +6 -0
  35. data/lib/ruby_lsp/requests/support/rubocop_runner.rb +6 -6
  36. data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +8 -0
  37. data/lib/ruby_lsp/response_builders/document_symbol.rb +2 -2
  38. data/lib/ruby_lsp/response_builders/hover.rb +2 -2
  39. data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +14 -8
  40. data/lib/ruby_lsp/response_builders/signature_help.rb +2 -2
  41. data/lib/ruby_lsp/ruby_document.rb +44 -8
  42. data/lib/ruby_lsp/server.rb +63 -2
  43. data/lib/ruby_lsp/type_inferrer.rb +1 -1
  44. metadata +8 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1d89f4c5d5724a4b8c17002986c64d9f3ea2951282e4a35d96d50b0dd699ba9
4
- data.tar.gz: f3513888e58fbde4a85d93a2ef58ae124e02c354729693ae5e928a66548cd058
3
+ metadata.gz: d43d431cf15d817d80ebb8564f90a748b871ad3c2c278482d4b1b5c831b7bcd2
4
+ data.tar.gz: 28ab582396723d582f7909ad277300430b6e14e6a281408be21a71f4d768930f
5
5
  SHA512:
6
- metadata.gz: 57b44fec7c55b57408e042a9c40fe900c2445aa9fefa811223aa3154f5a4e1e8b1d0f11cf306548b13653f3a61877bcb8d01df7beeadb4766f2094b27786653b
7
- data.tar.gz: cf769828221a3a1cb65e906b2b9c5c0c8fac8feee265e5f31b90fb96813f10a225798da1b3746165e11fd4591f7bd0620ab177233c2214d939986e22a1e3709b
6
+ metadata.gz: 73a87212da50592a6b201a5f21ea559de74fb12ed795428e06392a4375aa73015a103aedd56734b9b05a2f0a27fcb7366b16107ea9f1a080b3459e2eff1dcd88
7
+ data.tar.gz: 7ad77f3dccbabba9cb306c73ccefca4e84e9ff480bc0594d20a1c6e03727948119f7accefc522e5ed25d6de1d21fff03b18c704c7c8908b33eb92cfc5b2c665d
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.19.0
1
+ 0.20.0
data/exe/ruby-lsp-check CHANGED
@@ -32,7 +32,7 @@ files.each_with_index do |file, index|
32
32
  })
33
33
 
34
34
  result = server.pop_response
35
- errors[file] = result.message if result.is_a?(RubyLsp::Error)
35
+ errors[file] = result if result.is_a?(RubyLsp::Error)
36
36
  ensure
37
37
  server.process_message({ method: "textDocument/didClose", params: { textDocument: { uri: uri } } })
38
38
  server.pop_response
data/lib/core_ext/uri.rb CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
  module URI
5
5
  class Generic
6
+ extend T::Sig
7
+
6
8
  # Avoid a deprecation warning with Ruby 3.4 where the default parser was changed to RFC3986.
7
9
  # This condition must remain even after support for 3.4 has been dropped for users that have
8
10
  # `uri` in their lockfile, decoupling it from the ruby version.
@@ -27,8 +29,6 @@ module URI
27
29
  end
28
30
  end
29
31
 
30
- extend T::Sig
31
-
32
32
  sig { returns(T.nilable(String)) }
33
33
  def to_standardized_path
34
34
  parsed_path = path
@@ -33,6 +33,10 @@ module RubyIndexer
33
33
  T::Hash[Integer, Prism::Comment],
34
34
  )
35
35
  @inside_def = T.let(false, T::Boolean)
36
+ @code_units_cache = T.let(
37
+ parse_result.code_units_cache(@index.configuration.encoding),
38
+ T.any(T.proc.params(arg0: Integer).returns(Integer), Prism::CodeUnitsCache),
39
+ )
36
40
 
37
41
  # The nesting stack we're currently inside. Used to determine the fully qualified name of constants, but only
38
42
  # stored by unresolved aliases which need the original nesting to be lazily resolved
@@ -65,6 +69,11 @@ module RubyIndexer
65
69
  :on_constant_or_write_node_enter,
66
70
  :on_constant_and_write_node_enter,
67
71
  :on_constant_operator_write_node_enter,
72
+ :on_global_variable_and_write_node_enter,
73
+ :on_global_variable_operator_write_node_enter,
74
+ :on_global_variable_or_write_node_enter,
75
+ :on_global_variable_target_node_enter,
76
+ :on_global_variable_write_node_enter,
68
77
  :on_instance_variable_write_node_enter,
69
78
  :on_instance_variable_and_write_node_enter,
70
79
  :on_instance_variable_operator_write_node_enter,
@@ -106,10 +115,9 @@ module RubyIndexer
106
115
  entry = Entry::Class.new(
107
116
  nesting,
108
117
  @file_path,
109
- node.location,
110
- constant_path.location,
118
+ Location.from_prism_location(node.location, @code_units_cache),
119
+ Location.from_prism_location(constant_path.location, @code_units_cache),
111
120
  comments,
112
- @index.configuration.encoding,
113
121
  parent_class,
114
122
  )
115
123
 
@@ -136,10 +144,9 @@ module RubyIndexer
136
144
  entry = Entry::Module.new(
137
145
  actual_nesting(name),
138
146
  @file_path,
139
- node.location,
140
- constant_path.location,
147
+ Location.from_prism_location(node.location, @code_units_cache),
148
+ Location.from_prism_location(constant_path.location, @code_units_cache),
141
149
  comments,
142
- @index.configuration.encoding,
143
150
  )
144
151
 
145
152
  @owner_stack << entry
@@ -170,19 +177,17 @@ module RubyIndexer
170
177
  if existing_entries
171
178
  entry = T.must(existing_entries.first)
172
179
  entry.update_singleton_information(
173
- node.location,
174
- expression.location,
180
+ Location.from_prism_location(node.location, @code_units_cache),
181
+ Location.from_prism_location(expression.location, @code_units_cache),
175
182
  collect_comments(node),
176
- @index.configuration.encoding,
177
183
  )
178
184
  else
179
185
  entry = Entry::SingletonClass.new(
180
186
  real_nesting,
181
187
  @file_path,
182
- node.location,
183
- expression.location,
188
+ Location.from_prism_location(node.location, @code_units_cache),
189
+ Location.from_prism_location(expression.location, @code_units_cache),
184
190
  collect_comments(node),
185
- @index.configuration.encoding,
186
191
  nil,
187
192
  )
188
193
  @index.add(entry, skip_prefix_tree: true)
@@ -310,7 +315,7 @@ module RubyIndexer
310
315
  end
311
316
 
312
317
  @enhancements.each do |enhancement|
313
- enhancement.on_call_node(@index, @owner_stack.last, node, @file_path)
318
+ enhancement.on_call_node(@index, @owner_stack.last, node, @file_path, @code_units_cache)
314
319
  rescue StandardError => e
315
320
  @indexing_errors << "Indexing error in #{@file_path} with '#{enhancement.class.name}' enhancement: #{e.message}"
316
321
  end
@@ -340,10 +345,9 @@ module RubyIndexer
340
345
  @index.add(Entry::Method.new(
341
346
  method_name,
342
347
  @file_path,
343
- node.location,
344
- node.name_loc,
348
+ Location.from_prism_location(node.location, @code_units_cache),
349
+ Location.from_prism_location(node.name_loc, @code_units_cache),
345
350
  comments,
346
- @index.configuration.encoding,
347
351
  [Entry::Signature.new(list_params(node.parameters))],
348
352
  current_visibility,
349
353
  @owner_stack.last,
@@ -357,10 +361,9 @@ module RubyIndexer
357
361
  @index.add(Entry::Method.new(
358
362
  method_name,
359
363
  @file_path,
360
- node.location,
361
- node.name_loc,
364
+ Location.from_prism_location(node.location, @code_units_cache),
365
+ Location.from_prism_location(node.name_loc, @code_units_cache),
362
366
  comments,
363
- @index.configuration.encoding,
364
367
  [Entry::Signature.new(list_params(node.parameters))],
365
368
  current_visibility,
366
369
  singleton,
@@ -382,6 +385,31 @@ module RubyIndexer
382
385
  end
383
386
  end
384
387
 
388
+ sig { params(node: Prism::GlobalVariableAndWriteNode).void }
389
+ def on_global_variable_and_write_node_enter(node)
390
+ handle_global_variable(node, node.name_loc)
391
+ end
392
+
393
+ sig { params(node: Prism::GlobalVariableOperatorWriteNode).void }
394
+ def on_global_variable_operator_write_node_enter(node)
395
+ handle_global_variable(node, node.name_loc)
396
+ end
397
+
398
+ sig { params(node: Prism::GlobalVariableOrWriteNode).void }
399
+ def on_global_variable_or_write_node_enter(node)
400
+ handle_global_variable(node, node.name_loc)
401
+ end
402
+
403
+ sig { params(node: Prism::GlobalVariableTargetNode).void }
404
+ def on_global_variable_target_node_enter(node)
405
+ handle_global_variable(node, node.location)
406
+ end
407
+
408
+ sig { params(node: Prism::GlobalVariableWriteNode).void }
409
+ def on_global_variable_write_node_enter(node)
410
+ handle_global_variable(node, node.name_loc)
411
+ end
412
+
385
413
  sig { params(node: Prism::InstanceVariableWriteNode).void }
386
414
  def on_instance_variable_write_node_enter(node)
387
415
  handle_instance_variable(node, node.name_loc)
@@ -417,15 +445,38 @@ module RubyIndexer
417
445
  node.old_name.slice,
418
446
  @owner_stack.last,
419
447
  @file_path,
420
- node.new_name.location,
448
+ Location.from_prism_location(node.new_name.location, @code_units_cache),
421
449
  comments,
422
- @index.configuration.encoding,
423
450
  ),
424
451
  )
425
452
  end
426
453
 
427
454
  private
428
455
 
456
+ sig do
457
+ params(
458
+ node: T.any(
459
+ Prism::GlobalVariableAndWriteNode,
460
+ Prism::GlobalVariableOperatorWriteNode,
461
+ Prism::GlobalVariableOrWriteNode,
462
+ Prism::GlobalVariableTargetNode,
463
+ Prism::GlobalVariableWriteNode,
464
+ ),
465
+ loc: Prism::Location,
466
+ ).void
467
+ end
468
+ def handle_global_variable(node, loc)
469
+ name = node.name.to_s
470
+ comments = collect_comments(node)
471
+
472
+ @index.add(Entry::GlobalVariable.new(
473
+ name,
474
+ @file_path,
475
+ Location.from_prism_location(loc, @code_units_cache),
476
+ comments,
477
+ ))
478
+ end
479
+
429
480
  sig do
430
481
  params(
431
482
  node: T.any(
@@ -453,9 +504,8 @@ module RubyIndexer
453
504
  @index.add(Entry::InstanceVariable.new(
454
505
  name,
455
506
  @file_path,
456
- loc,
507
+ Location.from_prism_location(loc, @code_units_cache),
457
508
  collect_comments(node),
458
- @index.configuration.encoding,
459
509
  owner,
460
510
  ))
461
511
  end
@@ -518,9 +568,8 @@ module RubyIndexer
518
568
  old_name_value,
519
569
  @owner_stack.last,
520
570
  @file_path,
521
- new_name.location,
571
+ Location.from_prism_location(new_name.location, @code_units_cache),
522
572
  comments,
523
- @index.configuration.encoding,
524
573
  ),
525
574
  )
526
575
  end
@@ -555,9 +604,8 @@ module RubyIndexer
555
604
  @stack.dup,
556
605
  name,
557
606
  @file_path,
558
- node.location,
607
+ Location.from_prism_location(node.location, @code_units_cache),
559
608
  comments,
560
- @index.configuration.encoding,
561
609
  )
562
610
  when Prism::ConstantWriteNode, Prism::ConstantAndWriteNode, Prism::ConstantOrWriteNode,
563
611
  Prism::ConstantOperatorWriteNode
@@ -569,9 +617,8 @@ module RubyIndexer
569
617
  @stack.dup,
570
618
  name,
571
619
  @file_path,
572
- node.location,
620
+ Location.from_prism_location(node.location, @code_units_cache),
573
621
  comments,
574
- @index.configuration.encoding,
575
622
  )
576
623
  when Prism::ConstantPathWriteNode, Prism::ConstantPathOrWriteNode, Prism::ConstantPathOperatorWriteNode,
577
624
  Prism::ConstantPathAndWriteNode
@@ -581,12 +628,16 @@ module RubyIndexer
581
628
  @stack.dup,
582
629
  name,
583
630
  @file_path,
584
- node.location,
631
+ Location.from_prism_location(node.location, @code_units_cache),
585
632
  comments,
586
- @index.configuration.encoding,
587
633
  )
588
634
  else
589
- Entry::Constant.new(name, @file_path, node.location, comments, @index.configuration.encoding)
635
+ Entry::Constant.new(
636
+ name,
637
+ @file_path,
638
+ Location.from_prism_location(node.location, @code_units_cache),
639
+ comments,
640
+ )
590
641
  end,
591
642
  )
592
643
  end
@@ -652,9 +703,8 @@ module RubyIndexer
652
703
  @index.add(Entry::Accessor.new(
653
704
  name,
654
705
  @file_path,
655
- loc,
706
+ Location.from_prism_location(loc, @code_units_cache),
656
707
  comments,
657
- @index.configuration.encoding,
658
708
  current_visibility,
659
709
  @owner_stack.last,
660
710
  ))
@@ -665,9 +715,8 @@ module RubyIndexer
665
715
  @index.add(Entry::Accessor.new(
666
716
  "#{name}=",
667
717
  @file_path,
668
- loc,
718
+ Location.from_prism_location(loc, @code_units_cache),
669
719
  comments,
670
- @index.configuration.encoding,
671
720
  current_visibility,
672
721
  @owner_stack.last,
673
722
  ))
@@ -19,8 +19,12 @@ module RubyIndexer
19
19
  owner: T.nilable(Entry::Namespace),
20
20
  node: Prism::CallNode,
21
21
  file_path: String,
22
+ code_units_cache: T.any(
23
+ T.proc.params(arg0: Integer).returns(Integer),
24
+ Prism::CodeUnitsCache,
25
+ ),
22
26
  ).void
23
27
  end
24
- def on_call_node(index, owner, node, file_path); end
28
+ def on_call_node(index, owner, node, file_path, code_units_cache); end
25
29
  end
26
30
  end
@@ -31,30 +31,16 @@ module RubyIndexer
31
31
  params(
32
32
  name: String,
33
33
  file_path: String,
34
- location: T.any(Prism::Location, RubyIndexer::Location),
34
+ location: Location,
35
35
  comments: T.nilable(String),
36
- encoding: Encoding,
37
36
  ).void
38
37
  end
39
- def initialize(name, file_path, location, comments, encoding)
38
+ def initialize(name, file_path, location, comments)
40
39
  @name = name
41
40
  @file_path = file_path
42
41
  @comments = comments
43
42
  @visibility = T.let(Visibility::PUBLIC, Visibility)
44
-
45
- @location = T.let(
46
- if location.is_a?(Prism::Location)
47
- Location.new(
48
- location.start_line,
49
- location.end_line,
50
- location.start_code_units_column(encoding),
51
- location.end_code_units_column(encoding),
52
- )
53
- else
54
- location
55
- end,
56
- RubyIndexer::Location,
57
- )
43
+ @location = location
58
44
  end
59
45
 
60
46
  sig { returns(T::Boolean) }
@@ -110,6 +96,10 @@ module RubyIndexer
110
96
  else
111
97
  ""
112
98
  end
99
+ rescue Errno::ENOENT
100
+ # If the file was deleted, but the entry hasn't been removed yet (could happen due to concurrency), then we do
101
+ # not want to fail. Just set the comments to an empty string
102
+ ""
113
103
  end
114
104
  end
115
105
 
@@ -148,32 +138,19 @@ module RubyIndexer
148
138
  params(
149
139
  nesting: T::Array[String],
150
140
  file_path: String,
151
- location: T.any(Prism::Location, RubyIndexer::Location),
152
- name_location: T.any(Prism::Location, Location),
141
+ location: Location,
142
+ name_location: Location,
153
143
  comments: T.nilable(String),
154
- encoding: Encoding,
155
144
  ).void
156
145
  end
157
- def initialize(nesting, file_path, location, name_location, comments, encoding) # rubocop:disable Metrics/ParameterLists
146
+ def initialize(nesting, file_path, location, name_location, comments)
158
147
  @name = T.let(nesting.join("::"), String)
159
148
  # The original nesting where this namespace was discovered
160
149
  @nesting = nesting
161
150
 
162
- super(@name, file_path, location, comments, encoding)
163
-
164
- @name_location = T.let(
165
- if name_location.is_a?(Prism::Location)
166
- Location.new(
167
- name_location.start_line,
168
- name_location.end_line,
169
- name_location.start_code_units_column(encoding),
170
- name_location.end_code_units_column(encoding),
171
- )
172
- else
173
- name_location
174
- end,
175
- RubyIndexer::Location,
176
- )
151
+ super(@name, file_path, location, comments)
152
+
153
+ @name_location = name_location
177
154
  end
178
155
 
179
156
  sig { returns(T::Array[String]) }
@@ -210,15 +187,14 @@ module RubyIndexer
210
187
  params(
211
188
  nesting: T::Array[String],
212
189
  file_path: String,
213
- location: T.any(Prism::Location, RubyIndexer::Location),
214
- name_location: T.any(Prism::Location, Location),
190
+ location: Location,
191
+ name_location: Location,
215
192
  comments: T.nilable(String),
216
- encoding: Encoding,
217
193
  parent_class: T.nilable(String),
218
194
  ).void
219
195
  end
220
- def initialize(nesting, file_path, location, name_location, comments, encoding, parent_class) # rubocop:disable Metrics/ParameterLists
221
- super(nesting, file_path, location, name_location, comments, encoding)
196
+ def initialize(nesting, file_path, location, name_location, comments, parent_class) # rubocop:disable Metrics/ParameterLists
197
+ super(nesting, file_path, location, name_location, comments)
222
198
  @parent_class = parent_class
223
199
  end
224
200
 
@@ -233,26 +209,14 @@ module RubyIndexer
233
209
 
234
210
  sig do
235
211
  params(
236
- location: Prism::Location,
237
- name_location: Prism::Location,
212
+ location: Location,
213
+ name_location: Location,
238
214
  comments: T.nilable(String),
239
- encoding: Encoding,
240
215
  ).void
241
216
  end
242
- def update_singleton_information(location, name_location, comments, encoding)
243
- # Create a new RubyIndexer::Location object from the Prism location
244
- @location = Location.new(
245
- location.start_line,
246
- location.end_line,
247
- location.start_code_units_column(encoding),
248
- location.end_code_units_column(encoding),
249
- )
250
- @name_location = Location.new(
251
- name_location.start_line,
252
- name_location.end_line,
253
- name_location.start_code_units_column(encoding),
254
- name_location.end_code_units_column(encoding),
255
- )
217
+ def update_singleton_information(location, name_location, comments)
218
+ @location = location
219
+ @name_location = name_location
256
220
  (@comments ||= +"") << comments if comments
257
221
  end
258
222
  end
@@ -369,15 +333,14 @@ module RubyIndexer
369
333
  params(
370
334
  name: String,
371
335
  file_path: String,
372
- location: T.any(Prism::Location, RubyIndexer::Location),
336
+ location: Location,
373
337
  comments: T.nilable(String),
374
- encoding: Encoding,
375
338
  visibility: Visibility,
376
339
  owner: T.nilable(Entry::Namespace),
377
340
  ).void
378
341
  end
379
- def initialize(name, file_path, location, comments, encoding, visibility, owner) # rubocop:disable Metrics/ParameterLists
380
- super(name, file_path, location, comments, encoding)
342
+ def initialize(name, file_path, location, comments, visibility, owner) # rubocop:disable Metrics/ParameterLists
343
+ super(name, file_path, location, comments)
381
344
  @visibility = visibility
382
345
  @owner = owner
383
346
  end
@@ -437,31 +400,18 @@ module RubyIndexer
437
400
  params(
438
401
  name: String,
439
402
  file_path: String,
440
- location: T.any(Prism::Location, RubyIndexer::Location),
441
- name_location: T.any(Prism::Location, Location),
403
+ location: Location,
404
+ name_location: Location,
442
405
  comments: T.nilable(String),
443
- encoding: Encoding,
444
406
  signatures: T::Array[Signature],
445
407
  visibility: Visibility,
446
408
  owner: T.nilable(Entry::Namespace),
447
409
  ).void
448
410
  end
449
- def initialize(name, file_path, location, name_location, comments, encoding, signatures, visibility, owner) # rubocop:disable Metrics/ParameterLists
450
- super(name, file_path, location, comments, encoding, visibility, owner)
411
+ def initialize(name, file_path, location, name_location, comments, signatures, visibility, owner) # rubocop:disable Metrics/ParameterLists
412
+ super(name, file_path, location, comments, visibility, owner)
451
413
  @signatures = signatures
452
- @name_location = T.let(
453
- if name_location.is_a?(Prism::Location)
454
- Location.new(
455
- name_location.start_line,
456
- name_location.end_line,
457
- name_location.start_code_units_column(encoding),
458
- name_location.end_code_units_column(encoding),
459
- )
460
- else
461
- name_location
462
- end,
463
- RubyIndexer::Location,
464
- )
414
+ @name_location = name_location
465
415
  end
466
416
  end
467
417
 
@@ -490,13 +440,12 @@ module RubyIndexer
490
440
  nesting: T::Array[String],
491
441
  name: String,
492
442
  file_path: String,
493
- location: T.any(Prism::Location, RubyIndexer::Location),
443
+ location: Location,
494
444
  comments: T.nilable(String),
495
- encoding: Encoding,
496
445
  ).void
497
446
  end
498
- def initialize(target, nesting, name, file_path, location, comments, encoding) # rubocop:disable Metrics/ParameterLists
499
- super(name, file_path, location, comments, encoding)
447
+ def initialize(target, nesting, name, file_path, location, comments) # rubocop:disable Metrics/ParameterLists
448
+ super(name, file_path, location, comments)
500
449
 
501
450
  @target = target
502
451
  @nesting = nesting
@@ -510,14 +459,13 @@ module RubyIndexer
510
459
  sig { returns(String) }
511
460
  attr_reader :target
512
461
 
513
- sig { params(target: String, unresolved_alias: UnresolvedConstantAlias, encoding: Encoding).void }
514
- def initialize(target, unresolved_alias, encoding)
462
+ sig { params(target: String, unresolved_alias: UnresolvedConstantAlias).void }
463
+ def initialize(target, unresolved_alias)
515
464
  super(
516
465
  unresolved_alias.name,
517
466
  unresolved_alias.file_path,
518
467
  unresolved_alias.location,
519
468
  unresolved_alias.comments,
520
- encoding
521
469
  )
522
470
 
523
471
  @visibility = unresolved_alias.visibility
@@ -525,6 +473,9 @@ module RubyIndexer
525
473
  end
526
474
  end
527
475
 
476
+ # Represents a global variable e.g.: $DEBUG
477
+ class GlobalVariable < Entry; end
478
+
528
479
  # Represents an instance variable e.g.: @a = 1
529
480
  class InstanceVariable < Entry
530
481
  sig { returns(T.nilable(Entry::Namespace)) }
@@ -534,14 +485,13 @@ module RubyIndexer
534
485
  params(
535
486
  name: String,
536
487
  file_path: String,
537
- location: T.any(Prism::Location, RubyIndexer::Location),
488
+ location: Location,
538
489
  comments: T.nilable(String),
539
- encoding: Encoding,
540
490
  owner: T.nilable(Entry::Namespace),
541
491
  ).void
542
492
  end
543
- def initialize(name, file_path, location, comments, encoding, owner) # rubocop:disable Metrics/ParameterLists
544
- super(name, file_path, location, comments, encoding)
493
+ def initialize(name, file_path, location, comments, owner)
494
+ super(name, file_path, location, comments)
545
495
  @owner = owner
546
496
  end
547
497
  end
@@ -564,13 +514,12 @@ module RubyIndexer
564
514
  old_name: String,
565
515
  owner: T.nilable(Entry::Namespace),
566
516
  file_path: String,
567
- location: T.any(Prism::Location, RubyIndexer::Location),
517
+ location: Location,
568
518
  comments: T.nilable(String),
569
- encoding: Encoding,
570
519
  ).void
571
520
  end
572
- def initialize(new_name, old_name, owner, file_path, location, comments, encoding) # rubocop:disable Metrics/ParameterLists
573
- super(new_name, file_path, location, comments, encoding)
521
+ def initialize(new_name, old_name, owner, file_path, location, comments) # rubocop:disable Metrics/ParameterLists
522
+ super(new_name, file_path, location, comments)
574
523
 
575
524
  @new_name = new_name
576
525
  @old_name = old_name
@@ -589,9 +538,9 @@ module RubyIndexer
589
538
  attr_reader :owner
590
539
 
591
540
  sig do
592
- params(target: T.any(Member, MethodAlias), unresolved_alias: UnresolvedMethodAlias, encoding: Encoding).void
541
+ params(target: T.any(Member, MethodAlias), unresolved_alias: UnresolvedMethodAlias).void
593
542
  end
594
- def initialize(target, unresolved_alias, encoding)
543
+ def initialize(target, unresolved_alias)
595
544
  full_comments = +"Alias for #{target.name}\n"
596
545
  full_comments << "#{unresolved_alias.comments}\n"
597
546
  full_comments << target.comments
@@ -601,7 +550,6 @@ module RubyIndexer
601
550
  unresolved_alias.file_path,
602
551
  unresolved_alias.location,
603
552
  full_comments,
604
- encoding
605
553
  )
606
554
 
607
555
  @target = target
@@ -665,7 +665,6 @@ module RubyIndexer
665
665
  attached_ancestor.location,
666
666
  attached_ancestor.name_location,
667
667
  nil,
668
- @configuration.encoding,
669
668
  nil,
670
669
  )
671
670
  add(singleton, skip_prefix_tree: true)
@@ -677,11 +676,13 @@ module RubyIndexer
677
676
  sig do
678
677
  type_parameters(:T).params(
679
678
  path: String,
680
- type: T::Class[T.all(T.type_parameter(:T), Entry)],
681
- ).returns(T.nilable(T::Array[T.type_parameter(:T)]))
679
+ type: T.nilable(T::Class[T.all(T.type_parameter(:T), Entry)]),
680
+ ).returns(T.nilable(T.any(T::Array[Entry], T::Array[T.type_parameter(:T)])))
682
681
  end
683
- def entries_for(path, type)
682
+ def entries_for(path, type = nil)
684
683
  entries = @files_to_entries[path]
684
+ return entries unless type
685
+
685
686
  entries&.grep(type)
686
687
  end
687
688
 
@@ -857,7 +858,7 @@ module RubyIndexer
857
858
  return entry unless target
858
859
 
859
860
  target_name = T.must(target.first).name
860
- resolved_alias = Entry::ConstantAlias.new(target_name, entry, @configuration.encoding)
861
+ resolved_alias = Entry::ConstantAlias.new(target_name, entry)
861
862
 
862
863
  # Replace the UnresolvedAlias by a resolved one so that we don't have to do this again later
863
864
  original_entries = T.must(@entries[alias_name])
@@ -1048,7 +1049,7 @@ module RubyIndexer
1048
1049
  target_method_entries = resolve_method(entry.old_name, receiver_name, seen_names)
1049
1050
  return entry unless target_method_entries
1050
1051
 
1051
- resolved_alias = Entry::MethodAlias.new(T.must(target_method_entries.first), entry, @configuration.encoding)
1052
+ resolved_alias = Entry::MethodAlias.new(T.must(target_method_entries.first), entry)
1052
1053
  original_entries = T.must(@entries[new_name])
1053
1054
  original_entries.delete(entry)
1054
1055
  original_entries << resolved_alias
@@ -5,6 +5,28 @@ module RubyIndexer
5
5
  class Location
6
6
  extend T::Sig
7
7
 
8
+ class << self
9
+ extend T::Sig
10
+
11
+ sig do
12
+ params(
13
+ prism_location: Prism::Location,
14
+ code_units_cache: T.any(
15
+ T.proc.params(arg0: Integer).returns(Integer),
16
+ Prism::CodeUnitsCache,
17
+ ),
18
+ ).returns(T.attached_class)
19
+ end
20
+ def from_prism_location(prism_location, code_units_cache)
21
+ new(
22
+ prism_location.start_line,
23
+ prism_location.end_line,
24
+ prism_location.cached_start_code_units_column(code_units_cache),
25
+ prism_location.cached_end_code_units_column(code_units_cache),
26
+ )
27
+ end
28
+ end
29
+
8
30
  sig { returns(Integer) }
9
31
  attr_reader :start_line, :end_line, :start_column, :end_column
10
32