ruby-lsp 0.23.11 → 0.26.1
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/README.md +2 -2
- data/VERSION +1 -1
- data/exe/ruby-lsp +10 -4
- data/exe/ruby-lsp-check +0 -4
- data/exe/ruby-lsp-launcher +45 -22
- data/exe/ruby-lsp-test-exec +6 -0
- data/lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb +1 -2
- data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +3 -6
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +82 -116
- data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +140 -183
- data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +10 -14
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +107 -236
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +166 -281
- data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +23 -27
- data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +25 -57
- data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +58 -68
- data/lib/ruby_indexer/lib/ruby_indexer/uri.rb +17 -19
- data/lib/ruby_indexer/lib/ruby_indexer/visibility_scope.rb +7 -11
- 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 +49 -9
- 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 +185 -135
- data/lib/ruby_indexer/test/instance_variables_test.rb +61 -37
- data/lib/ruby_indexer/test/method_test.rb +166 -123
- data/lib/ruby_indexer/test/prefix_tree_test.rb +21 -21
- data/lib/ruby_indexer/test/rbs_indexer_test.rb +70 -75
- data/lib/ruby_indexer/test/reference_finder_test.rb +79 -14
- data/lib/ruby_indexer/test/test_case.rb +9 -3
- data/lib/ruby_indexer/test/uri_test.rb +15 -2
- data/lib/ruby_lsp/addon.rb +88 -86
- data/lib/ruby_lsp/base_server.rb +59 -54
- data/lib/ruby_lsp/client_capabilities.rb +16 -13
- data/lib/ruby_lsp/document.rb +205 -104
- data/lib/ruby_lsp/erb_document.rb +45 -47
- data/lib/ruby_lsp/global_state.rb +73 -57
- data/lib/ruby_lsp/internal.rb +8 -3
- data/lib/ruby_lsp/listeners/code_lens.rb +82 -89
- data/lib/ruby_lsp/listeners/completion.rb +81 -76
- data/lib/ruby_lsp/listeners/definition.rb +44 -58
- data/lib/ruby_lsp/listeners/document_highlight.rb +123 -150
- data/lib/ruby_lsp/listeners/document_link.rb +50 -70
- data/lib/ruby_lsp/listeners/document_symbol.rb +38 -52
- data/lib/ruby_lsp/listeners/folding_ranges.rb +40 -43
- data/lib/ruby_lsp/listeners/hover.rb +107 -115
- data/lib/ruby_lsp/listeners/inlay_hints.rb +8 -13
- data/lib/ruby_lsp/listeners/semantic_highlighting.rb +54 -56
- data/lib/ruby_lsp/listeners/signature_help.rb +12 -27
- data/lib/ruby_lsp/listeners/spec_style.rb +214 -0
- data/lib/ruby_lsp/listeners/test_discovery.rb +92 -0
- data/lib/ruby_lsp/listeners/test_style.rb +205 -95
- data/lib/ruby_lsp/node_context.rb +12 -39
- data/lib/ruby_lsp/rbs_document.rb +10 -11
- data/lib/ruby_lsp/requests/code_action_resolve.rb +65 -61
- data/lib/ruby_lsp/requests/code_actions.rb +14 -26
- data/lib/ruby_lsp/requests/code_lens.rb +31 -21
- data/lib/ruby_lsp/requests/completion.rb +8 -21
- data/lib/ruby_lsp/requests/completion_resolve.rb +6 -6
- data/lib/ruby_lsp/requests/definition.rb +8 -20
- data/lib/ruby_lsp/requests/diagnostics.rb +8 -11
- data/lib/ruby_lsp/requests/discover_tests.rb +20 -7
- data/lib/ruby_lsp/requests/document_highlight.rb +6 -16
- data/lib/ruby_lsp/requests/document_link.rb +6 -17
- data/lib/ruby_lsp/requests/document_symbol.rb +5 -8
- data/lib/ruby_lsp/requests/folding_ranges.rb +7 -15
- data/lib/ruby_lsp/requests/formatting.rb +6 -9
- data/lib/ruby_lsp/requests/go_to_relevant_file.rb +85 -0
- data/lib/ruby_lsp/requests/hover.rb +12 -25
- data/lib/ruby_lsp/requests/inlay_hints.rb +8 -19
- data/lib/ruby_lsp/requests/on_type_formatting.rb +32 -40
- data/lib/ruby_lsp/requests/prepare_rename.rb +5 -10
- data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +5 -15
- data/lib/ruby_lsp/requests/range_formatting.rb +5 -6
- data/lib/ruby_lsp/requests/references.rb +17 -57
- data/lib/ruby_lsp/requests/rename.rb +27 -51
- data/lib/ruby_lsp/requests/request.rb +13 -25
- data/lib/ruby_lsp/requests/selection_ranges.rb +7 -7
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +16 -35
- data/lib/ruby_lsp/requests/show_syntax_tree.rb +7 -8
- data/lib/ruby_lsp/requests/signature_help.rb +9 -27
- data/lib/ruby_lsp/requests/support/annotation.rb +4 -10
- data/lib/ruby_lsp/requests/support/common.rb +16 -58
- data/lib/ruby_lsp/requests/support/formatter.rb +16 -15
- data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +27 -35
- data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +13 -16
- data/lib/ruby_lsp/requests/support/rubocop_runner.rb +34 -36
- data/lib/ruby_lsp/requests/support/selection_range.rb +1 -3
- data/lib/ruby_lsp/requests/support/sorbet.rb +29 -38
- data/lib/ruby_lsp/requests/support/source_uri.rb +20 -32
- data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +12 -19
- data/lib/ruby_lsp/requests/support/test_item.rb +16 -14
- data/lib/ruby_lsp/requests/type_hierarchy_supertypes.rb +5 -6
- data/lib/ruby_lsp/requests/workspace_symbol.rb +4 -4
- data/lib/ruby_lsp/response_builders/collection_response_builder.rb +6 -9
- data/lib/ruby_lsp/response_builders/document_symbol.rb +15 -21
- data/lib/ruby_lsp/response_builders/hover.rb +12 -18
- data/lib/ruby_lsp/response_builders/response_builder.rb +6 -7
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +62 -91
- data/lib/ruby_lsp/response_builders/signature_help.rb +6 -8
- data/lib/ruby_lsp/response_builders/test_collection.rb +35 -13
- data/lib/ruby_lsp/ruby_document.rb +32 -98
- data/lib/ruby_lsp/scope.rb +7 -11
- data/lib/ruby_lsp/scripts/compose_bundle.rb +6 -4
- data/lib/ruby_lsp/server.rb +303 -196
- data/lib/ruby_lsp/setup_bundler.rb +121 -82
- data/lib/ruby_lsp/static_docs.rb +12 -7
- data/lib/ruby_lsp/store.rb +21 -49
- data/lib/ruby_lsp/test_helper.rb +3 -16
- data/lib/ruby_lsp/test_reporters/lsp_reporter.rb +233 -0
- data/lib/ruby_lsp/test_reporters/minitest_reporter.rb +145 -0
- data/lib/ruby_lsp/test_reporters/test_unit_reporter.rb +92 -0
- data/lib/ruby_lsp/type_inferrer.rb +13 -14
- data/lib/ruby_lsp/utils.rb +138 -93
- data/static_docs/break.md +103 -0
- metadata +14 -20
- data/lib/ruby_lsp/load_sorbet.rb +0 -62
@@ -15,11 +15,11 @@ module RubyIndexer
|
|
15
15
|
end
|
16
16
|
RUBY
|
17
17
|
|
18
|
-
entries = @index["Foo"]
|
18
|
+
entries = @index["Foo"] #: as !nil
|
19
19
|
assert_equal(2, entries.length)
|
20
20
|
|
21
21
|
@index.delete(URI::Generic.from_path(path: "/fake/path/other_foo.rb"))
|
22
|
-
entries = @index["Foo"]
|
22
|
+
entries = @index["Foo"] #: as !nil
|
23
23
|
assert_equal(1, entries.length)
|
24
24
|
end
|
25
25
|
|
@@ -29,7 +29,7 @@ module RubyIndexer
|
|
29
29
|
end
|
30
30
|
RUBY
|
31
31
|
|
32
|
-
entries = @index["Foo"]
|
32
|
+
entries = @index["Foo"] #: as !nil
|
33
33
|
assert_equal(1, entries.length)
|
34
34
|
|
35
35
|
@index.delete(URI::Generic.from_path(path: "/fake/path/foo.rb"))
|
@@ -52,21 +52,21 @@ module RubyIndexer
|
|
52
52
|
end
|
53
53
|
RUBY
|
54
54
|
|
55
|
-
entries = @index.resolve("Something", ["Foo", "Baz"])
|
55
|
+
entries = @index.resolve("Something", ["Foo", "Baz"]) #: as !nil
|
56
56
|
refute_empty(entries)
|
57
|
-
assert_equal("Foo::Baz::Something", entries.first
|
57
|
+
assert_equal("Foo::Baz::Something", entries.first&.name)
|
58
58
|
|
59
|
-
entries = @index.resolve("Bar", ["Foo"])
|
59
|
+
entries = @index.resolve("Bar", ["Foo"]) #: as !nil
|
60
60
|
refute_empty(entries)
|
61
|
-
assert_equal("Foo::Bar", entries.first
|
61
|
+
assert_equal("Foo::Bar", entries.first&.name)
|
62
62
|
|
63
|
-
entries = @index.resolve("Bar", ["Foo", "Baz"])
|
63
|
+
entries = @index.resolve("Bar", ["Foo", "Baz"]) #: as !nil
|
64
64
|
refute_empty(entries)
|
65
|
-
assert_equal("Foo::Bar", entries.first
|
65
|
+
assert_equal("Foo::Bar", entries.first&.name)
|
66
66
|
|
67
|
-
entries = @index.resolve("Foo::Bar", ["Foo", "Baz"])
|
67
|
+
entries = @index.resolve("Foo::Bar", ["Foo", "Baz"]) #: as !nil
|
68
68
|
refute_empty(entries)
|
69
|
-
assert_equal("Foo::Bar", entries.first
|
69
|
+
assert_equal("Foo::Bar", entries.first&.name)
|
70
70
|
|
71
71
|
assert_nil(@index.resolve("DoesNotExist", ["Foo"]))
|
72
72
|
end
|
@@ -86,9 +86,9 @@ module RubyIndexer
|
|
86
86
|
end
|
87
87
|
RUBY
|
88
88
|
|
89
|
-
entries = @index["::Foo::Baz::Something"]
|
89
|
+
entries = @index["::Foo::Baz::Something"] #: as !nil
|
90
90
|
refute_empty(entries)
|
91
|
-
assert_equal("Foo::Baz::Something", entries.first
|
91
|
+
assert_equal("Foo::Baz::Something", entries.first&.name)
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_fuzzy_search
|
@@ -140,7 +140,7 @@ module RubyIndexer
|
|
140
140
|
end
|
141
141
|
RUBY
|
142
142
|
|
143
|
-
assert_equal(["path/
|
143
|
+
assert_equal(["path/other_foo", "path/foo"], @index.search_require_paths("path").map(&:require_path))
|
144
144
|
end
|
145
145
|
|
146
146
|
def test_searching_for_entries_based_on_prefix
|
@@ -157,10 +157,10 @@ module RubyIndexer
|
|
157
157
|
RUBY
|
158
158
|
|
159
159
|
results = @index.prefix_search("Foo", []).map { |entries| entries.map(&:name) }
|
160
|
-
assert_equal([["Foo::
|
160
|
+
assert_equal([["Foo::Bizt"], ["Foo::Bizw", "Foo::Bizw"]], results)
|
161
161
|
|
162
162
|
results = @index.prefix_search("Biz", ["Foo"]).map { |entries| entries.map(&:name) }
|
163
|
-
assert_equal([["Foo::
|
163
|
+
assert_equal([["Foo::Bizt"], ["Foo::Bizw", "Foo::Bizw"]], results)
|
164
164
|
end
|
165
165
|
|
166
166
|
def test_resolve_normalizes_top_level_names
|
@@ -172,15 +172,15 @@ module RubyIndexer
|
|
172
172
|
end
|
173
173
|
RUBY
|
174
174
|
|
175
|
-
entries = @index.resolve("::Foo::Bar", [])
|
175
|
+
entries = @index.resolve("::Foo::Bar", []) #: as !nil
|
176
176
|
refute_nil(entries)
|
177
177
|
|
178
|
-
assert_equal("Foo::Bar", entries.first
|
178
|
+
assert_equal("Foo::Bar", entries.first&.name)
|
179
179
|
|
180
|
-
entries = @index.resolve("::Bar", ["Foo"])
|
180
|
+
entries = @index.resolve("::Bar", ["Foo"]) #: as !nil
|
181
181
|
refute_nil(entries)
|
182
182
|
|
183
|
-
assert_equal("Bar", entries.first
|
183
|
+
assert_equal("Bar", entries.first&.name)
|
184
184
|
end
|
185
185
|
|
186
186
|
def test_resolving_aliases_to_non_existing_constants_with_conflicting_names
|
@@ -195,7 +195,7 @@ module RubyIndexer
|
|
195
195
|
end
|
196
196
|
RUBY
|
197
197
|
|
198
|
-
entry = @index.resolve("BAZ", ["Foo", "Bar"])
|
198
|
+
entry = @index.resolve("BAZ", ["Foo", "Bar"])&.first
|
199
199
|
refute_nil(entry)
|
200
200
|
|
201
201
|
assert_instance_of(Entry::UnresolvedConstantAlias, entry)
|
@@ -233,9 +233,10 @@ module RubyIndexer
|
|
233
233
|
end
|
234
234
|
RUBY
|
235
235
|
|
236
|
-
entries =
|
237
|
-
assert_equal("baz", entries.first
|
238
|
-
|
236
|
+
entries = @index.resolve_method("baz", "Foo::Bar") #: as !nil
|
237
|
+
assert_equal("baz", entries.first&.name)
|
238
|
+
owner = entries.first&.owner #: as !nil
|
239
|
+
assert_equal("Foo::Bar", owner.name)
|
239
240
|
end
|
240
241
|
|
241
242
|
def test_resolve_method_with_class_name_conflict
|
@@ -248,9 +249,10 @@ module RubyIndexer
|
|
248
249
|
end
|
249
250
|
RUBY
|
250
251
|
|
251
|
-
entries =
|
252
|
-
assert_equal("Array", entries.first
|
253
|
-
|
252
|
+
entries = @index.resolve_method("Array", "Foo") #: as !nil
|
253
|
+
assert_equal("Array", entries.first&.name)
|
254
|
+
owner = entries.first&.owner #: as !nil
|
255
|
+
assert_equal("Foo", owner.name)
|
254
256
|
end
|
255
257
|
|
256
258
|
def test_resolve_method_attribute
|
@@ -260,9 +262,10 @@ module RubyIndexer
|
|
260
262
|
end
|
261
263
|
RUBY
|
262
264
|
|
263
|
-
entries =
|
264
|
-
assert_equal("bar", entries.first
|
265
|
-
|
265
|
+
entries = @index.resolve_method("bar", "Foo") #: as !nil
|
266
|
+
assert_equal("bar", entries.first&.name)
|
267
|
+
owner = entries.first&.owner #: as !nil
|
268
|
+
assert_equal("Foo", owner.name)
|
266
269
|
end
|
267
270
|
|
268
271
|
def test_resolve_method_with_two_definitions
|
@@ -278,15 +281,17 @@ module RubyIndexer
|
|
278
281
|
end
|
279
282
|
RUBY
|
280
283
|
|
281
|
-
first_entry, second_entry =
|
284
|
+
first_entry, second_entry = @index.resolve_method("bar", "Foo") #: as !nil
|
282
285
|
|
283
|
-
assert_equal("bar", first_entry
|
284
|
-
|
285
|
-
|
286
|
+
assert_equal("bar", first_entry&.name)
|
287
|
+
owner = first_entry&.owner #: as !nil
|
288
|
+
assert_equal("Foo", owner.name)
|
289
|
+
assert_includes(first_entry&.comments, "Hello from first `bar`")
|
286
290
|
|
287
|
-
assert_equal("bar", second_entry
|
288
|
-
|
289
|
-
|
291
|
+
assert_equal("bar", second_entry&.name)
|
292
|
+
owner = second_entry&.owner #: as !nil
|
293
|
+
assert_equal("Foo", owner.name)
|
294
|
+
assert_includes(second_entry&.comments, "Hello from second `bar`")
|
290
295
|
end
|
291
296
|
|
292
297
|
def test_resolve_method_inherited_only
|
@@ -300,9 +305,8 @@ module RubyIndexer
|
|
300
305
|
end
|
301
306
|
RUBY
|
302
307
|
|
303
|
-
entry =
|
304
|
-
|
305
|
-
assert_equal("Bar", T.must(entry.owner).name)
|
308
|
+
entry = @index.resolve_method("baz", "Foo", inherited_only: true)&.first #: as !nil
|
309
|
+
assert_equal("Bar", entry.owner&.name)
|
306
310
|
end
|
307
311
|
|
308
312
|
def test_resolve_method_inherited_only_for_prepended_module
|
@@ -338,7 +342,7 @@ module RubyIndexer
|
|
338
342
|
entries = @index.prefix_search("qz")
|
339
343
|
refute_empty(entries)
|
340
344
|
|
341
|
-
entry =
|
345
|
+
entry = entries.first&.first #: as !nil
|
342
346
|
assert_equal("qzx", entry.name)
|
343
347
|
end
|
344
348
|
|
@@ -724,6 +728,30 @@ module RubyIndexer
|
|
724
728
|
assert_equal(["A", "ALIAS"], @index.linearized_ancestors_of("A"))
|
725
729
|
end
|
726
730
|
|
731
|
+
def test_linearizing_ancestors_for_classes_with_overridden_parents
|
732
|
+
index(<<~RUBY)
|
733
|
+
# Find the re-open of a class first, without specifying a parent
|
734
|
+
class Child
|
735
|
+
end
|
736
|
+
|
737
|
+
# Now, find the actual definition of the class, which includes a parent
|
738
|
+
class Parent; end
|
739
|
+
class Child < Parent
|
740
|
+
end
|
741
|
+
RUBY
|
742
|
+
|
743
|
+
assert_equal(
|
744
|
+
[
|
745
|
+
"Child",
|
746
|
+
"Parent",
|
747
|
+
"Object",
|
748
|
+
"Kernel",
|
749
|
+
"BasicObject",
|
750
|
+
],
|
751
|
+
@index.linearized_ancestors_of("Child"),
|
752
|
+
)
|
753
|
+
end
|
754
|
+
|
727
755
|
def test_resolving_an_inherited_method
|
728
756
|
index(<<~RUBY)
|
729
757
|
module Foo
|
@@ -739,13 +767,13 @@ module RubyIndexer
|
|
739
767
|
end
|
740
768
|
RUBY
|
741
769
|
|
742
|
-
entry =
|
770
|
+
entry = @index.resolve_method("baz", "Wow")&.first #: as !nil
|
743
771
|
assert_equal("baz", entry.name)
|
744
|
-
assert_equal("Foo",
|
772
|
+
assert_equal("Foo", entry.owner&.name)
|
745
773
|
|
746
|
-
entry =
|
774
|
+
entry = @index.resolve_method("qux", "Wow")&.first #: as !nil
|
747
775
|
assert_equal("qux", entry.name)
|
748
|
-
assert_equal("Bar",
|
776
|
+
assert_equal("Bar", entry.owner&.name)
|
749
777
|
end
|
750
778
|
|
751
779
|
def test_resolving_an_inherited_method_lands_on_first_match
|
@@ -765,12 +793,12 @@ module RubyIndexer
|
|
765
793
|
end
|
766
794
|
RUBY
|
767
795
|
|
768
|
-
entries =
|
796
|
+
entries = @index.resolve_method("qux", "Wow") #: as !nil
|
769
797
|
assert_equal(1, entries.length)
|
770
798
|
|
771
|
-
entry =
|
799
|
+
entry = entries.first #: as !nil
|
772
800
|
assert_equal("qux", entry.name)
|
773
|
-
assert_equal("Foo",
|
801
|
+
assert_equal("Foo", entry.owner&.name)
|
774
802
|
end
|
775
803
|
|
776
804
|
def test_handle_change_clears_ancestor_cache_if_tree_changed
|
@@ -800,7 +828,8 @@ module RubyIndexer
|
|
800
828
|
end
|
801
829
|
RUBY
|
802
830
|
|
803
|
-
|
831
|
+
path = uri.full_path #: as !nil
|
832
|
+
@index.handle_change(uri, File.read(path))
|
804
833
|
assert_empty(@index.instance_variable_get(:@ancestors))
|
805
834
|
assert_equal(["Bar", "Object", "Kernel", "BasicObject"], @index.linearized_ancestors_of("Bar"))
|
806
835
|
end
|
@@ -837,7 +866,8 @@ module RubyIndexer
|
|
837
866
|
end
|
838
867
|
RUBY
|
839
868
|
|
840
|
-
|
869
|
+
path = uri.full_path #: as !nil
|
870
|
+
@index.handle_change(uri, File.read(path))
|
841
871
|
refute_empty(@index.instance_variable_get(:@ancestors))
|
842
872
|
assert_equal(["Bar", "Foo", "Object", "Kernel", "BasicObject"], @index.linearized_ancestors_of("Bar"))
|
843
873
|
end
|
@@ -870,7 +900,8 @@ module RubyIndexer
|
|
870
900
|
end
|
871
901
|
RUBY
|
872
902
|
|
873
|
-
|
903
|
+
path = uri.full_path #: as !nil
|
904
|
+
@index.handle_change(uri, File.read(path))
|
874
905
|
assert_empty(@index.instance_variable_get(:@ancestors))
|
875
906
|
assert_equal(["Bar", "Object", "Kernel", "BasicObject"], @index.linearized_ancestors_of("Bar"))
|
876
907
|
end
|
@@ -904,7 +935,7 @@ module RubyIndexer
|
|
904
935
|
CONST = 4
|
905
936
|
RUBY
|
906
937
|
|
907
|
-
entry =
|
938
|
+
entry = @index.resolve("CONST", ["Namespace", "Bar"])&.first #: as !nil
|
908
939
|
assert_equal(14, entry.location.start_line)
|
909
940
|
end
|
910
941
|
|
@@ -925,10 +956,10 @@ module RubyIndexer
|
|
925
956
|
end
|
926
957
|
RUBY
|
927
958
|
|
928
|
-
entry =
|
959
|
+
entry = @index.resolve("Foo::CONST::TARGET", [])&.first #: as !nil
|
929
960
|
assert_equal(2, entry.location.start_line)
|
930
961
|
|
931
|
-
entry =
|
962
|
+
entry = @index.resolve("Namespace::Bar::CONST::TARGET", [])&.first #: as !nil
|
932
963
|
assert_equal(2, entry.location.start_line)
|
933
964
|
end
|
934
965
|
|
@@ -946,10 +977,10 @@ module RubyIndexer
|
|
946
977
|
end
|
947
978
|
RUBY
|
948
979
|
|
949
|
-
entry =
|
980
|
+
entry = @index.resolve("CONST", ["Namespace", "Child"])&.first #: as !nil
|
950
981
|
assert_equal(2, entry.location.start_line)
|
951
982
|
|
952
|
-
entry =
|
983
|
+
entry = @index.resolve("Namespace::Child::CONST", [])&.first #: as !nil
|
953
984
|
assert_equal(5, entry.location.start_line)
|
954
985
|
end
|
955
986
|
|
@@ -975,13 +1006,13 @@ module RubyIndexer
|
|
975
1006
|
end
|
976
1007
|
RUBY
|
977
1008
|
|
978
|
-
entry =
|
1009
|
+
entry = @index.resolve("CONST", ["Foo"])&.first #: as !nil
|
979
1010
|
assert_equal(6, entry.location.start_line)
|
980
1011
|
|
981
|
-
entry =
|
1012
|
+
entry = @index.resolve("Foo::CONST", [])&.first #: as !nil
|
982
1013
|
assert_equal(6, entry.location.start_line)
|
983
1014
|
|
984
|
-
entry =
|
1015
|
+
entry = @index.resolve("Bar::CONST", [])&.first #: as !nil
|
985
1016
|
assert_equal(15, entry.location.start_line)
|
986
1017
|
end
|
987
1018
|
|
@@ -1005,7 +1036,7 @@ module RubyIndexer
|
|
1005
1036
|
end
|
1006
1037
|
RUBY
|
1007
1038
|
|
1008
|
-
entry =
|
1039
|
+
entry = @index.resolve("CONST", ["First", "Second"])&.first #: as !nil
|
1009
1040
|
assert_equal(6, entry.location.start_line)
|
1010
1041
|
end
|
1011
1042
|
|
@@ -1017,11 +1048,11 @@ module RubyIndexer
|
|
1017
1048
|
end
|
1018
1049
|
RUBY
|
1019
1050
|
|
1020
|
-
foo_entry =
|
1051
|
+
foo_entry = @index.resolve("FOO", ["Namespace"])&.first #: as !nil
|
1021
1052
|
assert_equal(2, foo_entry.location.start_line)
|
1022
1053
|
assert_instance_of(Entry::ConstantAlias, foo_entry)
|
1023
1054
|
|
1024
|
-
bar_entry =
|
1055
|
+
bar_entry = @index.resolve("BAR", ["Namespace"])&.first #: as !nil
|
1025
1056
|
assert_equal(3, bar_entry.location.start_line)
|
1026
1057
|
assert_instance_of(Entry::ConstantAlias, bar_entry)
|
1027
1058
|
end
|
@@ -1035,15 +1066,15 @@ module RubyIndexer
|
|
1035
1066
|
end
|
1036
1067
|
RUBY
|
1037
1068
|
|
1038
|
-
foo_entry =
|
1069
|
+
foo_entry = @index.resolve("FOO", ["Namespace"])&.first #: as !nil
|
1039
1070
|
assert_equal(2, foo_entry.location.start_line)
|
1040
1071
|
assert_instance_of(Entry::ConstantAlias, foo_entry)
|
1041
1072
|
|
1042
|
-
bar_entry =
|
1073
|
+
bar_entry = @index.resolve("BAR", ["Namespace"])&.first #: as !nil
|
1043
1074
|
assert_equal(3, bar_entry.location.start_line)
|
1044
1075
|
assert_instance_of(Entry::ConstantAlias, bar_entry)
|
1045
1076
|
|
1046
|
-
baz_entry =
|
1077
|
+
baz_entry = @index.resolve("BAZ", ["Namespace"])&.first #: as !nil
|
1047
1078
|
assert_equal(4, baz_entry.location.start_line)
|
1048
1079
|
assert_instance_of(Entry::ConstantAlias, baz_entry)
|
1049
1080
|
end
|
@@ -1065,7 +1096,7 @@ module RubyIndexer
|
|
1065
1096
|
end
|
1066
1097
|
RUBY
|
1067
1098
|
|
1068
|
-
entry =
|
1099
|
+
entry = @index.resolve("Other::ALIAS::CONST", ["Third"])&.first #: as !nil
|
1069
1100
|
assert_kind_of(Entry::Constant, entry)
|
1070
1101
|
assert_equal("Original::Something::CONST", entry.name)
|
1071
1102
|
end
|
@@ -1080,7 +1111,7 @@ module RubyIndexer
|
|
1080
1111
|
FOO::CONST
|
1081
1112
|
RUBY
|
1082
1113
|
|
1083
|
-
entry =
|
1114
|
+
entry = @index.resolve("FOO::CONST", [])&.first #: as !nil
|
1084
1115
|
assert_kind_of(Entry::Constant, entry)
|
1085
1116
|
assert_equal("Foo::CONST", entry.name)
|
1086
1117
|
end
|
@@ -1091,7 +1122,7 @@ module RubyIndexer
|
|
1091
1122
|
end
|
1092
1123
|
RUBY
|
1093
1124
|
|
1094
|
-
foo_entry =
|
1125
|
+
foo_entry = @index.resolve("Foo::Bar", [])&.first #: as !nil
|
1095
1126
|
assert_equal(1, foo_entry.location.start_line)
|
1096
1127
|
assert_instance_of(Entry::Class, foo_entry)
|
1097
1128
|
end
|
@@ -1117,7 +1148,7 @@ module RubyIndexer
|
|
1117
1148
|
end
|
1118
1149
|
RUBY
|
1119
1150
|
|
1120
|
-
foo_entry =
|
1151
|
+
foo_entry = @index.resolve("A::B::Foo::CONST", ["A", "B"])&.first #: as !nil
|
1121
1152
|
assert_equal(2, foo_entry.location.start_line)
|
1122
1153
|
end
|
1123
1154
|
|
@@ -1135,7 +1166,7 @@ module RubyIndexer
|
|
1135
1166
|
end
|
1136
1167
|
RUBY
|
1137
1168
|
|
1138
|
-
foo_entry =
|
1169
|
+
foo_entry = @index.resolve("Entry::CONST", ["Namespace", "Index"])&.first #: as !nil
|
1139
1170
|
assert_equal(3, foo_entry.location.start_line)
|
1140
1171
|
end
|
1141
1172
|
|
@@ -1154,7 +1185,7 @@ module RubyIndexer
|
|
1154
1185
|
end
|
1155
1186
|
RUBY
|
1156
1187
|
|
1157
|
-
foo_entry =
|
1188
|
+
foo_entry = @index.resolve("CONST", ["Namespace", "Index"])&.first #: as !nil
|
1158
1189
|
assert_equal(6, foo_entry.location.start_line)
|
1159
1190
|
end
|
1160
1191
|
|
@@ -1171,7 +1202,7 @@ module RubyIndexer
|
|
1171
1202
|
end
|
1172
1203
|
RUBY
|
1173
1204
|
|
1174
|
-
foo_entry =
|
1205
|
+
foo_entry = @index.resolve("CONST", ["Namespace", "Index"])&.first #: as !nil
|
1175
1206
|
assert_equal(1, foo_entry.location.start_line)
|
1176
1207
|
end
|
1177
1208
|
|
@@ -1190,9 +1221,9 @@ module RubyIndexer
|
|
1190
1221
|
end
|
1191
1222
|
RUBY
|
1192
1223
|
|
1193
|
-
entry =
|
1224
|
+
entry = @index.instance_variable_completion_candidates("@", "Bar").first #: as !nil
|
1194
1225
|
assert_equal("@bar", entry.name)
|
1195
|
-
assert_equal("Bar",
|
1226
|
+
assert_equal("Bar", entry.owner&.name)
|
1196
1227
|
end
|
1197
1228
|
|
1198
1229
|
def test_resolving_a_qualified_reference
|
@@ -1213,7 +1244,7 @@ module RubyIndexer
|
|
1213
1244
|
end
|
1214
1245
|
RUBY
|
1215
1246
|
|
1216
|
-
foo_entry =
|
1247
|
+
foo_entry = @index.resolve("Third::CONST", ["Foo"])&.first #: as !nil
|
1217
1248
|
assert_equal(9, foo_entry.location.start_line)
|
1218
1249
|
end
|
1219
1250
|
|
@@ -1226,9 +1257,9 @@ module RubyIndexer
|
|
1226
1257
|
class Object; end
|
1227
1258
|
RUBY
|
1228
1259
|
|
1229
|
-
entries = @index["Object"]
|
1260
|
+
entries = @index["Object"] #: as !nil
|
1230
1261
|
assert_equal(2, entries.length)
|
1231
|
-
reopened_entry = entries.last
|
1262
|
+
reopened_entry = entries.last #: as Entry::Class
|
1232
1263
|
assert_equal("::BasicObject", reopened_entry.parent_class)
|
1233
1264
|
assert_equal(["Object", "Kernel", "BasicObject"], @index.linearized_ancestors_of("Object"))
|
1234
1265
|
end
|
@@ -1238,9 +1269,9 @@ module RubyIndexer
|
|
1238
1269
|
class BasicObject; end
|
1239
1270
|
RUBY
|
1240
1271
|
|
1241
|
-
entries = @index["BasicObject"]
|
1272
|
+
entries = @index["BasicObject"] #: as !nil
|
1242
1273
|
assert_equal(2, entries.length)
|
1243
|
-
reopened_entry = entries.last
|
1274
|
+
reopened_entry = entries.last #: as Entry::Class
|
1244
1275
|
assert_nil(reopened_entry.parent_class)
|
1245
1276
|
assert_equal(["BasicObject"], @index.linearized_ancestors_of("BasicObject"))
|
1246
1277
|
end
|
@@ -1318,10 +1349,9 @@ module RubyIndexer
|
|
1318
1349
|
end
|
1319
1350
|
RUBY
|
1320
1351
|
|
1321
|
-
entry = @index.resolve_method("found_me!", "Foo::Bar::<Class:Bar>::Baz::<Class:Baz>")&.first
|
1352
|
+
entry = @index.resolve_method("found_me!", "Foo::Bar::<Class:Bar>::Baz::<Class:Baz>")&.first #: as !nil
|
1322
1353
|
refute_nil(entry)
|
1323
|
-
|
1324
|
-
assert_equal("found_me!", T.must(entry).name)
|
1354
|
+
assert_equal("found_me!", entry.name)
|
1325
1355
|
end
|
1326
1356
|
|
1327
1357
|
def test_resolving_constants_in_singleton_contexts
|
@@ -1344,9 +1374,9 @@ module RubyIndexer
|
|
1344
1374
|
end
|
1345
1375
|
RUBY
|
1346
1376
|
|
1347
|
-
entry = @index.resolve("CONST", ["Foo", "Bar", "<Class:Bar>", "Baz", "<Class:Baz>"])&.first
|
1377
|
+
entry = @index.resolve("CONST", ["Foo", "Bar", "<Class:Bar>", "Baz", "<Class:Baz>"])&.first #: as !nil
|
1348
1378
|
refute_nil(entry)
|
1349
|
-
assert_equal(9,
|
1379
|
+
assert_equal(9, entry.location.start_line)
|
1350
1380
|
end
|
1351
1381
|
|
1352
1382
|
def test_resolving_instance_variables_in_singleton_contexts
|
@@ -1366,17 +1396,17 @@ module RubyIndexer
|
|
1366
1396
|
end
|
1367
1397
|
RUBY
|
1368
1398
|
|
1369
|
-
entry = @index.resolve_instance_variable("@a", "Foo::Bar::<Class:Bar>")&.first
|
1399
|
+
entry = @index.resolve_instance_variable("@a", "Foo::Bar::<Class:Bar>")&.first #: as !nil
|
1370
1400
|
refute_nil(entry)
|
1371
|
-
assert_equal("@a",
|
1401
|
+
assert_equal("@a", entry.name)
|
1372
1402
|
|
1373
|
-
entry = @index.resolve_instance_variable("@b", "Foo::Bar::<Class:Bar>")&.first
|
1403
|
+
entry = @index.resolve_instance_variable("@b", "Foo::Bar::<Class:Bar>")&.first #: as !nil
|
1374
1404
|
refute_nil(entry)
|
1375
|
-
assert_equal("@b",
|
1405
|
+
assert_equal("@b", entry.name)
|
1376
1406
|
|
1377
|
-
entry = @index.resolve_instance_variable("@c", "Foo::Bar::<Class:Bar>::<Class:<Class:Bar>>")&.first
|
1407
|
+
entry = @index.resolve_instance_variable("@c", "Foo::Bar::<Class:Bar>::<Class:<Class:Bar>>")&.first #: as !nil
|
1378
1408
|
refute_nil(entry)
|
1379
|
-
assert_equal("@c",
|
1409
|
+
assert_equal("@c", entry.name)
|
1380
1410
|
end
|
1381
1411
|
|
1382
1412
|
def test_instance_variable_completion_in_singleton_contexts
|
@@ -1422,7 +1452,7 @@ module RubyIndexer
|
|
1422
1452
|
|
1423
1453
|
results = @index.fuzzy_search("Zwq")
|
1424
1454
|
assert_equal(1, results.length)
|
1425
|
-
assert_equal("Zwq", results.first
|
1455
|
+
assert_equal("Zwq", results.first&.name)
|
1426
1456
|
end
|
1427
1457
|
|
1428
1458
|
def test_resolving_method_aliases
|
@@ -1444,39 +1474,39 @@ module RubyIndexer
|
|
1444
1474
|
RUBY
|
1445
1475
|
|
1446
1476
|
# baz
|
1447
|
-
methods = @index.resolve_method("baz", "Bar")
|
1477
|
+
methods = @index.resolve_method("baz", "Bar") #: as !nil
|
1448
1478
|
refute_nil(methods)
|
1449
1479
|
|
1450
|
-
entry =
|
1480
|
+
entry = methods.first #: as Entry::MethodAlias
|
1451
1481
|
assert_kind_of(Entry::MethodAlias, entry)
|
1452
1482
|
assert_equal("bar", entry.target.name)
|
1453
|
-
assert_equal("Foo",
|
1483
|
+
assert_equal("Foo", entry.target.owner&.name)
|
1454
1484
|
|
1455
1485
|
# qux
|
1456
|
-
methods = @index.resolve_method("qux", "Bar")
|
1486
|
+
methods = @index.resolve_method("qux", "Bar") #: as !nil
|
1457
1487
|
refute_nil(methods)
|
1458
1488
|
|
1459
|
-
entry =
|
1489
|
+
entry = methods.first #: as Entry::MethodAlias
|
1460
1490
|
assert_kind_of(Entry::MethodAlias, entry)
|
1461
1491
|
assert_equal("hello", entry.target.name)
|
1462
|
-
assert_equal("Bar",
|
1492
|
+
assert_equal("Bar", entry.target.owner&.name)
|
1463
1493
|
|
1464
1494
|
# double
|
1465
|
-
methods = @index.resolve_method("double", "Bar")
|
1495
|
+
methods = @index.resolve_method("double", "Bar") #: as !nil
|
1466
1496
|
refute_nil(methods)
|
1467
1497
|
|
1468
|
-
entry =
|
1498
|
+
entry = methods.first #: as Entry::MethodAlias
|
1469
1499
|
assert_kind_of(Entry::MethodAlias, entry)
|
1470
1500
|
|
1471
|
-
target = entry.target
|
1501
|
+
target = entry.target #: as Entry::MethodAlias
|
1472
1502
|
assert_equal("double_alias", target.name)
|
1473
1503
|
assert_kind_of(Entry::MethodAlias, target)
|
1474
|
-
assert_equal("Foo",
|
1504
|
+
assert_equal("Foo", target.owner&.name)
|
1475
1505
|
|
1476
1506
|
final_target = target.target
|
1477
1507
|
assert_equal("bar", final_target.name)
|
1478
1508
|
assert_kind_of(Entry::Method, final_target)
|
1479
|
-
assert_equal("Foo",
|
1509
|
+
assert_equal("Foo", final_target.owner&.name)
|
1480
1510
|
end
|
1481
1511
|
|
1482
1512
|
def test_resolving_circular_method_aliases
|
@@ -1490,7 +1520,7 @@ module RubyIndexer
|
|
1490
1520
|
methods = @index.resolve_method("bar", "Foo")
|
1491
1521
|
assert_nil(methods)
|
1492
1522
|
|
1493
|
-
entry =
|
1523
|
+
entry = @index["bar"]&.first
|
1494
1524
|
assert_kind_of(Entry::UnresolvedMethodAlias, entry)
|
1495
1525
|
end
|
1496
1526
|
|
@@ -1505,7 +1535,7 @@ module RubyIndexer
|
|
1505
1535
|
methods = @index.resolve_method("bar", "Foo")
|
1506
1536
|
assert_nil(methods)
|
1507
1537
|
|
1508
|
-
entry =
|
1538
|
+
entry = @index["bar"]&.first
|
1509
1539
|
assert_kind_of(Entry::UnresolvedMethodAlias, entry)
|
1510
1540
|
end
|
1511
1541
|
|
@@ -1521,18 +1551,18 @@ module RubyIndexer
|
|
1521
1551
|
end
|
1522
1552
|
RUBY
|
1523
1553
|
|
1524
|
-
methods = @index.resolve_method("decorated_name", "Foo")
|
1554
|
+
methods = @index.resolve_method("decorated_name", "Foo") #: as !nil
|
1525
1555
|
refute_nil(methods)
|
1526
1556
|
|
1527
|
-
entry =
|
1557
|
+
entry = methods.first #: as Entry::MethodAlias
|
1528
1558
|
assert_kind_of(Entry::MethodAlias, entry)
|
1529
1559
|
|
1530
1560
|
target = entry.target
|
1531
1561
|
assert_equal("name", target.name)
|
1532
1562
|
assert_kind_of(Entry::Accessor, target)
|
1533
|
-
assert_equal("Foo",
|
1563
|
+
assert_equal("Foo", target.owner&.name)
|
1534
1564
|
|
1535
|
-
other_decorated_name =
|
1565
|
+
other_decorated_name = @index["decorated_name"]&.find { |e| e.is_a?(Entry::UnresolvedMethodAlias) }
|
1536
1566
|
assert_kind_of(Entry::UnresolvedMethodAlias, other_decorated_name)
|
1537
1567
|
end
|
1538
1568
|
|
@@ -1557,7 +1587,7 @@ module RubyIndexer
|
|
1557
1587
|
end
|
1558
1588
|
RUBY
|
1559
1589
|
|
1560
|
-
entry =
|
1590
|
+
entry = @index.first_unqualified_const("Bar")&.first #: as !nil
|
1561
1591
|
assert_equal("Foo::Bar", entry.name)
|
1562
1592
|
end
|
1563
1593
|
|
@@ -1574,7 +1604,7 @@ module RubyIndexer
|
|
1574
1604
|
end
|
1575
1605
|
RUBY
|
1576
1606
|
|
1577
|
-
entry =
|
1607
|
+
entry = @index.first_unqualified_const("Type")&.first #: as !nil
|
1578
1608
|
assert_equal("Namespace::Type", entry.name)
|
1579
1609
|
end
|
1580
1610
|
|
@@ -1591,7 +1621,7 @@ module RubyIndexer
|
|
1591
1621
|
|
1592
1622
|
entries = @index.method_completion_candidates("bar", "Baz")
|
1593
1623
|
assert_equal(["bar"], entries.map(&:name))
|
1594
|
-
assert_equal("Baz",
|
1624
|
+
assert_equal("Baz", entries.first&.owner&.name)
|
1595
1625
|
end
|
1596
1626
|
|
1597
1627
|
def test_completion_does_not_duplicate_methods_overridden_by_aliases
|
@@ -1607,7 +1637,7 @@ module RubyIndexer
|
|
1607
1637
|
|
1608
1638
|
entries = @index.method_completion_candidates("bar", "Baz")
|
1609
1639
|
assert_equal(["bar"], entries.map(&:name))
|
1610
|
-
assert_equal("Baz",
|
1640
|
+
assert_equal("Baz", entries.first&.owner&.name)
|
1611
1641
|
end
|
1612
1642
|
|
1613
1643
|
def test_decorated_parameters
|
@@ -1618,11 +1648,10 @@ module RubyIndexer
|
|
1618
1648
|
end
|
1619
1649
|
RUBY
|
1620
1650
|
|
1621
|
-
methods = @index.resolve_method("bar", "Foo")
|
1651
|
+
methods = @index.resolve_method("bar", "Foo") #: as !nil
|
1622
1652
|
refute_nil(methods)
|
1623
1653
|
|
1624
|
-
entry =
|
1625
|
-
|
1654
|
+
entry = methods.first #: as Entry::Method
|
1626
1655
|
assert_equal("(a, b = <default>, c: <default>)", entry.decorated_parameters)
|
1627
1656
|
end
|
1628
1657
|
|
@@ -1634,11 +1663,10 @@ module RubyIndexer
|
|
1634
1663
|
end
|
1635
1664
|
RUBY
|
1636
1665
|
|
1637
|
-
methods = @index.resolve_method("bar", "Foo")
|
1666
|
+
methods = @index.resolve_method("bar", "Foo") #: as !nil
|
1638
1667
|
refute_nil(methods)
|
1639
1668
|
|
1640
|
-
entry =
|
1641
|
-
|
1669
|
+
entry = methods.first #: as Entry::Method
|
1642
1670
|
assert_equal("()", entry.decorated_parameters)
|
1643
1671
|
end
|
1644
1672
|
|
@@ -1707,9 +1735,9 @@ module RubyIndexer
|
|
1707
1735
|
RUBY
|
1708
1736
|
|
1709
1737
|
["bar", "baz"].product(["Foo", "Foo::<Class:Foo>"]).each do |method, receiver|
|
1710
|
-
entry = @index.resolve_method(method, receiver)&.first
|
1738
|
+
entry = @index.resolve_method(method, receiver)&.first #: as !nil
|
1711
1739
|
refute_nil(entry)
|
1712
|
-
assert_equal(method,
|
1740
|
+
assert_equal(method, entry.name)
|
1713
1741
|
end
|
1714
1742
|
|
1715
1743
|
assert_equal(
|
@@ -1888,7 +1916,7 @@ module RubyIndexer
|
|
1888
1916
|
end
|
1889
1917
|
RUBY
|
1890
1918
|
|
1891
|
-
method = @index.resolve_method("==", "Foo")
|
1919
|
+
method = @index.resolve_method("==", "Foo")&.first #: as Entry::Method
|
1892
1920
|
assert_kind_of(Entry::Method, method)
|
1893
1921
|
assert_equal("==", method.name)
|
1894
1922
|
|
@@ -1906,13 +1934,13 @@ module RubyIndexer
|
|
1906
1934
|
end
|
1907
1935
|
RUBY
|
1908
1936
|
|
1909
|
-
entries = @index.entries_for("file:///fake/path/foo.rb", Entry)
|
1937
|
+
entries = @index.entries_for("file:///fake/path/foo.rb", Entry) #: as !nil
|
1910
1938
|
assert_equal(["Foo", "Bar", "my_def", "Bar::<Class:Bar>", "my_singleton_def"], entries.map(&:name))
|
1911
1939
|
|
1912
|
-
entries = @index.entries_for("file:///fake/path/foo.rb", RubyIndexer::Entry::Namespace)
|
1940
|
+
entries = @index.entries_for("file:///fake/path/foo.rb", RubyIndexer::Entry::Namespace) #: as !nil
|
1913
1941
|
assert_equal(["Foo", "Bar", "Bar::<Class:Bar>"], entries.map(&:name))
|
1914
1942
|
|
1915
|
-
entries = @index.entries_for("file:///fake/path/foo.rb")
|
1943
|
+
entries = @index.entries_for("file:///fake/path/foo.rb") #: as !nil
|
1916
1944
|
assert_equal(["Foo", "Bar", "my_def", "Bar::<Class:Bar>", "my_singleton_def"], entries.map(&:name))
|
1917
1945
|
end
|
1918
1946
|
|
@@ -1945,14 +1973,29 @@ module RubyIndexer
|
|
1945
1973
|
result = @index.constant_completion_candidates("X", ["Namespace", "Baz"])
|
1946
1974
|
|
1947
1975
|
result.each do |entries|
|
1948
|
-
name = entries.first
|
1976
|
+
name = entries.first&.name
|
1949
1977
|
assert(entries.all? { |e| e.name == name })
|
1950
1978
|
end
|
1951
1979
|
|
1952
|
-
assert_equal(["Namespace::XQRK", "Bar::XQRK", "XQRK"], result.map { |entries| entries.first
|
1980
|
+
assert_equal(["Namespace::XQRK", "Bar::XQRK", "XQRK"], result.map { |entries| entries.first&.name })
|
1953
1981
|
|
1954
1982
|
result = @index.constant_completion_candidates("::X", ["Namespace", "Baz"])
|
1955
|
-
assert_equal(["XQRK"], result.map { |entries| entries.first
|
1983
|
+
assert_equal(["XQRK"], result.map { |entries| entries.first&.name })
|
1984
|
+
end
|
1985
|
+
|
1986
|
+
def test_constant_completion_does_not_confuse_uppercase_methods
|
1987
|
+
index(<<~RUBY)
|
1988
|
+
class Foo
|
1989
|
+
def Qux
|
1990
|
+
end
|
1991
|
+
end
|
1992
|
+
RUBY
|
1993
|
+
|
1994
|
+
candidates = @index.constant_completion_candidates("Q", [])
|
1995
|
+
refute_includes(candidates.flat_map { |entries| entries.map(&:name) }, "Qux")
|
1996
|
+
|
1997
|
+
candidates = @index.constant_completion_candidates("Qux", [])
|
1998
|
+
assert_equal(0, candidates.length)
|
1956
1999
|
end
|
1957
2000
|
|
1958
2001
|
def test_constant_completion_candidates_for_empty_name
|
@@ -1967,7 +2010,7 @@ module RubyIndexer
|
|
1967
2010
|
RUBY
|
1968
2011
|
|
1969
2012
|
result = @index.constant_completion_candidates("Baz::", [])
|
1970
|
-
assert_includes(result.map { |entries| entries.first
|
2013
|
+
assert_includes(result.map { |entries| entries.first&.name }, "Foo::Bar")
|
1971
2014
|
end
|
1972
2015
|
|
1973
2016
|
def test_follow_alias_namespace
|
@@ -2025,7 +2068,7 @@ module RubyIndexer
|
|
2025
2068
|
end
|
2026
2069
|
RUBY
|
2027
2070
|
|
2028
|
-
entry = @index.resolve("Namespace::Foo::CONST", ["First", "Namespace", "Foo", "InnerNamespace"])&.first
|
2071
|
+
entry = @index.resolve("Namespace::Foo::CONST", ["First", "Namespace", "Foo", "InnerNamespace"])&.first #: as !nil
|
2029
2072
|
assert_equal("Parent::CONST", entry.name)
|
2030
2073
|
assert_instance_of(Entry::Constant, entry)
|
2031
2074
|
end
|
@@ -2093,7 +2136,7 @@ module RubyIndexer
|
|
2093
2136
|
end
|
2094
2137
|
RUBY
|
2095
2138
|
|
2096
|
-
entry = @index["Foo"]&.first
|
2139
|
+
entry = @index["Foo"]&.first #: as !nil
|
2097
2140
|
refute_nil(entry, "Expected indexer to be able to handle unsaved URIs")
|
2098
2141
|
assert_equal("untitled:Untitled-1", entry.uri.to_s)
|
2099
2142
|
assert_equal("Untitled-1", entry.file_name)
|
@@ -2105,7 +2148,7 @@ module RubyIndexer
|
|
2105
2148
|
end
|
2106
2149
|
RUBY
|
2107
2150
|
|
2108
|
-
entry = @index["Foo"]&.first
|
2151
|
+
entry = @index["Foo"]&.first #: as !nil
|
2109
2152
|
refute_nil(entry, "Expected indexer to be able to handle unsaved URIs")
|
2110
2153
|
assert_equal("I added this comment!", entry.comments)
|
2111
2154
|
end
|
@@ -2124,13 +2167,13 @@ module RubyIndexer
|
|
2124
2167
|
end
|
2125
2168
|
RUBY
|
2126
2169
|
|
2127
|
-
|
2170
|
+
adf, abc = @index.instance_variable_completion_candidates("@", "Child::<Class:Child>")
|
2128
2171
|
|
2129
2172
|
refute_nil(abc)
|
2130
2173
|
refute_nil(adf)
|
2131
2174
|
|
2132
|
-
assert_equal("@@abc", abc
|
2133
|
-
assert_equal("@@adf", adf
|
2175
|
+
assert_equal("@@abc", abc&.name)
|
2176
|
+
assert_equal("@@adf", adf&.name)
|
2134
2177
|
end
|
2135
2178
|
|
2136
2179
|
def test_class_variable_completion_from_singleton_context
|
@@ -2156,7 +2199,7 @@ module RubyIndexer
|
|
2156
2199
|
end
|
2157
2200
|
RUBY
|
2158
2201
|
|
2159
|
-
candidates = @index.resolve_class_variable("@@hello", "Foo::<Class:Foo>")
|
2202
|
+
candidates = @index.resolve_class_variable("@@hello", "Foo::<Class:Foo>") #: as !nil
|
2160
2203
|
refute_empty(candidates)
|
2161
2204
|
|
2162
2205
|
assert_equal("@@hello", candidates.first&.name)
|
@@ -2181,6 +2224,13 @@ module RubyIndexer
|
|
2181
2224
|
|
2182
2225
|
node = Prism.parse("class Foo; end").value.statements.body.first.constant_path
|
2183
2226
|
assert_equal("Foo", Index.constant_name(node))
|
2227
|
+
|
2228
|
+
node = Prism.parse(<<~RUBY).value.statements.body.first.constant_path
|
2229
|
+
class class Foo
|
2230
|
+
end
|
2231
|
+
end
|
2232
|
+
RUBY
|
2233
|
+
assert_nil(Index.constant_name(node))
|
2184
2234
|
end
|
2185
2235
|
end
|
2186
2236
|
end
|