ruby-lsp 0.11.2 → 0.12.0
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 +2 -1
- data/exe/ruby-lsp-doctor +16 -0
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +5 -1
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +205 -0
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +23 -106
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +6 -6
- data/lib/ruby_indexer/lib/ruby_indexer/visitor.rb +101 -49
- data/lib/ruby_indexer/ruby_indexer.rb +1 -0
- data/lib/ruby_indexer/test/classes_and_modules_test.rb +49 -16
- data/lib/ruby_indexer/test/constant_test.rb +99 -36
- data/lib/ruby_indexer/test/index_test.rb +1 -1
- data/lib/ruby_indexer/test/method_test.rb +73 -0
- data/lib/ruby_indexer/test/test_case.rb +5 -1
- data/lib/ruby_lsp/addon.rb +8 -8
- data/lib/ruby_lsp/document.rb +14 -14
- data/lib/ruby_lsp/executor.rb +89 -53
- data/lib/ruby_lsp/internal.rb +7 -2
- data/lib/ruby_lsp/listener.rb +6 -6
- data/lib/ruby_lsp/requests/base_request.rb +1 -9
- data/lib/ruby_lsp/requests/code_action_resolve.rb +3 -3
- data/lib/ruby_lsp/requests/code_lens.rb +30 -30
- data/lib/ruby_lsp/requests/completion.rb +83 -32
- data/lib/ruby_lsp/requests/definition.rb +21 -15
- data/lib/ruby_lsp/requests/diagnostics.rb +1 -1
- data/lib/ruby_lsp/requests/document_highlight.rb +508 -31
- data/lib/ruby_lsp/requests/document_link.rb +24 -17
- data/lib/ruby_lsp/requests/document_symbol.rb +42 -42
- data/lib/ruby_lsp/requests/folding_ranges.rb +83 -77
- data/lib/ruby_lsp/requests/hover.rb +22 -17
- data/lib/ruby_lsp/requests/inlay_hints.rb +6 -6
- data/lib/ruby_lsp/requests/selection_ranges.rb +13 -105
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +92 -92
- data/lib/ruby_lsp/requests/support/annotation.rb +3 -3
- data/lib/ruby_lsp/requests/support/common.rb +5 -5
- data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +12 -0
- data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +10 -7
- data/lib/ruby_lsp/requests/support/sorbet.rb +28 -28
- data/lib/ruby_lsp/requests/workspace_symbol.rb +4 -4
- data/lib/ruby_lsp/requests.rb +0 -1
- data/lib/ruby_lsp/setup_bundler.rb +8 -5
- metadata +19 -17
- data/lib/ruby_lsp/event_emitter.rb +0 -351
- data/lib/ruby_lsp/requests/support/highlight_target.rb +0 -118
| @@ -10,39 +10,39 @@ module RubyLsp | |
| 10 10 |  | 
| 11 11 | 
             
                      ANNOTATIONS = T.let(
         | 
| 12 12 | 
             
                        {
         | 
| 13 | 
            -
                           | 
| 14 | 
            -
                           | 
| 15 | 
            -
                           | 
| 16 | 
            -
                           | 
| 17 | 
            -
                           | 
| 18 | 
            -
                           | 
| 19 | 
            -
                           | 
| 20 | 
            -
                           | 
| 21 | 
            -
                           | 
| 22 | 
            -
                           | 
| 23 | 
            -
                           | 
| 24 | 
            -
                           | 
| 25 | 
            -
                           | 
| 26 | 
            -
                           | 
| 27 | 
            -
                           | 
| 28 | 
            -
                           | 
| 29 | 
            -
                           | 
| 30 | 
            -
                           | 
| 31 | 
            -
                           | 
| 32 | 
            -
                           | 
| 33 | 
            -
                           | 
| 34 | 
            -
                           | 
| 35 | 
            -
                           | 
| 36 | 
            -
                           | 
| 37 | 
            -
                           | 
| 38 | 
            -
                           | 
| 13 | 
            +
                          abstract!: Annotation.new(arity: 0),
         | 
| 14 | 
            +
                          absurd: Annotation.new(arity: 1, receiver: true),
         | 
| 15 | 
            +
                          all: Annotation.new(arity: (2..), receiver: true),
         | 
| 16 | 
            +
                          any: Annotation.new(arity: (2..), receiver: true),
         | 
| 17 | 
            +
                          assert_type!: Annotation.new(arity: 2, receiver: true),
         | 
| 18 | 
            +
                          attached_class: Annotation.new(arity: 0, receiver: true),
         | 
| 19 | 
            +
                          bind: Annotation.new(arity: 2, receiver: true),
         | 
| 20 | 
            +
                          cast: Annotation.new(arity: 2, receiver: true),
         | 
| 21 | 
            +
                          class_of: Annotation.new(arity: 1, receiver: true),
         | 
| 22 | 
            +
                          enums: Annotation.new(arity: 0),
         | 
| 23 | 
            +
                          interface!: Annotation.new(arity: 0),
         | 
| 24 | 
            +
                          let: Annotation.new(arity: 2, receiver: true),
         | 
| 25 | 
            +
                          mixes_in_class_methods: Annotation.new(arity: 1),
         | 
| 26 | 
            +
                          must: Annotation.new(arity: 1, receiver: true),
         | 
| 27 | 
            +
                          must_because: Annotation.new(arity: 1, receiver: true),
         | 
| 28 | 
            +
                          nilable: Annotation.new(arity: 1, receiver: true),
         | 
| 29 | 
            +
                          noreturn: Annotation.new(arity: 0, receiver: true),
         | 
| 30 | 
            +
                          requires_ancestor: Annotation.new(arity: 0),
         | 
| 31 | 
            +
                          reveal_type: Annotation.new(arity: 1, receiver: true),
         | 
| 32 | 
            +
                          sealed!: Annotation.new(arity: 0),
         | 
| 33 | 
            +
                          self_type: Annotation.new(arity: 0, receiver: true),
         | 
| 34 | 
            +
                          sig: Annotation.new(arity: 0),
         | 
| 35 | 
            +
                          type_member: Annotation.new(arity: (0..1)),
         | 
| 36 | 
            +
                          type_template: Annotation.new(arity: 0),
         | 
| 37 | 
            +
                          unsafe: Annotation.new(arity: 1),
         | 
| 38 | 
            +
                          untyped: Annotation.new(arity: 0, receiver: true),
         | 
| 39 39 | 
             
                        },
         | 
| 40 | 
            -
                        T::Hash[ | 
| 40 | 
            +
                        T::Hash[Symbol, Annotation],
         | 
| 41 41 | 
             
                      )
         | 
| 42 42 |  | 
| 43 43 | 
             
                      sig do
         | 
| 44 44 | 
             
                        params(
         | 
| 45 | 
            -
                          node:  | 
| 45 | 
            +
                          node: Prism::CallNode,
         | 
| 46 46 | 
             
                        ).returns(T::Boolean)
         | 
| 47 47 | 
             
                      end
         | 
| 48 48 | 
             
                      def annotation?(node)
         | 
| @@ -73,14 +73,14 @@ module RubyLsp | |
| 73 73 |  | 
| 74 74 | 
             
                  private
         | 
| 75 75 |  | 
| 76 | 
            -
                  sig { params(entry: RubyIndexer:: | 
| 76 | 
            +
                  sig { params(entry: RubyIndexer::Entry).returns(T.nilable(Integer)) }
         | 
| 77 77 | 
             
                  def kind_for_entry(entry)
         | 
| 78 78 | 
             
                    case entry
         | 
| 79 | 
            -
                    when RubyIndexer:: | 
| 79 | 
            +
                    when RubyIndexer::Entry::Class
         | 
| 80 80 | 
             
                      Constant::SymbolKind::CLASS
         | 
| 81 | 
            -
                    when RubyIndexer:: | 
| 81 | 
            +
                    when RubyIndexer::Entry::Module
         | 
| 82 82 | 
             
                      Constant::SymbolKind::NAMESPACE
         | 
| 83 | 
            -
                    when RubyIndexer:: | 
| 83 | 
            +
                    when RubyIndexer::Entry::Constant
         | 
| 84 84 | 
             
                      Constant::SymbolKind::CONSTANT
         | 
| 85 85 | 
             
                    end
         | 
| 86 86 | 
             
                  end
         | 
    
        data/lib/ruby_lsp/requests.rb
    CHANGED
    
    | @@ -51,7 +51,6 @@ module RubyLsp | |
| 51 51 | 
             
                  autoload :SemanticTokenEncoder, "ruby_lsp/requests/support/semantic_token_encoder"
         | 
| 52 52 | 
             
                  autoload :Annotation, "ruby_lsp/requests/support/annotation"
         | 
| 53 53 | 
             
                  autoload :Sorbet, "ruby_lsp/requests/support/sorbet"
         | 
| 54 | 
            -
                  autoload :HighlightTarget, "ruby_lsp/requests/support/highlight_target"
         | 
| 55 54 | 
             
                  autoload :RailsDocumentClient, "ruby_lsp/requests/support/rails_document_client"
         | 
| 56 55 | 
             
                  autoload :Common, "ruby_lsp/requests/support/common"
         | 
| 57 56 | 
             
                  autoload :FormatterRunner, "ruby_lsp/requests/support/formatter_runner"
         | 
| @@ -46,9 +46,9 @@ module RubyLsp | |
| 46 46 | 
             
                  @dependencies = T.let(load_dependencies, T::Hash[String, T.untyped])
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 | 
            -
                #  | 
| 50 | 
            -
                # server
         | 
| 51 | 
            -
                sig { returns([String, T.nilable(String)]) }
         | 
| 49 | 
            +
                # Sets up the custom bundle and returns the `BUNDLE_GEMFILE`, `BUNDLE_PATH` and `BUNDLE_APP_CONFIG` that should be
         | 
| 50 | 
            +
                # used for running the server
         | 
| 51 | 
            +
                sig { returns([String, T.nilable(String), T.nilable(String)]) }
         | 
| 52 52 | 
             
                def setup!
         | 
| 53 53 | 
             
                  raise BundleNotLocked if @gemfile&.exist? && !@lockfile&.exist?
         | 
| 54 54 |  | 
| @@ -156,7 +156,7 @@ module RubyLsp | |
| 156 156 | 
             
                  dependencies
         | 
| 157 157 | 
             
                end
         | 
| 158 158 |  | 
| 159 | 
            -
                sig { params(bundle_gemfile: T.nilable(Pathname)).returns([String, T.nilable(String)]) }
         | 
| 159 | 
            +
                sig { params(bundle_gemfile: T.nilable(Pathname)).returns([String, T.nilable(String), T.nilable(String)]) }
         | 
| 160 160 | 
             
                def run_bundle_install(bundle_gemfile = @gemfile)
         | 
| 161 161 | 
             
                  # If the user has a custom bundle path configured, we need to ensure that we will use the absolute and not
         | 
| 162 162 | 
             
                  # relative version of it when running `bundle install`. This is necessary to avoid installing the gems under the
         | 
| @@ -170,6 +170,9 @@ module RubyLsp | |
| 170 170 | 
             
                  env["BUNDLE_GEMFILE"] = bundle_gemfile.to_s
         | 
| 171 171 | 
             
                  env["BUNDLE_PATH"] = expanded_path if expanded_path
         | 
| 172 172 |  | 
| 173 | 
            +
                  local_config_path = File.join(Dir.pwd, ".bundle")
         | 
| 174 | 
            +
                  env["BUNDLE_APP_CONFIG"] = local_config_path if Dir.exist?(local_config_path)
         | 
| 175 | 
            +
             | 
| 173 176 | 
             
                  # If both `ruby-lsp` and `debug` are already in the Gemfile, then we shouldn't try to upgrade them or else we'll
         | 
| 174 177 | 
             
                  # produce undesired source control changes. If the custom bundle was just created and either `ruby-lsp` or `debug`
         | 
| 175 178 | 
             
                  # weren't a part of the Gemfile, then we need to run `bundle install` for the first time to generate the
         | 
| @@ -200,7 +203,7 @@ module RubyLsp | |
| 200 203 | 
             
                  # Add bundle update
         | 
| 201 204 | 
             
                  warn("Ruby LSP> Running bundle install for the custom bundle. This may take a while...")
         | 
| 202 205 | 
             
                  system(env, command)
         | 
| 203 | 
            -
                  [bundle_gemfile.to_s, expanded_path]
         | 
| 206 | 
            +
                  [bundle_gemfile.to_s, expanded_path, env["BUNDLE_APP_CONFIG"]]
         | 
| 204 207 | 
             
                end
         | 
| 205 208 |  | 
| 206 209 | 
             
                sig { returns(T::Boolean) }
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ruby-lsp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.12.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Shopify
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-10- | 
| 11 | 
            +
            date: 2023-10-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: language_server-protocol
         | 
| @@ -25,45 +25,46 @@ dependencies: | |
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: 3.17.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 28 | 
            +
              name: prism
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0. | 
| 33 | 
            +
                    version: 0.15.1
         | 
| 34 | 
            +
                - - "<"
         | 
| 35 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 36 | 
            +
                    version: '0.16'
         | 
| 34 37 | 
             
              type: :runtime
         | 
| 35 38 | 
             
              prerelease: false
         | 
| 36 39 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 40 | 
             
                requirements:
         | 
| 38 41 | 
             
                - - ">="
         | 
| 39 42 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0. | 
| 43 | 
            +
                    version: 0.15.1
         | 
| 44 | 
            +
                - - "<"
         | 
| 45 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            +
                    version: '0.16'
         | 
| 41 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name:  | 
| 48 | 
            +
              name: sorbet-runtime
         | 
| 43 49 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 50 | 
             
                requirements:
         | 
| 45 51 | 
             
                - - ">="
         | 
| 46 52 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version:  | 
| 48 | 
            -
                - - "<"
         | 
| 49 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 50 | 
            -
                    version: '0.13'
         | 
| 53 | 
            +
                    version: 0.5.5685
         | 
| 51 54 | 
             
              type: :runtime
         | 
| 52 55 | 
             
              prerelease: false
         | 
| 53 56 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 54 57 | 
             
                requirements:
         | 
| 55 58 | 
             
                - - ">="
         | 
| 56 59 | 
             
                  - !ruby/object:Gem::Version
         | 
| 57 | 
            -
                    version:  | 
| 58 | 
            -
                - - "<"
         | 
| 59 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            -
                    version: '0.13'
         | 
| 60 | 
            +
                    version: 0.5.5685
         | 
| 61 61 | 
             
            description: An opinionated language server for Ruby
         | 
| 62 62 | 
             
            email:
         | 
| 63 63 | 
             
            - ruby@shopify.com
         | 
| 64 64 | 
             
            executables:
         | 
| 65 65 | 
             
            - ruby-lsp
         | 
| 66 66 | 
             
            - ruby-lsp-check
         | 
| 67 | 
            +
            - ruby-lsp-doctor
         | 
| 67 68 | 
             
            extensions: []
         | 
| 68 69 | 
             
            extra_rdoc_files: []
         | 
| 69 70 | 
             
            files:
         | 
| @@ -72,10 +73,12 @@ files: | |
| 72 73 | 
             
            - VERSION
         | 
| 73 74 | 
             
            - exe/ruby-lsp
         | 
| 74 75 | 
             
            - exe/ruby-lsp-check
         | 
| 76 | 
            +
            - exe/ruby-lsp-doctor
         | 
| 75 77 | 
             
            - lib/core_ext/uri.rb
         | 
| 76 78 | 
             
            - lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb
         | 
| 77 79 | 
             
            - lib/ruby-lsp.rb
         | 
| 78 80 | 
             
            - lib/ruby_indexer/lib/ruby_indexer/configuration.rb
         | 
| 81 | 
            +
            - lib/ruby_indexer/lib/ruby_indexer/entry.rb
         | 
| 79 82 | 
             
            - lib/ruby_indexer/lib/ruby_indexer/index.rb
         | 
| 80 83 | 
             
            - lib/ruby_indexer/lib/ruby_indexer/indexable_path.rb
         | 
| 81 84 | 
             
            - lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb
         | 
| @@ -85,12 +88,12 @@ files: | |
| 85 88 | 
             
            - lib/ruby_indexer/test/configuration_test.rb
         | 
| 86 89 | 
             
            - lib/ruby_indexer/test/constant_test.rb
         | 
| 87 90 | 
             
            - lib/ruby_indexer/test/index_test.rb
         | 
| 91 | 
            +
            - lib/ruby_indexer/test/method_test.rb
         | 
| 88 92 | 
             
            - lib/ruby_indexer/test/prefix_tree_test.rb
         | 
| 89 93 | 
             
            - lib/ruby_indexer/test/test_case.rb
         | 
| 90 94 | 
             
            - lib/ruby_lsp/addon.rb
         | 
| 91 95 | 
             
            - lib/ruby_lsp/check_docs.rb
         | 
| 92 96 | 
             
            - lib/ruby_lsp/document.rb
         | 
| 93 | 
            -
            - lib/ruby_lsp/event_emitter.rb
         | 
| 94 97 | 
             
            - lib/ruby_lsp/executor.rb
         | 
| 95 98 | 
             
            - lib/ruby_lsp/internal.rb
         | 
| 96 99 | 
             
            - lib/ruby_lsp/listener.rb
         | 
| @@ -118,7 +121,6 @@ files: | |
| 118 121 | 
             
            - lib/ruby_lsp/requests/support/common.rb
         | 
| 119 122 | 
             
            - lib/ruby_lsp/requests/support/dependency_detector.rb
         | 
| 120 123 | 
             
            - lib/ruby_lsp/requests/support/formatter_runner.rb
         | 
| 121 | 
            -
            - lib/ruby_lsp/requests/support/highlight_target.rb
         | 
| 122 124 | 
             
            - lib/ruby_lsp/requests/support/rubocop_diagnostic.rb
         | 
| 123 125 | 
             
            - lib/ruby_lsp/requests/support/rubocop_diagnostics_runner.rb
         | 
| 124 126 | 
             
            - lib/ruby_lsp/requests/support/rubocop_formatting_runner.rb
         | 
| @@ -153,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 153 155 | 
             
                - !ruby/object:Gem::Version
         | 
| 154 156 | 
             
                  version: '0'
         | 
| 155 157 | 
             
            requirements: []
         | 
| 156 | 
            -
            rubygems_version: 3.4. | 
| 158 | 
            +
            rubygems_version: 3.4.21
         | 
| 157 159 | 
             
            signing_key: 
         | 
| 158 160 | 
             
            specification_version: 4
         | 
| 159 161 | 
             
            summary: An opinionated language server for Ruby
         | 
| @@ -1,351 +0,0 @@ | |
| 1 | 
            -
            # typed: strict
         | 
| 2 | 
            -
            # frozen_string_literal: true
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            module RubyLsp
         | 
| 5 | 
            -
              # EventEmitter is an intermediary between our requests and YARP visitors. It's used to visit the document's AST
         | 
| 6 | 
            -
              # and emit events that the requests can listen to for providing functionality. Usages:
         | 
| 7 | 
            -
              #
         | 
| 8 | 
            -
              # - For positional requests, locate the target node and use `emit_for_target` to fire events for each listener
         | 
| 9 | 
            -
              # - For nonpositional requests, use `visit` to go through the AST, which will fire events for each listener as nodes
         | 
| 10 | 
            -
              # are found
         | 
| 11 | 
            -
              #
         | 
| 12 | 
            -
              # # Example
         | 
| 13 | 
            -
              #
         | 
| 14 | 
            -
              # ```ruby
         | 
| 15 | 
            -
              # target_node = document.locate_node(position)
         | 
| 16 | 
            -
              # emitter = EventEmitter.new
         | 
| 17 | 
            -
              # listener = Requests::Hover.new(emitter, @message_queue)
         | 
| 18 | 
            -
              # emitter.emit_for_target(target_node)
         | 
| 19 | 
            -
              # listener.response
         | 
| 20 | 
            -
              # ```
         | 
| 21 | 
            -
              class EventEmitter < YARP::Visitor
         | 
| 22 | 
            -
                extend T::Sig
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                sig { void }
         | 
| 25 | 
            -
                def initialize
         | 
| 26 | 
            -
                  @listeners = T.let(Hash.new { |h, k| h[k] = [] }, T::Hash[Symbol, T::Array[Listener[T.untyped]]])
         | 
| 27 | 
            -
                  super()
         | 
| 28 | 
            -
                end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                sig { params(listener: Listener[T.untyped], events: Symbol).void }
         | 
| 31 | 
            -
                def register(listener, *events)
         | 
| 32 | 
            -
                  events.each { |event| T.must(@listeners[event]) << listener }
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                # Emit events for a specific node. This is similar to the regular `visit` method, but avoids going deeper into the
         | 
| 36 | 
            -
                # tree for performance
         | 
| 37 | 
            -
                sig { params(node: T.nilable(YARP::Node)).void }
         | 
| 38 | 
            -
                def emit_for_target(node)
         | 
| 39 | 
            -
                  case node
         | 
| 40 | 
            -
                  when YARP::CallNode
         | 
| 41 | 
            -
                    @listeners[:on_call]&.each { |l| T.unsafe(l).on_call(node) }
         | 
| 42 | 
            -
                  when YARP::ConstantPathNode
         | 
| 43 | 
            -
                    @listeners[:on_constant_path]&.each { |l| T.unsafe(l).on_constant_path(node) }
         | 
| 44 | 
            -
                  when YARP::StringNode
         | 
| 45 | 
            -
                    @listeners[:on_string]&.each { |l| T.unsafe(l).on_string(node) }
         | 
| 46 | 
            -
                  when YARP::ClassNode
         | 
| 47 | 
            -
                    @listeners[:on_class]&.each { |l| T.unsafe(l).on_class(node) }
         | 
| 48 | 
            -
                  when YARP::ModuleNode
         | 
| 49 | 
            -
                    @listeners[:on_module]&.each { |l| T.unsafe(l).on_module(node) }
         | 
| 50 | 
            -
                  when YARP::ConstantWriteNode
         | 
| 51 | 
            -
                    @listeners[:on_constant_write]&.each { |l| T.unsafe(l).on_constant_write(node) }
         | 
| 52 | 
            -
                  when YARP::ConstantReadNode
         | 
| 53 | 
            -
                    @listeners[:on_constant_read]&.each { |l| T.unsafe(l).on_constant_read(node) }
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
                end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                # Visit dispatchers are below. Notice that for nodes that create a new scope (e.g.: classes, modules, method defs)
         | 
| 58 | 
            -
                # we need both an `on_*` and `after_*` event. This is because some requests must know when we exit the scope
         | 
| 59 | 
            -
                sig { override.params(node: T.nilable(YARP::Node)).void }
         | 
| 60 | 
            -
                def visit(node)
         | 
| 61 | 
            -
                  @listeners[:on_node]&.each { |l| T.unsafe(l).on_node(node) }
         | 
| 62 | 
            -
                  super
         | 
| 63 | 
            -
                end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                sig { params(nodes: T::Array[T.nilable(YARP::Node)]).void }
         | 
| 66 | 
            -
                def visit_all(nodes)
         | 
| 67 | 
            -
                  nodes.each { |node| visit(node) }
         | 
| 68 | 
            -
                end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                sig { override.params(node: YARP::ClassNode).void }
         | 
| 71 | 
            -
                def visit_class_node(node)
         | 
| 72 | 
            -
                  @listeners[:on_class]&.each { |l| T.unsafe(l).on_class(node) }
         | 
| 73 | 
            -
                  super
         | 
| 74 | 
            -
                  @listeners[:after_class]&.each { |l| T.unsafe(l).after_class(node) }
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                sig { override.params(node: YARP::ModuleNode).void }
         | 
| 78 | 
            -
                def visit_module_node(node)
         | 
| 79 | 
            -
                  @listeners[:on_module]&.each { |l| T.unsafe(l).on_module(node) }
         | 
| 80 | 
            -
                  super
         | 
| 81 | 
            -
                  @listeners[:after_module]&.each { |l| T.unsafe(l).after_module(node) }
         | 
| 82 | 
            -
                end
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                sig { override.params(node: YARP::CallNode).void }
         | 
| 85 | 
            -
                def visit_call_node(node)
         | 
| 86 | 
            -
                  @listeners[:on_call]&.each { |l| T.unsafe(l).on_call(node) }
         | 
| 87 | 
            -
                  super
         | 
| 88 | 
            -
                  @listeners[:after_call]&.each { |l| T.unsafe(l).after_call(node) }
         | 
| 89 | 
            -
                end
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                sig { override.params(node: YARP::InstanceVariableWriteNode).void }
         | 
| 92 | 
            -
                def visit_instance_variable_write_node(node)
         | 
| 93 | 
            -
                  @listeners[:on_instance_variable_write]&.each { |l| T.unsafe(l).on_instance_variable_write(node) }
         | 
| 94 | 
            -
                  super
         | 
| 95 | 
            -
                end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                sig { override.params(node: YARP::ClassVariableWriteNode).void }
         | 
| 98 | 
            -
                def visit_class_variable_write_node(node)
         | 
| 99 | 
            -
                  @listeners[:on_class_variable_write]&.each { |l| T.unsafe(l).on_class_variable_write(node) }
         | 
| 100 | 
            -
                  super
         | 
| 101 | 
            -
                end
         | 
| 102 | 
            -
             | 
| 103 | 
            -
                sig { override.params(node: YARP::DefNode).void }
         | 
| 104 | 
            -
                def visit_def_node(node)
         | 
| 105 | 
            -
                  @listeners[:on_def]&.each { |l| T.unsafe(l).on_def(node) }
         | 
| 106 | 
            -
                  super
         | 
| 107 | 
            -
                  @listeners[:after_def]&.each { |l| T.unsafe(l).after_def(node) }
         | 
| 108 | 
            -
                end
         | 
| 109 | 
            -
             | 
| 110 | 
            -
                sig { override.params(node: YARP::BlockNode).void }
         | 
| 111 | 
            -
                def visit_block_node(node)
         | 
| 112 | 
            -
                  @listeners[:on_block]&.each { |l| T.unsafe(l).on_block(node) }
         | 
| 113 | 
            -
                  super
         | 
| 114 | 
            -
                  @listeners[:after_block]&.each { |l| T.unsafe(l).after_block(node) }
         | 
| 115 | 
            -
                end
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                sig { override.params(node: YARP::SelfNode).void }
         | 
| 118 | 
            -
                def visit_self_node(node)
         | 
| 119 | 
            -
                  @listeners[:on_self]&.each { |l| T.unsafe(l).on_self(node) }
         | 
| 120 | 
            -
                  super
         | 
| 121 | 
            -
                end
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                sig { override.params(node: YARP::RescueNode).void }
         | 
| 124 | 
            -
                def visit_rescue_node(node)
         | 
| 125 | 
            -
                  @listeners[:on_rescue]&.each { |l| T.unsafe(l).on_rescue(node) }
         | 
| 126 | 
            -
                  super
         | 
| 127 | 
            -
                end
         | 
| 128 | 
            -
             | 
| 129 | 
            -
                sig { override.params(node: YARP::BlockParameterNode).void }
         | 
| 130 | 
            -
                def visit_block_parameter_node(node)
         | 
| 131 | 
            -
                  @listeners[:on_block_parameter]&.each { |l| T.unsafe(l).on_block_parameter(node) }
         | 
| 132 | 
            -
                  super
         | 
| 133 | 
            -
                end
         | 
| 134 | 
            -
             | 
| 135 | 
            -
                sig { override.params(node: YARP::KeywordParameterNode).void }
         | 
| 136 | 
            -
                def visit_keyword_parameter_node(node)
         | 
| 137 | 
            -
                  @listeners[:on_keyword_parameter]&.each { |l| T.unsafe(l).on_keyword_parameter(node) }
         | 
| 138 | 
            -
                  super
         | 
| 139 | 
            -
                end
         | 
| 140 | 
            -
             | 
| 141 | 
            -
                sig { override.params(node: YARP::KeywordRestParameterNode).void }
         | 
| 142 | 
            -
                def visit_keyword_rest_parameter_node(node)
         | 
| 143 | 
            -
                  @listeners[:on_keyword_rest_parameter]&.each { |l| T.unsafe(l).on_keyword_rest_parameter(node) }
         | 
| 144 | 
            -
                  super
         | 
| 145 | 
            -
                end
         | 
| 146 | 
            -
             | 
| 147 | 
            -
                sig { override.params(node: YARP::OptionalParameterNode).void }
         | 
| 148 | 
            -
                def visit_optional_parameter_node(node)
         | 
| 149 | 
            -
                  @listeners[:on_optional_parameter]&.each { |l| T.unsafe(l).on_optional_parameter(node) }
         | 
| 150 | 
            -
                  super
         | 
| 151 | 
            -
                end
         | 
| 152 | 
            -
             | 
| 153 | 
            -
                sig { override.params(node: YARP::RequiredParameterNode).void }
         | 
| 154 | 
            -
                def visit_required_parameter_node(node)
         | 
| 155 | 
            -
                  @listeners[:on_required_parameter]&.each { |l| T.unsafe(l).on_required_parameter(node) }
         | 
| 156 | 
            -
                  super
         | 
| 157 | 
            -
                end
         | 
| 158 | 
            -
             | 
| 159 | 
            -
                sig { override.params(node: YARP::RestParameterNode).void }
         | 
| 160 | 
            -
                def visit_rest_parameter_node(node)
         | 
| 161 | 
            -
                  @listeners[:on_rest_parameter]&.each { |l| T.unsafe(l).on_rest_parameter(node) }
         | 
| 162 | 
            -
                  super
         | 
| 163 | 
            -
                end
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                sig { override.params(node: YARP::ConstantReadNode).void }
         | 
| 166 | 
            -
                def visit_constant_read_node(node)
         | 
| 167 | 
            -
                  @listeners[:on_constant_read]&.each { |l| T.unsafe(l).on_constant_read(node) }
         | 
| 168 | 
            -
                  super
         | 
| 169 | 
            -
                end
         | 
| 170 | 
            -
             | 
| 171 | 
            -
                sig { override.params(node: YARP::ConstantPathNode).void }
         | 
| 172 | 
            -
                def visit_constant_path_node(node)
         | 
| 173 | 
            -
                  @listeners[:on_constant_path]&.each { |l| T.unsafe(l).on_constant_path(node) }
         | 
| 174 | 
            -
                  super
         | 
| 175 | 
            -
                end
         | 
| 176 | 
            -
             | 
| 177 | 
            -
                sig { override.params(node: YARP::ConstantPathWriteNode).void }
         | 
| 178 | 
            -
                def visit_constant_path_write_node(node)
         | 
| 179 | 
            -
                  @listeners[:on_constant_path_write]&.each { |l| T.unsafe(l).on_constant_path_write(node) }
         | 
| 180 | 
            -
                  super
         | 
| 181 | 
            -
                end
         | 
| 182 | 
            -
             | 
| 183 | 
            -
                sig { override.params(node: YARP::ConstantWriteNode).void }
         | 
| 184 | 
            -
                def visit_constant_write_node(node)
         | 
| 185 | 
            -
                  @listeners[:on_constant_write]&.each { |l| T.unsafe(l).on_constant_write(node) }
         | 
| 186 | 
            -
                  super
         | 
| 187 | 
            -
                end
         | 
| 188 | 
            -
             | 
| 189 | 
            -
                sig { override.params(node: YARP::ConstantAndWriteNode).void }
         | 
| 190 | 
            -
                def visit_constant_and_write_node(node)
         | 
| 191 | 
            -
                  @listeners[:on_constant_and_write]&.each { |l| T.unsafe(l).on_constant_and_write(node) }
         | 
| 192 | 
            -
                  super
         | 
| 193 | 
            -
                end
         | 
| 194 | 
            -
             | 
| 195 | 
            -
                sig { override.params(node: YARP::ConstantOperatorWriteNode).void }
         | 
| 196 | 
            -
                def visit_constant_operator_write_node(node)
         | 
| 197 | 
            -
                  @listeners[:on_constant_operator_write]&.each { |l| T.unsafe(l).on_constant_operator_write(node) }
         | 
| 198 | 
            -
                  super
         | 
| 199 | 
            -
                end
         | 
| 200 | 
            -
             | 
| 201 | 
            -
                sig { override.params(node: YARP::ConstantOrWriteNode).void }
         | 
| 202 | 
            -
                def visit_constant_or_write_node(node)
         | 
| 203 | 
            -
                  @listeners[:on_constant_or_write]&.each { |l| T.unsafe(l).on_constant_or_write(node) }
         | 
| 204 | 
            -
                  super
         | 
| 205 | 
            -
                end
         | 
| 206 | 
            -
             | 
| 207 | 
            -
                sig { override.params(node: YARP::ConstantTargetNode).void }
         | 
| 208 | 
            -
                def visit_constant_target_node(node)
         | 
| 209 | 
            -
                  @listeners[:on_constant_target]&.each { |l| T.unsafe(l).on_constant_target(node) }
         | 
| 210 | 
            -
                  super
         | 
| 211 | 
            -
                end
         | 
| 212 | 
            -
             | 
| 213 | 
            -
                sig { override.params(node: YARP::LocalVariableWriteNode).void }
         | 
| 214 | 
            -
                def visit_local_variable_write_node(node)
         | 
| 215 | 
            -
                  @listeners[:on_local_variable_write]&.each { |l| T.unsafe(l).on_local_variable_write(node) }
         | 
| 216 | 
            -
                  super
         | 
| 217 | 
            -
                end
         | 
| 218 | 
            -
             | 
| 219 | 
            -
                sig { override.params(node: YARP::LocalVariableReadNode).void }
         | 
| 220 | 
            -
                def visit_local_variable_read_node(node)
         | 
| 221 | 
            -
                  @listeners[:on_local_variable_read]&.each { |l| T.unsafe(l).on_local_variable_read(node) }
         | 
| 222 | 
            -
                  super
         | 
| 223 | 
            -
                end
         | 
| 224 | 
            -
             | 
| 225 | 
            -
                sig { override.params(node: YARP::LocalVariableAndWriteNode).void }
         | 
| 226 | 
            -
                def visit_local_variable_and_write_node(node)
         | 
| 227 | 
            -
                  @listeners[:on_local_variable_and_write]&.each { |l| T.unsafe(l).on_local_variable_and_write(node) }
         | 
| 228 | 
            -
                  super
         | 
| 229 | 
            -
                end
         | 
| 230 | 
            -
             | 
| 231 | 
            -
                sig { override.params(node: YARP::LocalVariableOperatorWriteNode).void }
         | 
| 232 | 
            -
                def visit_local_variable_operator_write_node(node)
         | 
| 233 | 
            -
                  @listeners[:on_local_variable_operator_write]&.each { |l| T.unsafe(l).on_local_variable_operator_write(node) }
         | 
| 234 | 
            -
                  super
         | 
| 235 | 
            -
                end
         | 
| 236 | 
            -
             | 
| 237 | 
            -
                sig { override.params(node: YARP::LocalVariableOrWriteNode).void }
         | 
| 238 | 
            -
                def visit_local_variable_or_write_node(node)
         | 
| 239 | 
            -
                  @listeners[:on_local_variable_or_write]&.each { |l| T.unsafe(l).on_local_variable_or_write(node) }
         | 
| 240 | 
            -
                  super
         | 
| 241 | 
            -
                end
         | 
| 242 | 
            -
             | 
| 243 | 
            -
                sig { override.params(node: YARP::LocalVariableTargetNode).void }
         | 
| 244 | 
            -
                def visit_local_variable_target_node(node)
         | 
| 245 | 
            -
                  @listeners[:on_local_variable_target]&.each { |l| T.unsafe(l).on_local_variable_target(node) }
         | 
| 246 | 
            -
                  super
         | 
| 247 | 
            -
                end
         | 
| 248 | 
            -
             | 
| 249 | 
            -
                sig { override.params(node: YARP::BlockLocalVariableNode).void }
         | 
| 250 | 
            -
                def visit_block_local_variable_node(node)
         | 
| 251 | 
            -
                  @listeners[:on_block_local_variable]&.each { |l| T.unsafe(l).on_block_local_variable(node) }
         | 
| 252 | 
            -
                  super
         | 
| 253 | 
            -
                end
         | 
| 254 | 
            -
             | 
| 255 | 
            -
                sig { override.params(node: YARP::IfNode).void }
         | 
| 256 | 
            -
                def visit_if_node(node)
         | 
| 257 | 
            -
                  @listeners[:on_if]&.each { |l| T.unsafe(l).on_if(node) }
         | 
| 258 | 
            -
                  super
         | 
| 259 | 
            -
                end
         | 
| 260 | 
            -
             | 
| 261 | 
            -
                sig { override.params(node: YARP::InNode).void }
         | 
| 262 | 
            -
                def visit_in_node(node)
         | 
| 263 | 
            -
                  @listeners[:on_in]&.each { |l| T.unsafe(l).on_in(node) }
         | 
| 264 | 
            -
                  super
         | 
| 265 | 
            -
                end
         | 
| 266 | 
            -
             | 
| 267 | 
            -
                sig { override.params(node: YARP::WhenNode).void }
         | 
| 268 | 
            -
                def visit_when_node(node)
         | 
| 269 | 
            -
                  @listeners[:on_when]&.each { |l| T.unsafe(l).on_when(node) }
         | 
| 270 | 
            -
                  super
         | 
| 271 | 
            -
                end
         | 
| 272 | 
            -
             | 
| 273 | 
            -
                sig { override.params(node: YARP::InterpolatedStringNode).void }
         | 
| 274 | 
            -
                def visit_interpolated_string_node(node)
         | 
| 275 | 
            -
                  @listeners[:on_interpolated_string]&.each { |l| T.unsafe(l).on_interpolated_string(node) }
         | 
| 276 | 
            -
                  super
         | 
| 277 | 
            -
                end
         | 
| 278 | 
            -
             | 
| 279 | 
            -
                sig { override.params(node: YARP::ArrayNode).void }
         | 
| 280 | 
            -
                def visit_array_node(node)
         | 
| 281 | 
            -
                  @listeners[:on_array]&.each { |l| T.unsafe(l).on_array(node) }
         | 
| 282 | 
            -
                  super
         | 
| 283 | 
            -
                end
         | 
| 284 | 
            -
             | 
| 285 | 
            -
                sig { override.params(node: YARP::CaseNode).void }
         | 
| 286 | 
            -
                def visit_case_node(node)
         | 
| 287 | 
            -
                  @listeners[:on_case]&.each { |l| T.unsafe(l).on_case(node) }
         | 
| 288 | 
            -
                  super
         | 
| 289 | 
            -
                end
         | 
| 290 | 
            -
             | 
| 291 | 
            -
                sig { override.params(node: YARP::ForNode).void }
         | 
| 292 | 
            -
                def visit_for_node(node)
         | 
| 293 | 
            -
                  @listeners[:on_for]&.each { |l| T.unsafe(l).on_for(node) }
         | 
| 294 | 
            -
                  super
         | 
| 295 | 
            -
                end
         | 
| 296 | 
            -
             | 
| 297 | 
            -
                sig { override.params(node: YARP::HashNode).void }
         | 
| 298 | 
            -
                def visit_hash_node(node)
         | 
| 299 | 
            -
                  @listeners[:on_hash]&.each { |l| T.unsafe(l).on_hash(node) }
         | 
| 300 | 
            -
                  super
         | 
| 301 | 
            -
                end
         | 
| 302 | 
            -
             | 
| 303 | 
            -
                sig { override.params(node: YARP::SingletonClassNode).void }
         | 
| 304 | 
            -
                def visit_singleton_class_node(node)
         | 
| 305 | 
            -
                  @listeners[:on_singleton_class]&.each { |l| T.unsafe(l).on_singleton_class(node) }
         | 
| 306 | 
            -
                  super
         | 
| 307 | 
            -
                end
         | 
| 308 | 
            -
             | 
| 309 | 
            -
                sig { override.params(node: YARP::UnlessNode).void }
         | 
| 310 | 
            -
                def visit_unless_node(node)
         | 
| 311 | 
            -
                  @listeners[:on_unless]&.each { |l| T.unsafe(l).on_unless(node) }
         | 
| 312 | 
            -
                  super
         | 
| 313 | 
            -
                end
         | 
| 314 | 
            -
             | 
| 315 | 
            -
                sig { override.params(node: YARP::UntilNode).void }
         | 
| 316 | 
            -
                def visit_until_node(node)
         | 
| 317 | 
            -
                  @listeners[:on_until]&.each { |l| T.unsafe(l).on_until(node) }
         | 
| 318 | 
            -
                  super
         | 
| 319 | 
            -
                end
         | 
| 320 | 
            -
             | 
| 321 | 
            -
                sig { override.params(node: YARP::WhileNode).void }
         | 
| 322 | 
            -
                def visit_while_node(node)
         | 
| 323 | 
            -
                  @listeners[:on_while]&.each { |l| T.unsafe(l).on_while(node) }
         | 
| 324 | 
            -
                  super
         | 
| 325 | 
            -
                end
         | 
| 326 | 
            -
             | 
| 327 | 
            -
                sig { override.params(node: YARP::ElseNode).void }
         | 
| 328 | 
            -
                def visit_else_node(node)
         | 
| 329 | 
            -
                  @listeners[:on_else]&.each { |l| T.unsafe(l).on_else(node) }
         | 
| 330 | 
            -
                  super
         | 
| 331 | 
            -
                end
         | 
| 332 | 
            -
             | 
| 333 | 
            -
                sig { override.params(node: YARP::EnsureNode).void }
         | 
| 334 | 
            -
                def visit_ensure_node(node)
         | 
| 335 | 
            -
                  @listeners[:on_ensure]&.each { |l| T.unsafe(l).on_ensure(node) }
         | 
| 336 | 
            -
                  super
         | 
| 337 | 
            -
                end
         | 
| 338 | 
            -
             | 
| 339 | 
            -
                sig { override.params(node: YARP::BeginNode).void }
         | 
| 340 | 
            -
                def visit_begin_node(node)
         | 
| 341 | 
            -
                  @listeners[:on_begin]&.each { |l| T.unsafe(l).on_begin(node) }
         | 
| 342 | 
            -
                  super
         | 
| 343 | 
            -
                end
         | 
| 344 | 
            -
             | 
| 345 | 
            -
                sig { override.params(node: YARP::StringConcatNode).void }
         | 
| 346 | 
            -
                def visit_string_concat_node(node)
         | 
| 347 | 
            -
                  @listeners[:on_string_concat]&.each { |l| T.unsafe(l).on_string_concat(node) }
         | 
| 348 | 
            -
                  super
         | 
| 349 | 
            -
                end
         | 
| 350 | 
            -
              end
         | 
| 351 | 
            -
            end
         |