ruby-lsp 0.23.14 → 0.23.15
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/exe/ruby-lsp-launcher +9 -1
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +1 -1
- data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +6 -3
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +4 -2
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +59 -29
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +5 -4
- data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +5 -1
- data/lib/ruby_indexer/test/class_variables_test.rb +14 -14
- data/lib/ruby_indexer/test/classes_and_modules_test.rb +65 -40
- data/lib/ruby_indexer/test/configuration_test.rb +6 -4
- data/lib/ruby_indexer/test/constant_test.rb +34 -34
- data/lib/ruby_indexer/test/enhancements_test.rb +1 -1
- data/lib/ruby_indexer/test/index_test.rb +139 -135
- data/lib/ruby_indexer/test/instance_variables_test.rb +37 -37
- data/lib/ruby_indexer/test/method_test.rb +118 -118
- data/lib/ruby_indexer/test/prefix_tree_test.rb +13 -13
- data/lib/ruby_indexer/test/rbs_indexer_test.rb +64 -70
- data/lib/ruby_indexer/test/test_case.rb +2 -2
- data/lib/ruby_lsp/erb_document.rb +12 -4
- data/lib/ruby_lsp/global_state.rb +1 -1
- data/lib/ruby_lsp/listeners/code_lens.rb +3 -3
- data/lib/ruby_lsp/listeners/completion.rb +24 -11
- data/lib/ruby_lsp/listeners/definition.rb +1 -1
- data/lib/ruby_lsp/listeners/document_link.rb +3 -1
- data/lib/ruby_lsp/listeners/document_symbol.rb +3 -3
- data/lib/ruby_lsp/listeners/folding_ranges.rb +8 -4
- data/lib/ruby_lsp/listeners/hover.rb +2 -2
- data/lib/ruby_lsp/listeners/semantic_highlighting.rb +12 -5
- data/lib/ruby_lsp/listeners/signature_help.rb +5 -1
- data/lib/ruby_lsp/listeners/spec_style.rb +1 -1
- data/lib/ruby_lsp/listeners/test_style.rb +3 -3
- data/lib/ruby_lsp/requests/code_action_resolve.rb +4 -3
- data/lib/ruby_lsp/requests/completion_resolve.rb +1 -1
- data/lib/ruby_lsp/requests/hover.rb +2 -2
- data/lib/ruby_lsp/requests/on_type_formatting.rb +4 -2
- data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +1 -2
- data/lib/ruby_lsp/requests/references.rb +2 -1
- data/lib/ruby_lsp/requests/rename.rb +8 -5
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +4 -4
- data/lib/ruby_lsp/requests/show_syntax_tree.rb +1 -1
- data/lib/ruby_lsp/requests/support/common.rb +3 -1
- data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +2 -2
- data/lib/ruby_lsp/requests/support/source_uri.rb +1 -1
- data/lib/ruby_lsp/response_builders/document_symbol.rb +3 -2
- data/lib/ruby_lsp/response_builders/hover.rb +1 -1
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +1 -1
- data/lib/ruby_lsp/scripts/compose_bundle.rb +6 -4
- data/lib/ruby_lsp/server.rb +12 -4
- data/lib/ruby_lsp/setup_bundler.rb +5 -2
- data/lib/ruby_lsp/static_docs.rb +8 -1
- data/lib/ruby_lsp/store.rb +3 -2
- data/lib/ruby_lsp/test_reporters/lsp_reporter.rb +152 -0
- data/lib/ruby_lsp/test_reporters/minitest_reporter.rb +105 -0
- data/lib/ruby_lsp/test_reporters/test_unit_reporter.rb +94 -0
- data/lib/ruby_lsp/type_inferrer.rb +4 -1
- metadata +6 -6
- data/lib/ruby_lsp/ruby_lsp_reporter_plugin.rb +0 -109
- data/lib/ruby_lsp/test_reporter.rb +0 -207
- data/lib/ruby_lsp/test_unit_test_runner.rb +0 -98
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e54bcceea5e2a289c338ab213823ea63915ad96901f99c1976e6ad746c5c5402
|
4
|
+
data.tar.gz: 643f3843f6085d5cf7f29e1d577a94c8d994cbe932708da875e6600ca4fe4c64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49b288356198fbfe6d66e4c6f4765585e44e6b46c5bb81d18d5df547914c5f167b9ac781add2d725f5f9fda9e042dc585323672c60e27c034c80a46eb8f121e3
|
7
|
+
data.tar.gz: 95a7119a9272c5a012ea17fd90c86dc70fa6d66bf81a056ad19dd7ab891d7db9c9c596aff6342432505dd2b487212d48bbb8a28f35468268370d3856b8d1d7ee
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.23.
|
1
|
+
0.23.15
|
data/exe/ruby-lsp-launcher
CHANGED
@@ -11,12 +11,19 @@ install_error = nil
|
|
11
11
|
reboot = false
|
12
12
|
|
13
13
|
workspace_uri = ARGV.first
|
14
|
+
raw_initialize_path = File.join(".ruby-lsp", "raw_initialize")
|
14
15
|
|
15
16
|
raw_initialize = if workspace_uri && !workspace_uri.start_with?("--")
|
16
17
|
# If there's an argument without `--`, then it's the server asking to compose the bundle and passing to this
|
17
18
|
# executable the workspace URI. We can't require gems at this point, so we built a fake initialize request manually
|
18
19
|
reboot = true
|
19
20
|
"{\"params\":{\"workspaceFolders\":[{\"uri\":\"#{workspace_uri}\"}]}}"
|
21
|
+
elsif ARGV.include?("--retry")
|
22
|
+
# If we're trying to re-boot automatically, we can't try to read the same initialize request again from the pipe. We
|
23
|
+
# need to ensure that the retry mechanism always writes the request to a file, so that we can reuse it
|
24
|
+
content = File.read(raw_initialize_path)
|
25
|
+
File.delete(raw_initialize_path)
|
26
|
+
content
|
20
27
|
else
|
21
28
|
# Read the initialize request before even starting the server. We need to do this to figure out the workspace URI.
|
22
29
|
# Editors are not required to spawn the language server process on the same directory as the workspace URI, so we need
|
@@ -89,7 +96,8 @@ rescue Bundler::GemNotFound, Bundler::GitError
|
|
89
96
|
# scratch
|
90
97
|
unless install_error || ARGV.include?("--retry")
|
91
98
|
$stderr.puts("Initial bundle compose succeeded, but Bundler.setup failed. Trying to restart from scratch...")
|
92
|
-
|
99
|
+
File.write(raw_initialize_path, raw_initialize)
|
100
|
+
exec(Gem.ruby, __FILE__, *ARGV, "--retry")
|
93
101
|
end
|
94
102
|
|
95
103
|
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
|
@@ -94,7 +94,7 @@ module RubyIndexer
|
|
94
94
|
# Remove user specified patterns
|
95
95
|
bundle_path = Bundler.settings["path"]&.gsub(/[\\]+/, "/")
|
96
96
|
uris.reject! do |indexable|
|
97
|
-
path =
|
97
|
+
path = indexable.full_path #: as !nil
|
98
98
|
next false if test_files_ignored_from_exclusion?(path, bundle_path)
|
99
99
|
|
100
100
|
excluded_patterns.any? { |pattern| File.fnmatch?(pattern, path, flags) }
|
@@ -135,7 +135,7 @@ module RubyIndexer
|
|
135
135
|
existing_entries = T.cast(@index[real_nesting.join("::")], T.nilable(T::Array[Entry::SingletonClass]))
|
136
136
|
|
137
137
|
if existing_entries
|
138
|
-
entry =
|
138
|
+
entry = existing_entries.first #: as !nil
|
139
139
|
entry.update_singleton_information(
|
140
140
|
Location.from_prism_location(node.location, @code_units_cache),
|
141
141
|
Location.from_prism_location(expression.location, @code_units_cache),
|
@@ -509,7 +509,10 @@ module RubyIndexer
|
|
509
509
|
parent_class_name,
|
510
510
|
)
|
511
511
|
|
512
|
-
advance_namespace_stack(
|
512
|
+
advance_namespace_stack(
|
513
|
+
nesting.last, #: as !nil
|
514
|
+
entry,
|
515
|
+
)
|
513
516
|
end
|
514
517
|
|
515
518
|
#: { (Index index, Entry::Namespace base) -> void } -> void
|
@@ -927,7 +930,7 @@ module RubyIndexer
|
|
927
930
|
|
928
931
|
#: -> VisibilityScope
|
929
932
|
def current_visibility_scope
|
930
|
-
|
933
|
+
@visibility_stack.last #: as !nil
|
931
934
|
end
|
932
935
|
|
933
936
|
#: (Prism::ParametersNode? parameters_node) -> Array[Entry::Parameter]
|
@@ -126,7 +126,13 @@ module RubyIndexer
|
|
126
126
|
|
127
127
|
(@entries[name] ||= []) << entry
|
128
128
|
(@uris_to_entries[entry.uri.to_s] ||= []) << entry
|
129
|
-
|
129
|
+
|
130
|
+
unless skip_prefix_tree
|
131
|
+
@entries_tree.insert(
|
132
|
+
name,
|
133
|
+
@entries[name], #: as !nil
|
134
|
+
)
|
135
|
+
end
|
130
136
|
end
|
131
137
|
|
132
138
|
#: (String fully_qualified_name) -> Array[Entry]?
|
@@ -188,7 +194,8 @@ module RubyIndexer
|
|
188
194
|
end
|
189
195
|
|
190
196
|
results = nesting.length.downto(0).flat_map do |i|
|
191
|
-
prefix =
|
197
|
+
prefix = nesting[0...i] #: as !nil
|
198
|
+
.join("::")
|
192
199
|
namespaced_query = prefix.empty? ? query : "#{prefix}::#{query}"
|
193
200
|
@entries_tree.search(namespaced_query)
|
194
201
|
end
|
@@ -288,7 +295,8 @@ module RubyIndexer
|
|
288
295
|
|
289
296
|
# Constants defined in enclosing scopes
|
290
297
|
nesting.length.downto(1) do |i|
|
291
|
-
namespace =
|
298
|
+
namespace = nesting[0...i] #: as !nil
|
299
|
+
.join("::")
|
292
300
|
entries.concat(@entries_tree.search("#{namespace}::#{name}"))
|
293
301
|
end
|
294
302
|
|
@@ -406,7 +414,8 @@ module RubyIndexer
|
|
406
414
|
# Indexes a File URI by reading the contents from disk
|
407
415
|
#: (URI::Generic uri, ?collect_comments: bool) -> void
|
408
416
|
def index_file(uri, collect_comments: true)
|
409
|
-
|
417
|
+
path = uri.full_path #: as !nil
|
418
|
+
index_single(uri, File.read(path), collect_comments: collect_comments)
|
410
419
|
rescue Errno::EISDIR, Errno::ENOENT
|
411
420
|
# If `path` is a directory, just ignore it and continue indexing. If the file doesn't exist, then we also ignore
|
412
421
|
# it
|
@@ -428,7 +437,8 @@ module RubyIndexer
|
|
428
437
|
real_parts = []
|
429
438
|
|
430
439
|
(parts.length - 1).downto(0) do |i|
|
431
|
-
current_name =
|
440
|
+
current_name = parts[0..i] #: as !nil
|
441
|
+
.join("::")
|
432
442
|
entry = @entries[current_name]&.first
|
433
443
|
|
434
444
|
case entry
|
@@ -445,7 +455,9 @@ module RubyIndexer
|
|
445
455
|
target = resolved.target
|
446
456
|
return follow_aliased_namespace("#{target}::#{real_parts.join("::")}", seen_names)
|
447
457
|
else
|
448
|
-
real_parts.unshift(
|
458
|
+
real_parts.unshift(
|
459
|
+
parts[i], #: as !nil
|
460
|
+
)
|
449
461
|
end
|
450
462
|
end
|
451
463
|
|
@@ -542,11 +554,12 @@ module RubyIndexer
|
|
542
554
|
|
543
555
|
# The original nesting where we discovered this namespace, so that we resolve the correct names of the
|
544
556
|
# included/prepended/extended modules and parent classes
|
545
|
-
nesting =
|
557
|
+
nesting = namespaces.first #: as !nil
|
558
|
+
.nesting.flat_map { |n| n.split("::") }
|
546
559
|
|
547
560
|
if nesting.any?
|
548
561
|
singleton_levels.times do
|
549
|
-
nesting << "<Class:#{
|
562
|
+
nesting << "<Class:#{nesting.last}>"
|
550
563
|
end
|
551
564
|
end
|
552
565
|
|
@@ -612,7 +625,8 @@ module RubyIndexer
|
|
612
625
|
name_parts = owner_name.split("::")
|
613
626
|
|
614
627
|
if name_parts.last&.start_with?("<Class:")
|
615
|
-
attached_name =
|
628
|
+
attached_name = name_parts[0..-2] #: as !nil
|
629
|
+
.join("::")
|
616
630
|
attached_ancestors = linearized_ancestors_of(attached_name)
|
617
631
|
variables.concat(class_variables.select { |e| attached_ancestors.any?(e.owner&.name) })
|
618
632
|
else
|
@@ -649,7 +663,10 @@ module RubyIndexer
|
|
649
663
|
block.call(self)
|
650
664
|
else
|
651
665
|
delete(uri)
|
652
|
-
index_single(
|
666
|
+
index_single(
|
667
|
+
uri,
|
668
|
+
source, #: as !nil
|
669
|
+
)
|
653
670
|
end
|
654
671
|
|
655
672
|
updated_entries = @uris_to_entries[key]
|
@@ -699,7 +716,7 @@ module RubyIndexer
|
|
699
716
|
singleton = T.cast(self[full_singleton_name]&.first, T.nilable(Entry::SingletonClass))
|
700
717
|
|
701
718
|
unless singleton
|
702
|
-
attached_ancestor =
|
719
|
+
attached_ancestor = self[name]&.first #: as !nil
|
703
720
|
|
704
721
|
singleton = Entry::SingletonClass.new(
|
705
722
|
[full_singleton_name],
|
@@ -732,7 +749,8 @@ module RubyIndexer
|
|
732
749
|
name_parts = name.split("::")
|
733
750
|
|
734
751
|
if name_parts.last&.start_with?("<Class:")
|
735
|
-
attached_name =
|
752
|
+
attached_name = name_parts[0..-2] #: as !nil
|
753
|
+
.join("::")
|
736
754
|
linearized_ancestors_of(attached_name)
|
737
755
|
else
|
738
756
|
linearized_ancestors_of(name)
|
@@ -755,7 +773,8 @@ module RubyIndexer
|
|
755
773
|
resolved_modules = resolve(operation.module_name, nesting)
|
756
774
|
next unless resolved_modules
|
757
775
|
|
758
|
-
module_name =
|
776
|
+
module_name = resolved_modules.first #: as !nil
|
777
|
+
.name
|
759
778
|
|
760
779
|
# Then we grab any hooks registered for that module
|
761
780
|
hooks = @included_hooks[module_name]
|
@@ -778,7 +797,8 @@ module RubyIndexer
|
|
778
797
|
resolved_module = resolve(operation.module_name, nesting)
|
779
798
|
next unless resolved_module
|
780
799
|
|
781
|
-
module_fully_qualified_name =
|
800
|
+
module_fully_qualified_name = resolved_module.first #: as !nil
|
801
|
+
.name
|
782
802
|
|
783
803
|
case operation
|
784
804
|
when Entry::Prepend
|
@@ -790,20 +810,20 @@ module RubyIndexer
|
|
790
810
|
# When there are duplicate prepended modules, we have to insert the new prepends after the existing ones. For
|
791
811
|
# example, if the current ancestors are `["A", "Foo"]` and we try to prepend `["A", "B"]`, then `"B"` has to
|
792
812
|
# be inserted after `"A`
|
793
|
-
|
813
|
+
prepended_ancestors = ancestors[0...main_namespace_index] #: as !nil
|
814
|
+
uniq_prepends = linearized_prepends - prepended_ancestors
|
794
815
|
insert_position = linearized_prepends.length - uniq_prepends.length
|
795
816
|
|
796
|
-
|
797
|
-
insert_position,
|
798
|
-
*(linearized_prepends - T.must(ancestors[0...main_namespace_index])),
|
799
|
-
)
|
817
|
+
ancestors #: as untyped
|
818
|
+
.insert(insert_position, *uniq_prepends)
|
800
819
|
|
801
820
|
main_namespace_index += linearized_prepends.length
|
802
821
|
when Entry::Include
|
803
822
|
# When including a module, Ruby will always prevent duplicate entries in case the module has already been
|
804
823
|
# prepended or included
|
805
824
|
linearized_includes = linearized_ancestors_of(module_fully_qualified_name)
|
806
|
-
|
825
|
+
ancestors #: as untyped
|
826
|
+
.insert(main_namespace_index + 1, *(linearized_includes - ancestors))
|
807
827
|
end
|
808
828
|
end
|
809
829
|
end
|
@@ -833,7 +853,7 @@ module RubyIndexer
|
|
833
853
|
if superclass
|
834
854
|
# If the user makes a mistake and creates a class that inherits from itself, this method would throw a stack
|
835
855
|
# error. We need to ensure that this isn't the case
|
836
|
-
parent_class =
|
856
|
+
parent_class = superclass.parent_class #: as !nil
|
837
857
|
|
838
858
|
resolved_parent_class = resolve(parent_class, nesting)
|
839
859
|
parent_class_name = resolved_parent_class&.first&.name
|
@@ -888,11 +908,12 @@ module RubyIndexer
|
|
888
908
|
target = resolve(entry.target, entry.nesting, seen_names)
|
889
909
|
return entry unless target
|
890
910
|
|
891
|
-
target_name =
|
911
|
+
target_name = target.first #: as !nil
|
912
|
+
.name
|
892
913
|
resolved_alias = Entry::ConstantAlias.new(target_name, entry)
|
893
914
|
|
894
915
|
# Replace the UnresolvedAlias by a resolved one so that we don't have to do this again later
|
895
|
-
original_entries =
|
916
|
+
original_entries = @entries[alias_name] #: as !nil
|
896
917
|
original_entries.delete(entry)
|
897
918
|
original_entries << resolved_alias
|
898
919
|
|
@@ -904,7 +925,8 @@ module RubyIndexer
|
|
904
925
|
#: (String name, Array[String] nesting, Array[String] seen_names) -> Array[(Entry::Namespace | Entry::ConstantAlias | Entry::UnresolvedConstantAlias)]?
|
905
926
|
def lookup_enclosing_scopes(name, nesting, seen_names)
|
906
927
|
nesting.length.downto(1) do |i|
|
907
|
-
namespace =
|
928
|
+
namespace = nesting[0...i] #: as !nil
|
929
|
+
.join("::")
|
908
930
|
|
909
931
|
# If we find an entry with `full_name` directly, then we can already return it, even if it contains aliases -
|
910
932
|
# because the user might be trying to jump to the alias definition.
|
@@ -928,7 +950,9 @@ module RubyIndexer
|
|
928
950
|
namespace_entries = resolve(nesting_parts.join("::"), [], seen_names)
|
929
951
|
return unless namespace_entries
|
930
952
|
|
931
|
-
|
953
|
+
namespace_name = namespace_entries.first #: as !nil
|
954
|
+
.name
|
955
|
+
ancestors = nesting_parts.empty? ? [] : linearized_ancestors_of(namespace_name)
|
932
956
|
|
933
957
|
ancestors.each do |ancestor_name|
|
934
958
|
entries = direct_or_aliased_constant("#{ancestor_name}::#{constant_name}", seen_names)
|
@@ -952,7 +976,9 @@ module RubyIndexer
|
|
952
976
|
end
|
953
977
|
return [] unless namespace_entries
|
954
978
|
|
955
|
-
|
979
|
+
namespace_name = namespace_entries.first #: as !nil
|
980
|
+
.name
|
981
|
+
ancestors = linearized_ancestors_of(namespace_name)
|
956
982
|
candidates = ancestors.flat_map do |ancestor_name|
|
957
983
|
@entries_tree.search("#{ancestor_name}::#{constant_name}")
|
958
984
|
end
|
@@ -960,7 +986,8 @@ module RubyIndexer
|
|
960
986
|
# For candidates with the same name, we must only show the first entry in the inheritance chain, since that's the
|
961
987
|
# one the user will be referring to in completion
|
962
988
|
completion_items = candidates.each_with_object({}) do |entries, hash|
|
963
|
-
*parts, short_name =
|
989
|
+
*parts, short_name = entries.first #: as !nil
|
990
|
+
.name.split("::")
|
964
991
|
namespace_name = parts.join("::")
|
965
992
|
ancestor_index = ancestors.index(namespace_name)
|
966
993
|
existing_entry, existing_entry_index = hash[short_name]
|
@@ -1027,8 +1054,11 @@ module RubyIndexer
|
|
1027
1054
|
target_method_entries = resolve_method(entry.old_name, receiver_name, seen_names)
|
1028
1055
|
return entry unless target_method_entries
|
1029
1056
|
|
1030
|
-
resolved_alias = Entry::MethodAlias.new(
|
1031
|
-
|
1057
|
+
resolved_alias = Entry::MethodAlias.new(
|
1058
|
+
target_method_entries.first, #: as !nil
|
1059
|
+
entry,
|
1060
|
+
)
|
1061
|
+
original_entries = @entries[new_name] #: as !nil
|
1032
1062
|
original_entries.delete(entry)
|
1033
1063
|
original_entries << resolved_alias
|
1034
1064
|
resolved_alias
|
@@ -78,7 +78,7 @@ module RubyIndexer
|
|
78
78
|
return unless node
|
79
79
|
|
80
80
|
# Remove the node from the tree and then go up the parents to remove any of them with empty children
|
81
|
-
parent =
|
81
|
+
parent = node.parent #: Node[Value]?
|
82
82
|
|
83
83
|
while parent
|
84
84
|
parent.children.delete(node.key)
|
@@ -138,10 +138,11 @@ module RubyIndexer
|
|
138
138
|
#: -> Array[Value]
|
139
139
|
def collect
|
140
140
|
result = []
|
141
|
-
|
141
|
+
stack = [self]
|
142
142
|
|
143
|
-
|
144
|
-
result.
|
143
|
+
while (node = stack.pop)
|
144
|
+
result << node.value if node.leaf
|
145
|
+
stack.concat(node.children.values)
|
145
146
|
end
|
146
147
|
|
147
148
|
result
|
@@ -282,7 +282,11 @@ module RubyIndexer
|
|
282
282
|
#: (Prism::CallNode node) -> void
|
283
283
|
def on_call_node_enter(node)
|
284
284
|
if @target.is_a?(MethodTarget) && (name = node.name.to_s) == @target.method_name
|
285
|
-
@references << Reference.new(
|
285
|
+
@references << Reference.new(
|
286
|
+
name,
|
287
|
+
node.message_loc, #: as !nil
|
288
|
+
declaration: false,
|
289
|
+
)
|
286
290
|
end
|
287
291
|
end
|
288
292
|
|
@@ -14,8 +14,8 @@ module RubyIndexer
|
|
14
14
|
|
15
15
|
assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")
|
16
16
|
|
17
|
-
entry =
|
18
|
-
owner =
|
17
|
+
entry = @index["@@bar"]&.first #: as Entry::ClassVariable
|
18
|
+
owner = entry.owner #: as !nil
|
19
19
|
assert_instance_of(Entry::Class, owner)
|
20
20
|
assert_equal("Foo", owner.name)
|
21
21
|
end
|
@@ -50,13 +50,13 @@ module RubyIndexer
|
|
50
50
|
assert_entry("@@foo", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")
|
51
51
|
assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-9:1-14")
|
52
52
|
|
53
|
-
entry =
|
54
|
-
owner =
|
53
|
+
entry = @index["@@foo"]&.first #: as Entry::ClassVariable
|
54
|
+
owner = entry.owner #: as !nil
|
55
55
|
assert_instance_of(Entry::Class, owner)
|
56
56
|
assert_equal("Foo", owner.name)
|
57
57
|
|
58
|
-
entry =
|
59
|
-
owner =
|
58
|
+
entry = @index["@@bar"]&.first #: as Entry::ClassVariable
|
59
|
+
owner = entry.owner #: as !nil
|
60
60
|
assert_instance_of(Entry::Class, owner)
|
61
61
|
assert_equal("Foo", owner.name)
|
62
62
|
end
|
@@ -83,10 +83,10 @@ module RubyIndexer
|
|
83
83
|
|
84
84
|
def test_top_level_class_variable
|
85
85
|
index(<<~RUBY)
|
86
|
-
|
86
|
+
@@foo = 123
|
87
87
|
RUBY
|
88
88
|
|
89
|
-
entry =
|
89
|
+
entry = @index["@@foo"]&.first #: as Entry::ClassVariable
|
90
90
|
assert_nil(entry.owner)
|
91
91
|
end
|
92
92
|
|
@@ -99,8 +99,8 @@ module RubyIndexer
|
|
99
99
|
end
|
100
100
|
RUBY
|
101
101
|
|
102
|
-
entry =
|
103
|
-
owner =
|
102
|
+
entry = @index["@@bar"]&.first #: as Entry::ClassVariable
|
103
|
+
owner = entry.owner #: as !nil
|
104
104
|
assert_instance_of(Entry::Class, owner)
|
105
105
|
assert_equal("Foo", owner.name)
|
106
106
|
end
|
@@ -114,8 +114,8 @@ module RubyIndexer
|
|
114
114
|
end
|
115
115
|
RUBY
|
116
116
|
|
117
|
-
entry =
|
118
|
-
owner =
|
117
|
+
entry = @index["@@bar"]&.first #: as Entry::ClassVariable
|
118
|
+
owner = entry.owner #: as !nil
|
119
119
|
assert_instance_of(Entry::Class, owner)
|
120
120
|
assert_equal("Foo", owner.name)
|
121
121
|
end
|
@@ -131,8 +131,8 @@ module RubyIndexer
|
|
131
131
|
end
|
132
132
|
RUBY
|
133
133
|
|
134
|
-
entry =
|
135
|
-
owner =
|
134
|
+
entry = @index["@@bar"]&.first #: as Entry::ClassVariable
|
135
|
+
owner = entry.owner #: as !nil
|
136
136
|
assert_instance_of(Entry::Class, owner)
|
137
137
|
assert_equal("Foo", owner.name)
|
138
138
|
end
|