ruby-lsp 0.23.14 → 0.23.16
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 +2 -2
- 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 +60 -30
- 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/document.rb +6 -1
- 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 +8 -8
- data/lib/ruby_lsp/requests/code_action_resolve.rb +14 -15
- 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/selection_ranges.rb +1 -1
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +4 -4
- data/lib/ruby_lsp/requests/show_syntax_tree.rb +2 -2
- 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 +5 -3
- 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/ruby_document.rb +2 -2
- data/lib/ruby_lsp/scripts/compose_bundle.rb +6 -4
- data/lib/ruby_lsp/server.rb +14 -5
- data/lib/ruby_lsp/setup_bundler.rb +7 -3
- 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 +164 -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
- data/lib/ruby_lsp/utils.rb +12 -2
- 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
| @@ -47,9 +47,9 @@ module RubyIndexer | |
| 47 47 |  | 
| 48 48 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 49 49 |  | 
| 50 | 
            -
                  entry =  | 
| 51 | 
            -
                  owner =  | 
| 52 | 
            -
                  assert_equal("Foo::<Class:Foo>", owner | 
| 50 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 51 | 
            +
                  owner = entry.owner
         | 
| 52 | 
            +
                  assert_equal("Foo::<Class:Foo>", owner&.name)
         | 
| 53 53 | 
             
                  assert_instance_of(Entry::SingletonClass, owner)
         | 
| 54 54 | 
             
                end
         | 
| 55 55 |  | 
| @@ -79,11 +79,11 @@ module RubyIndexer | |
| 79 79 | 
             
                    end
         | 
| 80 80 | 
             
                  RUBY
         | 
| 81 81 |  | 
| 82 | 
            -
                  assert_equal(2, @index["bar"] | 
| 83 | 
            -
                  first_entry =  | 
| 84 | 
            -
                  assert_equal("Foo::self::Bar", first_entry.owner | 
| 85 | 
            -
                  second_entry =  | 
| 86 | 
            -
                  assert_equal("Bar", second_entry.owner | 
| 82 | 
            +
                  assert_equal(2, @index["bar"]&.length)
         | 
| 83 | 
            +
                  first_entry = @index["bar"]&.first #: as Entry::Method
         | 
| 84 | 
            +
                  assert_equal("Foo::self::Bar", first_entry.owner&.name)
         | 
| 85 | 
            +
                  second_entry = @index["bar"]&.last #: as Entry::Method
         | 
| 86 | 
            +
                  assert_equal("Bar", second_entry.owner&.name)
         | 
| 87 87 | 
             
                end
         | 
| 88 88 |  | 
| 89 89 | 
             
                def test_visibility_tracking
         | 
| @@ -135,19 +135,19 @@ module RubyIndexer | |
| 135 135 | 
             
                  RUBY
         | 
| 136 136 |  | 
| 137 137 | 
             
                  ["foo", "bar"].each do |keyword|
         | 
| 138 | 
            -
                    entries =  | 
| 138 | 
            +
                    entries = @index[keyword] #: as Array[Entry::Method]
         | 
| 139 139 | 
             
                    # should receive two entries because module_function creates a singleton method
         | 
| 140 140 | 
             
                    # for the Test module and a private method for classes include the Test module
         | 
| 141 141 | 
             
                    assert_equal(entries.size, 2)
         | 
| 142 142 | 
             
                    first_entry, second_entry = *entries
         | 
| 143 143 | 
             
                    # The first entry points to the location of the module_function call
         | 
| 144 | 
            -
                    assert_equal("Test", first_entry | 
| 145 | 
            -
                    assert_instance_of(Entry::Module, first_entry | 
| 144 | 
            +
                    assert_equal("Test", first_entry&.owner&.name)
         | 
| 145 | 
            +
                    assert_instance_of(Entry::Module, first_entry&.owner)
         | 
| 146 146 | 
             
                    assert_predicate(first_entry, :private?)
         | 
| 147 147 | 
             
                    # The second entry points to the public singleton method
         | 
| 148 | 
            -
                    assert_equal("Test::<Class:Test>", second_entry | 
| 149 | 
            -
                    assert_instance_of(Entry::SingletonClass, second_entry | 
| 150 | 
            -
                    assert_equal(Entry::Visibility::PUBLIC, second_entry | 
| 148 | 
            +
                    assert_equal("Test::<Class:Test>", second_entry&.owner&.name)
         | 
| 149 | 
            +
                    assert_instance_of(Entry::SingletonClass, second_entry&.owner)
         | 
| 150 | 
            +
                    assert_equal(Entry::Visibility::PUBLIC, second_entry&.visibility)
         | 
| 151 151 | 
             
                  end
         | 
| 152 152 | 
             
                end
         | 
| 153 153 |  | 
| @@ -168,13 +168,13 @@ module RubyIndexer | |
| 168 168 | 
             
                  RUBY
         | 
| 169 169 |  | 
| 170 170 | 
             
                  ["foo", "bar"].each do |keyword|
         | 
| 171 | 
            -
                    entries =  | 
| 171 | 
            +
                    entries = @index[keyword] #: as Array[Entry::Method]
         | 
| 172 172 | 
             
                    assert_equal(1, entries.size)
         | 
| 173 173 | 
             
                    entry = entries.first
         | 
| 174 174 | 
             
                    assert_predicate(entry, :private?)
         | 
| 175 175 | 
             
                  end
         | 
| 176 176 |  | 
| 177 | 
            -
                  entries =  | 
| 177 | 
            +
                  entries = @index["baz"] #: as Array[Entry::Method]
         | 
| 178 178 | 
             
                  assert_equal(1, entries.size)
         | 
| 179 179 | 
             
                  entry = entries.first
         | 
| 180 180 | 
             
                  assert_predicate(entry, :public?)
         | 
| @@ -197,13 +197,13 @@ module RubyIndexer | |
| 197 197 | 
             
                  RUBY
         | 
| 198 198 |  | 
| 199 199 | 
             
                  ["foo", "bar"].each do |keyword|
         | 
| 200 | 
            -
                    entries =  | 
| 200 | 
            +
                    entries = @index[keyword] #: as Array[Entry::Method]
         | 
| 201 201 | 
             
                    assert_equal(1, entries.size)
         | 
| 202 202 | 
             
                    entry = entries.first
         | 
| 203 203 | 
             
                    assert_predicate(entry, :private?)
         | 
| 204 204 | 
             
                  end
         | 
| 205 205 |  | 
| 206 | 
            -
                  entries =  | 
| 206 | 
            +
                  entries = @index["baz"] #: as Array[Entry::Method]
         | 
| 207 207 | 
             
                  assert_equal(1, entries.size)
         | 
| 208 208 | 
             
                  entry = entries.first
         | 
| 209 209 | 
             
                  assert_predicate(entry, :public?)
         | 
| @@ -220,12 +220,12 @@ module RubyIndexer | |
| 220 220 | 
             
                    end
         | 
| 221 221 | 
             
                  RUBY
         | 
| 222 222 |  | 
| 223 | 
            -
                  entries =  | 
| 223 | 
            +
                  entries = @index["foo"] #: as Array[Entry::Method]
         | 
| 224 224 | 
             
                  assert_equal(1, entries.size)
         | 
| 225 225 | 
             
                  entry = entries.first
         | 
| 226 226 | 
             
                  assert_predicate(entry, :private?)
         | 
| 227 227 |  | 
| 228 | 
            -
                  entries =  | 
| 228 | 
            +
                  entries = @index["bar"] #: as Array[Entry::Method]
         | 
| 229 229 | 
             
                  assert_equal(1, entries.size)
         | 
| 230 230 | 
             
                  entry = entries.first
         | 
| 231 231 | 
             
                  assert_predicate(entry, :public?)
         | 
| @@ -251,17 +251,17 @@ module RubyIndexer | |
| 251 251 | 
             
                    end
         | 
| 252 252 | 
             
                  RUBY
         | 
| 253 253 |  | 
| 254 | 
            -
                   | 
| 255 | 
            -
                  assert_equal("Documentation for Foo",  | 
| 254 | 
            +
                  foo = @index["Foo"]&.first #: as !nil
         | 
| 255 | 
            +
                  assert_equal("Documentation for Foo", foo.comments)
         | 
| 256 256 |  | 
| 257 | 
            -
                   | 
| 258 | 
            -
                  assert_equal("####################\nDocumentation for bar\n####################\n",  | 
| 257 | 
            +
                  bar = @index["bar"]&.first #: as !nil
         | 
| 258 | 
            +
                  assert_equal("####################\nDocumentation for bar\n####################\n", bar.comments)
         | 
| 259 259 |  | 
| 260 | 
            -
                   | 
| 261 | 
            -
                  assert_equal("Documentation for baz",  | 
| 260 | 
            +
                  baz = @index["baz"]&.first #: as !nil
         | 
| 261 | 
            +
                  assert_equal("Documentation for baz", baz.comments)
         | 
| 262 262 |  | 
| 263 | 
            -
                   | 
| 264 | 
            -
                  assert_empty( | 
| 263 | 
            +
                  ban = @index["ban"]&.first #: as !nil
         | 
| 264 | 
            +
                  assert_empty(ban.comments)
         | 
| 265 265 | 
             
                end
         | 
| 266 266 |  | 
| 267 267 | 
             
                def test_method_with_parameters
         | 
| @@ -273,11 +273,11 @@ module RubyIndexer | |
| 273 273 | 
             
                  RUBY
         | 
| 274 274 |  | 
| 275 275 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 276 | 
            -
                  entry =  | 
| 277 | 
            -
                  parameters = entry.signatures.first | 
| 276 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 277 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 278 278 | 
             
                  assert_equal(1, parameters.length)
         | 
| 279 279 | 
             
                  parameter = parameters.first
         | 
| 280 | 
            -
                  assert_equal(:a, parameter | 
| 280 | 
            +
                  assert_equal(:a, parameter&.name)
         | 
| 281 281 | 
             
                  assert_instance_of(Entry::RequiredParameter, parameter)
         | 
| 282 282 | 
             
                end
         | 
| 283 283 |  | 
| @@ -290,11 +290,11 @@ module RubyIndexer | |
| 290 290 | 
             
                  RUBY
         | 
| 291 291 |  | 
| 292 292 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 293 | 
            -
                  entry =  | 
| 294 | 
            -
                  parameters = entry.signatures.first | 
| 293 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 294 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 295 295 | 
             
                  assert_equal(1, parameters.length)
         | 
| 296 296 | 
             
                  parameter = parameters.first
         | 
| 297 | 
            -
                  assert_equal(:"(a, (b, ))", parameter | 
| 297 | 
            +
                  assert_equal(:"(a, (b, ))", parameter&.name)
         | 
| 298 298 | 
             
                  assert_instance_of(Entry::RequiredParameter, parameter)
         | 
| 299 299 | 
             
                end
         | 
| 300 300 |  | 
| @@ -307,11 +307,11 @@ module RubyIndexer | |
| 307 307 | 
             
                  RUBY
         | 
| 308 308 |  | 
| 309 309 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 310 | 
            -
                  entry =  | 
| 311 | 
            -
                  parameters = entry.signatures.first | 
| 310 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 311 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 312 312 | 
             
                  assert_equal(1, parameters.length)
         | 
| 313 313 | 
             
                  parameter = parameters.first
         | 
| 314 | 
            -
                  assert_equal(:a, parameter | 
| 314 | 
            +
                  assert_equal(:a, parameter&.name)
         | 
| 315 315 | 
             
                  assert_instance_of(Entry::OptionalParameter, parameter)
         | 
| 316 316 | 
             
                end
         | 
| 317 317 |  | 
| @@ -324,15 +324,15 @@ module RubyIndexer | |
| 324 324 | 
             
                  RUBY
         | 
| 325 325 |  | 
| 326 326 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 327 | 
            -
                  entry =  | 
| 328 | 
            -
                  parameters = entry.signatures.first | 
| 327 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 328 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 329 329 | 
             
                  assert_equal(2, parameters.length)
         | 
| 330 330 | 
             
                  a, b = parameters
         | 
| 331 331 |  | 
| 332 | 
            -
                  assert_equal(:a, a | 
| 332 | 
            +
                  assert_equal(:a, a&.name)
         | 
| 333 333 | 
             
                  assert_instance_of(Entry::KeywordParameter, a)
         | 
| 334 334 |  | 
| 335 | 
            -
                  assert_equal(:b, b | 
| 335 | 
            +
                  assert_equal(:b, b&.name)
         | 
| 336 336 | 
             
                  assert_instance_of(Entry::OptionalKeywordParameter, b)
         | 
| 337 337 | 
             
                end
         | 
| 338 338 |  | 
| @@ -345,15 +345,15 @@ module RubyIndexer | |
| 345 345 | 
             
                  RUBY
         | 
| 346 346 |  | 
| 347 347 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 348 | 
            -
                  entry =  | 
| 349 | 
            -
                  parameters = entry.signatures.first | 
| 348 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 349 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 350 350 | 
             
                  assert_equal(2, parameters.length)
         | 
| 351 351 | 
             
                  a, b = parameters
         | 
| 352 352 |  | 
| 353 | 
            -
                  assert_equal(:a, a | 
| 353 | 
            +
                  assert_equal(:a, a&.name)
         | 
| 354 354 | 
             
                  assert_instance_of(Entry::RestParameter, a)
         | 
| 355 355 |  | 
| 356 | 
            -
                  assert_equal(:b, b | 
| 356 | 
            +
                  assert_equal(:b, b&.name)
         | 
| 357 357 | 
             
                  assert_instance_of(Entry::KeywordRestParameter, b)
         | 
| 358 358 | 
             
                end
         | 
| 359 359 |  | 
| @@ -371,34 +371,34 @@ module RubyIndexer | |
| 371 371 | 
             
                  RUBY
         | 
| 372 372 |  | 
| 373 373 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 374 | 
            -
                  entry =  | 
| 375 | 
            -
                  parameters = entry.signatures.first | 
| 374 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 375 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 376 376 | 
             
                  assert_equal(2, parameters.length)
         | 
| 377 377 | 
             
                  a, b = parameters
         | 
| 378 378 |  | 
| 379 | 
            -
                  assert_equal(:a, a | 
| 379 | 
            +
                  assert_equal(:a, a&.name)
         | 
| 380 380 | 
             
                  assert_instance_of(Entry::RestParameter, a)
         | 
| 381 381 |  | 
| 382 | 
            -
                  assert_equal(:b, b | 
| 382 | 
            +
                  assert_equal(:b, b&.name)
         | 
| 383 383 | 
             
                  assert_instance_of(Entry::RequiredParameter, b)
         | 
| 384 384 |  | 
| 385 | 
            -
                  entry =  | 
| 386 | 
            -
                  parameters = entry.signatures.first | 
| 385 | 
            +
                  entry = @index["baz"]&.first #: as Entry::Method
         | 
| 386 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 387 387 | 
             
                  assert_equal(2, parameters.length)
         | 
| 388 388 | 
             
                  a, b = parameters
         | 
| 389 389 |  | 
| 390 | 
            -
                  assert_equal(:a, a | 
| 390 | 
            +
                  assert_equal(:a, a&.name)
         | 
| 391 391 | 
             
                  assert_instance_of(Entry::KeywordRestParameter, a)
         | 
| 392 392 |  | 
| 393 | 
            -
                  assert_equal(:b, b | 
| 393 | 
            +
                  assert_equal(:b, b&.name)
         | 
| 394 394 | 
             
                  assert_instance_of(Entry::RequiredParameter, b)
         | 
| 395 395 |  | 
| 396 | 
            -
                  entry =  | 
| 397 | 
            -
                  parameters = entry.signatures.first | 
| 396 | 
            +
                  entry = @index["qux"]&.first #: as Entry::Method
         | 
| 397 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 398 398 | 
             
                  assert_equal(2, parameters.length)
         | 
| 399 399 | 
             
                  _a, second = parameters
         | 
| 400 400 |  | 
| 401 | 
            -
                  assert_equal(:"(b, c)", second | 
| 401 | 
            +
                  assert_equal(:"(b, c)", second&.name)
         | 
| 402 402 | 
             
                  assert_instance_of(Entry::RequiredParameter, second)
         | 
| 403 403 | 
             
                end
         | 
| 404 404 |  | 
| @@ -411,10 +411,10 @@ module RubyIndexer | |
| 411 411 | 
             
                  RUBY
         | 
| 412 412 |  | 
| 413 413 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 414 | 
            -
                  entry =  | 
| 415 | 
            -
                  parameters = entry.signatures.first | 
| 414 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 415 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 416 416 | 
             
                  assert_equal(1, parameters.length)
         | 
| 417 | 
            -
                  param = parameters.first
         | 
| 417 | 
            +
                  param = parameters.first #: as Entry::Parameter
         | 
| 418 418 |  | 
| 419 419 | 
             
                  assert_equal(:"(a, *b)", param.name)
         | 
| 420 420 | 
             
                  assert_instance_of(Entry::RequiredParameter, param)
         | 
| @@ -431,17 +431,17 @@ module RubyIndexer | |
| 431 431 | 
             
                    end
         | 
| 432 432 | 
             
                  RUBY
         | 
| 433 433 |  | 
| 434 | 
            -
                  entry =  | 
| 435 | 
            -
                  parameters = entry.signatures.first | 
| 436 | 
            -
                  param = parameters.first
         | 
| 434 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 435 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 436 | 
            +
                  param = parameters.first #: as Entry::Parameter
         | 
| 437 437 | 
             
                  assert_equal(:block, param.name)
         | 
| 438 438 | 
             
                  assert_instance_of(Entry::BlockParameter, param)
         | 
| 439 439 |  | 
| 440 | 
            -
                  entry =  | 
| 441 | 
            -
                  parameters = entry.signatures.first | 
| 440 | 
            +
                  entry = @index["baz"]&.first #: as Entry::Method
         | 
| 441 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 442 442 | 
             
                  assert_equal(1, parameters.length)
         | 
| 443 443 |  | 
| 444 | 
            -
                  param = parameters.first
         | 
| 444 | 
            +
                  param = parameters.first #: as Entry::Parameter
         | 
| 445 445 | 
             
                  assert_equal(Entry::BlockParameter::DEFAULT_NAME, param.name)
         | 
| 446 446 | 
             
                  assert_instance_of(Entry::BlockParameter, param)
         | 
| 447 447 | 
             
                end
         | 
| @@ -455,15 +455,15 @@ module RubyIndexer | |
| 455 455 | 
             
                  RUBY
         | 
| 456 456 |  | 
| 457 457 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 458 | 
            -
                  entry =  | 
| 459 | 
            -
                  parameters = entry.signatures.first | 
| 458 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 459 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 460 460 | 
             
                  assert_equal(2, parameters.length)
         | 
| 461 461 | 
             
                  first, second = parameters
         | 
| 462 462 |  | 
| 463 | 
            -
                  assert_equal(Entry::RestParameter::DEFAULT_NAME, first | 
| 463 | 
            +
                  assert_equal(Entry::RestParameter::DEFAULT_NAME, first&.name)
         | 
| 464 464 | 
             
                  assert_instance_of(Entry::RestParameter, first)
         | 
| 465 465 |  | 
| 466 | 
            -
                  assert_equal(Entry::KeywordRestParameter::DEFAULT_NAME, second | 
| 466 | 
            +
                  assert_equal(Entry::KeywordRestParameter::DEFAULT_NAME, second&.name)
         | 
| 467 467 | 
             
                  assert_instance_of(Entry::KeywordRestParameter, second)
         | 
| 468 468 | 
             
                end
         | 
| 469 469 |  | 
| @@ -476,8 +476,8 @@ module RubyIndexer | |
| 476 476 | 
             
                  RUBY
         | 
| 477 477 |  | 
| 478 478 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:2-5")
         | 
| 479 | 
            -
                  entry =  | 
| 480 | 
            -
                  parameters = entry.signatures.first | 
| 479 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 480 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 481 481 | 
             
                  assert_empty(parameters)
         | 
| 482 482 | 
             
                end
         | 
| 483 483 |  | 
| @@ -492,17 +492,17 @@ module RubyIndexer | |
| 492 492 | 
             
                    end
         | 
| 493 493 | 
             
                  RUBY
         | 
| 494 494 |  | 
| 495 | 
            -
                  entry =  | 
| 495 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 496 496 | 
             
                  assert_instance_of(Entry::Method, entry, "Expected `bar` to be indexed")
         | 
| 497 497 |  | 
| 498 | 
            -
                  parameters = entry.signatures.first | 
| 498 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 499 499 | 
             
                  assert_equal(1, parameters.length)
         | 
| 500 500 | 
             
                  assert_instance_of(Entry::ForwardingParameter, parameters.first)
         | 
| 501 501 |  | 
| 502 | 
            -
                  entry =  | 
| 502 | 
            +
                  entry = @index["baz"]&.first #: as Entry::Method
         | 
| 503 503 | 
             
                  assert_instance_of(Entry::Method, entry, "Expected `baz` to be indexed")
         | 
| 504 504 |  | 
| 505 | 
            -
                  parameters = entry.signatures.first | 
| 505 | 
            +
                  parameters = entry.signatures.first&.parameters #: as Array[Entry::Parameter]
         | 
| 506 506 | 
             
                  assert_equal(2, parameters.length)
         | 
| 507 507 | 
             
                  assert_instance_of(Entry::RequiredParameter, parameters[0])
         | 
| 508 508 | 
             
                  assert_instance_of(Entry::ForwardingParameter, parameters[1])
         | 
| @@ -516,8 +516,8 @@ module RubyIndexer | |
| 516 516 | 
             
                    end
         | 
| 517 517 | 
             
                  RUBY
         | 
| 518 518 |  | 
| 519 | 
            -
                  entry =  | 
| 520 | 
            -
                  owner_name =  | 
| 519 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 520 | 
            +
                  owner_name = entry.owner&.name
         | 
| 521 521 |  | 
| 522 522 | 
             
                  assert_equal("Foo", owner_name)
         | 
| 523 523 | 
             
                end
         | 
| @@ -533,9 +533,9 @@ module RubyIndexer | |
| 533 533 | 
             
                  RUBY
         | 
| 534 534 |  | 
| 535 535 | 
             
                  assert_entry("bar", Entry::Accessor, "/fake/path/foo.rb:2-15:2-18")
         | 
| 536 | 
            -
                  assert_equal("Hello there", @index["bar"] | 
| 536 | 
            +
                  assert_equal("Hello there", @index["bar"]&.first&.comments)
         | 
| 537 537 | 
             
                  assert_entry("other", Entry::Accessor, "/fake/path/foo.rb:2-21:2-26")
         | 
| 538 | 
            -
                  assert_equal("Hello there", @index["other"] | 
| 538 | 
            +
                  assert_equal("Hello there", @index["other"]&.first&.comments)
         | 
| 539 539 | 
             
                  assert_entry("baz=", Entry::Accessor, "/fake/path/foo.rb:3-15:3-18")
         | 
| 540 540 | 
             
                  assert_entry("qux", Entry::Accessor, "/fake/path/foo.rb:4-17:4-20")
         | 
| 541 541 | 
             
                  assert_entry("qux=", Entry::Accessor, "/fake/path/foo.rb:4-17:4-20")
         | 
| @@ -565,14 +565,14 @@ module RubyIndexer | |
| 565 565 | 
             
                    end
         | 
| 566 566 | 
             
                  RUBY
         | 
| 567 567 |  | 
| 568 | 
            -
                  entry =  | 
| 569 | 
            -
                  assert_equal("Foo",  | 
| 568 | 
            +
                  entry = @index["first_method"]&.first #: as Entry::Method
         | 
| 569 | 
            +
                  assert_equal("Foo", entry.owner&.name)
         | 
| 570 570 |  | 
| 571 | 
            -
                  entry =  | 
| 572 | 
            -
                  assert_equal("Foo::Bar",  | 
| 571 | 
            +
                  entry = @index["second_method"]&.first #: as Entry::Method
         | 
| 572 | 
            +
                  assert_equal("Foo::Bar", entry.owner&.name)
         | 
| 573 573 |  | 
| 574 | 
            -
                  entry =  | 
| 575 | 
            -
                  assert_equal("Foo",  | 
| 574 | 
            +
                  entry = @index["third_method"]&.first #: as Entry::Method
         | 
| 575 | 
            +
                  assert_equal("Foo", entry.owner&.name)
         | 
| 576 576 | 
             
                end
         | 
| 577 577 |  | 
| 578 578 | 
             
                def test_keeps_track_of_aliases
         | 
| @@ -609,15 +609,15 @@ module RubyIndexer | |
| 609 609 | 
             
                  assert_entry("bar", Entry::Method, "/fake/path/foo.rb:1-2:1-19")
         | 
| 610 610 | 
             
                  assert_entry("baz", Entry::Method, "/fake/path/foo.rb:4-4:4-16")
         | 
| 611 611 |  | 
| 612 | 
            -
                   | 
| 613 | 
            -
                   | 
| 612 | 
            +
                  bar = @index["bar"]&.first #: as Entry::Method
         | 
| 613 | 
            +
                  baz = @index["baz"]&.first #: as Entry::Method
         | 
| 614 614 |  | 
| 615 | 
            -
                  assert_instance_of(Entry::SingletonClass,  | 
| 616 | 
            -
                  assert_instance_of(Entry::SingletonClass,  | 
| 615 | 
            +
                  assert_instance_of(Entry::SingletonClass, bar.owner)
         | 
| 616 | 
            +
                  assert_instance_of(Entry::SingletonClass, baz.owner)
         | 
| 617 617 |  | 
| 618 618 | 
             
                  # Regardless of whether the method was added through `self.something` or `class << self`, the owner object must be
         | 
| 619 619 | 
             
                  # the exact same
         | 
| 620 | 
            -
                  assert_same( | 
| 620 | 
            +
                  assert_same(bar.owner, baz.owner)
         | 
| 621 621 | 
             
                end
         | 
| 622 622 |  | 
| 623 623 | 
             
                def test_name_location_points_to_method_identifier_location
         | 
| @@ -630,7 +630,7 @@ module RubyIndexer | |
| 630 630 | 
             
                    end
         | 
| 631 631 | 
             
                  RUBY
         | 
| 632 632 |  | 
| 633 | 
            -
                  entry =  | 
| 633 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 634 634 | 
             
                  refute_equal(entry.location, entry.name_location)
         | 
| 635 635 |  | 
| 636 636 | 
             
                  name_location = entry.name_location
         | 
| @@ -648,7 +648,7 @@ module RubyIndexer | |
| 648 648 | 
             
                    end
         | 
| 649 649 | 
             
                  RUBY
         | 
| 650 650 |  | 
| 651 | 
            -
                  entry =  | 
| 651 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 652 652 |  | 
| 653 653 | 
             
                  # Matching calls
         | 
| 654 654 | 
             
                  assert_signature_matches(entry, "bar()")
         | 
| @@ -682,7 +682,7 @@ module RubyIndexer | |
| 682 682 | 
             
                    end
         | 
| 683 683 | 
             
                  RUBY
         | 
| 684 684 |  | 
| 685 | 
            -
                  entry =  | 
| 685 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 686 686 |  | 
| 687 687 | 
             
                  # All calls match a forwarding parameter
         | 
| 688 688 | 
             
                  assert_signature_matches(entry, "bar(1)")
         | 
| @@ -708,7 +708,7 @@ module RubyIndexer | |
| 708 708 | 
             
                    end
         | 
| 709 709 | 
             
                  RUBY
         | 
| 710 710 |  | 
| 711 | 
            -
                  entry =  | 
| 711 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 712 712 |  | 
| 713 713 | 
             
                  # All calls with at least one positional argument match
         | 
| 714 714 | 
             
                  assert_signature_matches(entry, "bar(1)")
         | 
| @@ -734,7 +734,7 @@ module RubyIndexer | |
| 734 734 | 
             
                    end
         | 
| 735 735 | 
             
                  RUBY
         | 
| 736 736 |  | 
| 737 | 
            -
                  entry =  | 
| 737 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 738 738 |  | 
| 739 739 | 
             
                  # All calls with at least one positional argument match
         | 
| 740 740 | 
             
                  assert_signature_matches(entry, "bar()")
         | 
| @@ -762,7 +762,7 @@ module RubyIndexer | |
| 762 762 | 
             
                    end
         | 
| 763 763 | 
             
                  RUBY
         | 
| 764 764 |  | 
| 765 | 
            -
                  entry =  | 
| 765 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 766 766 |  | 
| 767 767 | 
             
                  # All calls with at least one positional argument match
         | 
| 768 768 | 
             
                  assert_signature_matches(entry, "bar(1)")
         | 
| @@ -789,7 +789,7 @@ module RubyIndexer | |
| 789 789 | 
             
                    end
         | 
| 790 790 | 
             
                  RUBY
         | 
| 791 791 |  | 
| 792 | 
            -
                  entry =  | 
| 792 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 793 793 |  | 
| 794 794 | 
             
                  assert_signature_matches(entry, "bar(...)")
         | 
| 795 795 | 
             
                  assert_signature_matches(entry, "bar()")
         | 
| @@ -817,7 +817,7 @@ module RubyIndexer | |
| 817 817 | 
             
                    end
         | 
| 818 818 | 
             
                  RUBY
         | 
| 819 819 |  | 
| 820 | 
            -
                  entry =  | 
| 820 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 821 821 |  | 
| 822 822 | 
             
                  assert_signature_matches(entry, "bar(...)")
         | 
| 823 823 | 
             
                  assert_signature_matches(entry, "bar()")
         | 
| @@ -841,10 +841,10 @@ module RubyIndexer | |
| 841 841 | 
             
                    end
         | 
| 842 842 | 
             
                  RUBY
         | 
| 843 843 |  | 
| 844 | 
            -
                  entry =  | 
| 844 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 845 845 | 
             
                  assert_signature_matches(entry, "bar(a: 1)")
         | 
| 846 846 |  | 
| 847 | 
            -
                  entry =  | 
| 847 | 
            +
                  entry = @index["baz"]&.first #: as Entry::Method
         | 
| 848 848 | 
             
                  assert_signature_matches(entry, "baz(1)")
         | 
| 849 849 | 
             
                end
         | 
| 850 850 |  | 
| @@ -864,27 +864,27 @@ module RubyIndexer | |
| 864 864 | 
             
                    end
         | 
| 865 865 | 
             
                  RUBY
         | 
| 866 866 |  | 
| 867 | 
            -
                  entry =  | 
| 867 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 868 868 | 
             
                  assert_predicate(entry, :public?)
         | 
| 869 | 
            -
                  assert_equal("Foo",  | 
| 869 | 
            +
                  assert_equal("Foo", entry.owner&.name)
         | 
| 870 870 |  | 
| 871 | 
            -
                  instance_baz, singleton_baz =  | 
| 871 | 
            +
                  instance_baz, singleton_baz = @index["baz"] #: as Array[Entry::Method]
         | 
| 872 872 | 
             
                  assert_predicate(instance_baz, :private?)
         | 
| 873 | 
            -
                  assert_equal("Foo",  | 
| 873 | 
            +
                  assert_equal("Foo", instance_baz&.owner&.name)
         | 
| 874 874 |  | 
| 875 875 | 
             
                  assert_predicate(singleton_baz, :public?)
         | 
| 876 | 
            -
                  assert_equal("Foo::<Class:Foo>",  | 
| 876 | 
            +
                  assert_equal("Foo::<Class:Foo>", singleton_baz&.owner&.name)
         | 
| 877 877 |  | 
| 878 878 | 
             
                  # After invoking `public`, the state of `module_function` is reset
         | 
| 879 | 
            -
                  instance_qux, singleton_qux =  | 
| 879 | 
            +
                  instance_qux, singleton_qux = @index["qux"] #: as Array[Entry::Method]
         | 
| 880 880 | 
             
                  assert_nil(singleton_qux)
         | 
| 881 881 | 
             
                  assert_predicate(instance_qux, :public?)
         | 
| 882 | 
            -
                  assert_equal("Foo",  | 
| 882 | 
            +
                  assert_equal("Foo", instance_baz&.owner&.name)
         | 
| 883 883 |  | 
| 884 884 | 
             
                  # Attributes are not turned into class methods, they do become private
         | 
| 885 | 
            -
                  instance_attribute, singleton_attribute = @index["attribute"]
         | 
| 885 | 
            +
                  instance_attribute, singleton_attribute = @index["attribute"] #: as Array[Entry::Method]
         | 
| 886 886 | 
             
                  assert_nil(singleton_attribute)
         | 
| 887 | 
            -
                  assert_equal("Foo",  | 
| 887 | 
            +
                  assert_equal("Foo", instance_attribute&.owner&.name)
         | 
| 888 888 | 
             
                  assert_predicate(instance_attribute, :private?)
         | 
| 889 889 | 
             
                end
         | 
| 890 890 |  | 
| @@ -900,13 +900,13 @@ module RubyIndexer | |
| 900 900 | 
             
                    end
         | 
| 901 901 | 
             
                  RUBY
         | 
| 902 902 |  | 
| 903 | 
            -
                  entry =  | 
| 903 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 904 904 | 
             
                  assert_predicate(entry, :public?)
         | 
| 905 | 
            -
                  assert_equal("Foo",  | 
| 905 | 
            +
                  assert_equal("Foo", entry.owner&.name)
         | 
| 906 906 |  | 
| 907 | 
            -
                  entry =  | 
| 907 | 
            +
                  entry = @index["baz"]&.first #: as Entry::Method
         | 
| 908 908 | 
             
                  assert_predicate(entry, :public?)
         | 
| 909 | 
            -
                  assert_equal("Foo",  | 
| 909 | 
            +
                  assert_equal("Foo", entry.owner&.name)
         | 
| 910 910 | 
             
                end
         | 
| 911 911 |  | 
| 912 912 | 
             
                def test_making_several_class_methods_private
         | 
| @@ -940,13 +940,13 @@ module RubyIndexer | |
| 940 940 | 
             
                    end
         | 
| 941 941 | 
             
                  RUBY
         | 
| 942 942 |  | 
| 943 | 
            -
                  entry =  | 
| 943 | 
            +
                  entry = @index["bar"]&.first #: as Entry::Method
         | 
| 944 944 | 
             
                  assert_predicate(entry, :private?)
         | 
| 945 945 |  | 
| 946 | 
            -
                  entry =  | 
| 946 | 
            +
                  entry = @index["baz"]&.first #: as Entry::Method
         | 
| 947 947 | 
             
                  assert_predicate(entry, :protected?)
         | 
| 948 948 |  | 
| 949 | 
            -
                  entry =  | 
| 949 | 
            +
                  entry = @index["qux"]&.first #: as Entry::Method
         | 
| 950 950 | 
             
                  assert_predicate(entry, :public?)
         | 
| 951 951 | 
             
                end
         | 
| 952 952 |  | 
| @@ -954,14 +954,14 @@ module RubyIndexer | |
| 954 954 |  | 
| 955 955 | 
             
                #: (Entry::Method entry, String call_string) -> void
         | 
| 956 956 | 
             
                def assert_signature_matches(entry, call_string)
         | 
| 957 | 
            -
                  sig =  | 
| 957 | 
            +
                  sig = entry.signatures.first #: as !nil
         | 
| 958 958 | 
             
                  arguments = parse_prism_args(call_string)
         | 
| 959 959 | 
             
                  assert(sig.matches?(arguments), "Expected #{call_string} to match #{entry.name}#{entry.decorated_parameters}")
         | 
| 960 960 | 
             
                end
         | 
| 961 961 |  | 
| 962 962 | 
             
                #: (Entry::Method entry, String call_string) -> void
         | 
| 963 963 | 
             
                def refute_signature_matches(entry, call_string)
         | 
| 964 | 
            -
                  sig =  | 
| 964 | 
            +
                  sig = entry.signatures.first #: as !nil
         | 
| 965 965 | 
             
                  arguments = parse_prism_args(call_string)
         | 
| 966 966 | 
             
                  refute(sig.matches?(arguments), "Expected #{call_string} to not match #{entry.name}#{entry.decorated_parameters}")
         | 
| 967 967 | 
             
                end
         | 
| @@ -25,10 +25,10 @@ module RubyIndexer | |
| 25 25 | 
             
                  tree = PrefixTree[String].new
         | 
| 26 26 | 
             
                  ["foo", "bar", "baz"].each { |item| tree.insert(item, item) }
         | 
| 27 27 |  | 
| 28 | 
            -
                  assert_equal([" | 
| 29 | 
            -
                  assert_equal([" | 
| 28 | 
            +
                  assert_equal(["baz", "bar", "foo"], tree.search(""))
         | 
| 29 | 
            +
                  assert_equal(["baz", "bar"], tree.search("b"))
         | 
| 30 30 | 
             
                  assert_equal(["foo"], tree.search("fo"))
         | 
| 31 | 
            -
                  assert_equal([" | 
| 31 | 
            +
                  assert_equal(["baz", "bar"], tree.search("ba"))
         | 
| 32 32 | 
             
                  assert_equal(["baz"], tree.search("baz"))
         | 
| 33 33 | 
             
                  assert_empty(tree.search("qux"))
         | 
| 34 34 | 
             
                end
         | 
| @@ -80,17 +80,17 @@ module RubyIndexer | |
| 80 80 |  | 
| 81 81 | 
             
                  assert_equal(
         | 
| 82 82 | 
             
                    [
         | 
| 83 | 
            -
                      "foo/bar/support/ | 
| 84 | 
            -
                      "foo/bar/support/ | 
| 85 | 
            -
                      "foo/bar/support/ | 
| 86 | 
            -
                      "foo/bar/support/ | 
| 83 | 
            +
                      "foo/bar/support/formatting",
         | 
| 84 | 
            +
                      "foo/bar/support/prefix",
         | 
| 85 | 
            +
                      "foo/bar/support/highlight",
         | 
| 86 | 
            +
                      "foo/bar/support/diagnostic",
         | 
| 87 | 
            +
                      "foo/bar/support/rails",
         | 
| 87 88 | 
             
                      "foo/bar/support/runner",
         | 
| 88 89 | 
             
                      "foo/bar/support/runner2",
         | 
| 89 | 
            -
                      "foo/bar/support/ | 
| 90 | 
            -
                      "foo/bar/support/ | 
| 91 | 
            -
                      "foo/bar/support/ | 
| 92 | 
            -
                      "foo/bar/support/ | 
| 93 | 
            -
                      "foo/bar/support/formatting",
         | 
| 90 | 
            +
                      "foo/bar/support/source",
         | 
| 91 | 
            +
                      "foo/bar/support/syntax",
         | 
| 92 | 
            +
                      "foo/bar/support/semantic",
         | 
| 93 | 
            +
                      "foo/bar/support/selection",
         | 
| 94 94 | 
             
                    ],
         | 
| 95 95 | 
             
                    tree.search("foo/bar/support"),
         | 
| 96 96 | 
             
                  )
         | 
| @@ -99,7 +99,7 @@ module RubyIndexer | |
| 99 99 | 
             
                def test_deletion
         | 
| 100 100 | 
             
                  tree = PrefixTree[String].new
         | 
| 101 101 | 
             
                  ["foo/bar", "foo/baz"].each { |item| tree.insert(item, item) }
         | 
| 102 | 
            -
                  assert_equal(["foo/ | 
| 102 | 
            +
                  assert_equal(["foo/baz", "foo/bar"], tree.search("foo"))
         | 
| 103 103 |  | 
| 104 104 | 
             
                  tree.delete("foo/bar")
         | 
| 105 105 | 
             
                  assert_empty(tree.search("foo/bar"))
         |