From bb61a029be00d9bf27dd83e2ed36c460944a6865 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Wed, 23 Aug 2023 09:57:53 -0400 Subject: [PATCH 01/20] Fix test file exclusion glob pattern (#919) --- lib/ruby_indexer/lib/ruby_indexer/configuration.rb | 2 +- lib/ruby_indexer/test/configuration_test.rb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ruby_indexer/lib/ruby_indexer/configuration.rb b/lib/ruby_indexer/lib/ruby_indexer/configuration.rb index 98d4979d4..2eb35ee5a 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/configuration.rb @@ -24,7 +24,7 @@ def initialize @excluded_gems = T.let(development_only_dependencies, T::Array[String]) @included_gems = T.let([], T::Array[String]) - @excluded_patterns = T.let(["*_test.rb"], T::Array[String]) + @excluded_patterns = T.let(["**/*_test.rb"], T::Array[String]) @included_patterns = T.let(["#{Dir.pwd}/**/*.rb"], T::Array[String]) @excluded_magic_comments = T.let( [ diff --git a/lib/ruby_indexer/test/configuration_test.rb b/lib/ruby_indexer/test/configuration_test.rb index 2eb1b31b0..347c66ab5 100644 --- a/lib/ruby_indexer/test/configuration_test.rb +++ b/lib/ruby_indexer/test/configuration_test.rb @@ -15,6 +15,7 @@ def test_load_configuration_executes_configure_block assert(files_to_index.none? { |path| path.include?("test/fixtures") }) assert(files_to_index.none? { |path| path.include?("minitest-reporters") }) + assert(files_to_index.none? { |path| path == __FILE__ }) end def test_paths_are_unique From e0574d1683b952f04d19bdc2ac7d2b197e177031 Mon Sep 17 00:00:00 2001 From: Andy Waite <13400+andyw8@users.noreply.github.com> Date: Wed, 23 Aug 2023 13:28:17 -0400 Subject: [PATCH 02/20] Update docs for Definition request (#924) --- lib/ruby_lsp/requests/definition.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ruby_lsp/requests/definition.rb b/lib/ruby_lsp/requests/definition.rb index 6cca165e4..a7675cffe 100644 --- a/lib/ruby_lsp/requests/definition.rb +++ b/lib/ruby_lsp/requests/definition.rb @@ -9,12 +9,13 @@ module Requests # request](https://microsoft.github.io/language-server-protocol/specification#textDocument_definition) jumps to the # definition of the symbol under the cursor. # - # Currently, only jumping to required files is supported. + # Currently, only jumping to classes, modules and required files is supported. # # # Example # # ```ruby # require "some_gem/file" # <- Request go to definition on this string will take you to the file + # Product.new # <- Request go to definition on this class name will take you to its declaration. # ``` class Definition < Listener extend T::Sig From ec25ee557259b8aa50bf07f69e5711aa2c320659 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Thu, 24 Aug 2023 09:10:23 -0400 Subject: [PATCH 03/20] Unescape URIs using `DEFAULT_PARSER.unescape` instead of CGI (#926) --- lib/core_ext/uri.rb | 2 +- test/requests/support/uri_test.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/core_ext/uri.rb b/lib/core_ext/uri.rb index 319199b1e..a0125b9ed 100644 --- a/lib/core_ext/uri.rb +++ b/lib/core_ext/uri.rb @@ -26,7 +26,7 @@ def to_standardized_path parsed_path = path return unless parsed_path - unescaped_path = CGI.unescape(parsed_path) + unescaped_path = DEFAULT_PARSER.unescape(parsed_path) # On Windows, when we're getting the file system path back from the URI, we need to remove the leading forward # slash diff --git a/test/requests/support/uri_test.rb b/test/requests/support/uri_test.rb index b492a3424..a38c4bfc7 100644 --- a/test/requests/support/uri_test.rb +++ b/test/requests/support/uri_test.rb @@ -39,5 +39,11 @@ def test_to_standardized_path_on_windows_with_received_uri uri = URI("file:///c%3A/some/windows/path/to/file.rb") assert_equal("c:/some/windows/path/to/file.rb", uri.to_standardized_path) end + + def test_plus_signs_are_properly_unescaped + path = "/opt/rubies/3.3.0/lib/ruby/3.3.0+0/pathname.rb" + uri = URI::Generic.from_path(path: path) + assert_equal(path, uri.to_standardized_path) + end end end From 3a43626063cdc73fe6c69f7b7fd1ddab586efd08 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Thu, 24 Aug 2023 09:35:18 -0400 Subject: [PATCH 04/20] Make the indexed paths more specific to avoid duplications (#922) Avoid duplications when indexing --- .../lib/ruby_indexer/configuration.rb | 76 ++++++++++++++++--- lib/ruby_indexer/test/configuration_test.rb | 44 +++++++++++ 2 files changed, 108 insertions(+), 12 deletions(-) diff --git a/lib/ruby_indexer/lib/ruby_indexer/configuration.rb b/lib/ruby_indexer/lib/ruby_indexer/configuration.rb index 2eb35ee5a..866dc0e5e 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/configuration.rb @@ -18,13 +18,16 @@ class Configuration sig { void } def initialize - development_only_dependencies = Bundler.definition.dependencies.filter_map do |dependency| + excluded_gem_names = Bundler.definition.dependencies.filter_map do |dependency| dependency.name if dependency.groups == [:development] end - @excluded_gems = T.let(development_only_dependencies, T::Array[String]) + @excluded_gems = T.let(excluded_gem_names, T::Array[String]) @included_gems = T.let([], T::Array[String]) @excluded_patterns = T.let(["**/*_test.rb"], T::Array[String]) + path = Bundler.settings["path"] + @excluded_patterns << "#{File.expand_path(path, Dir.pwd)}/**/*.rb" if path + @included_patterns = T.let(["#{Dir.pwd}/**/*.rb"], T::Array[String]) @excluded_magic_comments = T.let( [ @@ -60,22 +63,71 @@ def load_config sig { returns(T::Array[String]) } def files_to_index - files_to_index = $LOAD_PATH.flat_map { |p| Dir.glob("#{p}/**/*.rb", base: p) } + excluded_gems = @excluded_gems - @included_gems + locked_gems = Bundler.locked_gems&.specs - @included_patterns.each do |pattern| - files_to_index.concat(Dir.glob(pattern, File::FNM_PATHNAME | File::FNM_EXTGLOB)) - end + # NOTE: indexing the patterns (both included and excluded) needs to happen before indexing gems, otherwise we risk + # having duplicates if BUNDLE_PATH is set to a folder inside the project structure - excluded_gem_paths = (@excluded_gems - @included_gems).filter_map do |gem_name| - Gem::Specification.find_by_name(gem_name).full_gem_path - rescue Gem::MissingSpecError - warn("Gem #{gem_name} is excluded in .index.yml, but that gem was not found in the bundle") + # Add user specified patterns + files_to_index = @included_patterns.flat_map do |pattern| + Dir.glob(pattern, File::FNM_PATHNAME | File::FNM_EXTGLOB) end + # Remove user specified patterns files_to_index.reject! do |path| - @excluded_patterns.any? { |pattern| File.fnmatch?(pattern, path, File::FNM_PATHNAME | File::FNM_EXTGLOB) } || - excluded_gem_paths.any? { |gem_path| File.fnmatch?("#{gem_path}/**/*.rb", path) } + @excluded_patterns.any? do |pattern| + File.fnmatch?(pattern, path, File::FNM_PATHNAME | File::FNM_EXTGLOB) + end + end + + # Add default gems to the list of files to be indexed + Dir.glob("#{RbConfig::CONFIG["rubylibdir"]}/*").each do |default_path| + # The default_path might be a Ruby file or a folder with the gem's name. For example: + # bundler/ + # bundler.rb + # psych/ + # psych.rb + pathname = Pathname.new(default_path) + short_name = pathname.basename.to_s.delete_suffix(".rb") + + # If the gem name is excluded, then we skip it + next if excluded_gems.include?(short_name) + + # If the default gem is also a part of the bundle, we skip indexing the default one and index only the one in + # the bundle, which won't be in `default_path`, but will be in `Bundler.bundle_path` instead + next if locked_gems&.any? do |locked_spec| + locked_spec.name == short_name && + !Gem::Specification.find_by_name(short_name).full_gem_path.start_with?(RbConfig::CONFIG["rubylibprefix"]) + end + + if pathname.directory? + # If the default_path is a directory, we index all the Ruby files in it + files_to_index.concat(Dir.glob("#{default_path}/**/*.rb", File::FNM_PATHNAME | File::FNM_EXTGLOB)) + else + # If the default_path is a Ruby file, we index it + files_to_index << default_path + end + end + + # Add the locked gems to the list of files to be indexed + locked_gems&.each do |spec| + next if excluded_gems.include?(spec.name) + + full_gem_path = Gem::Specification.find_by_name(spec.name).full_gem_path + + # When working on a gem, it will be included in the locked_gems list. Since these are the project's own files, + # we have already included and handled exclude patterns for it and should not re-include or it'll lead to + # duplicates or accidentally ignoring exclude patterns + next if full_gem_path == Dir.pwd + + files_to_index.concat(Dir.glob("#{full_gem_path}/**/*.rb")) + rescue Gem::MissingSpecError + # If a gem is scoped only to some specific platform, then its dependencies may not be installed either, but they + # are still listed in locked_gems. We can't index them because they are not installed for the platform, so we + # just ignore if they're missing end + files_to_index.uniq! files_to_index end diff --git a/lib/ruby_indexer/test/configuration_test.rb b/lib/ruby_indexer/test/configuration_test.rb index 347c66ab5..2406fcc5f 100644 --- a/lib/ruby_indexer/test/configuration_test.rb +++ b/lib/ruby_indexer/test/configuration_test.rb @@ -18,6 +18,50 @@ def test_load_configuration_executes_configure_block assert(files_to_index.none? { |path| path == __FILE__ }) end + def test_files_to_index_does_not_include_default_gem_path_when_in_bundle + @config.load_config + files_to_index = @config.files_to_index + + assert(files_to_index.none? { |path| path.start_with?("#{RbConfig::CONFIG["rubylibdir"]}/psych") }) + end + + def test_files_to_index_includes_default_gems + @config.load_config + files_to_index = @config.files_to_index + + assert_includes(files_to_index, "#{RbConfig::CONFIG["rubylibdir"]}/pathname.rb") + assert_includes(files_to_index, "#{RbConfig::CONFIG["rubylibdir"]}/ipaddr.rb") + assert_includes(files_to_index, "#{RbConfig::CONFIG["rubylibdir"]}/abbrev.rb") + end + + def test_files_to_index_includes_project_files + @config.load_config + files_to_index = @config.files_to_index + + Dir.glob("#{Dir.pwd}/lib/**/*.rb").each do |path| + next if path.end_with?("_test.rb") + + assert_includes(files_to_index, path) + end + end + + def test_files_to_index_avoids_duplicates_if_bundle_path_is_inside_project + Bundler.settings.set_global("path", "vendor/bundle") + config = Configuration.new + config.load_config + + assert_includes(config.instance_variable_get(:@excluded_patterns), "#{Dir.pwd}/vendor/bundle/**/*.rb") + ensure + Bundler.settings.set_global("path", nil) + end + + def test_files_to_index_does_not_include_gems_own_installed_files + @config.load_config + files_to_index = @config.files_to_index + + assert(files_to_index.none? { |path| path.start_with?(Bundler.bundle_path.join("gems", "ruby-lsp").to_s) }) + end + def test_paths_are_unique @config.load_config files_to_index = @config.files_to_index From 670f9048fc7c662d7289e87a85007841a5275834 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Thu, 24 Aug 2023 10:02:17 -0400 Subject: [PATCH 05/20] Add hover for classes, modules and constants (#915) * Delete Rails hover related files * Remove railties * Allow passing a fragment to URI.from_path * Add hover for classes, modules and constants * Remove RailsClient reference in benchmark script --- Gemfile | 3 - Gemfile.lock | 51 -------- bin/benchmark | 3 - lib/core_ext/uri.rb | 6 +- lib/ruby_indexer/lib/ruby_indexer/index.rb | 5 + lib/ruby_lsp/executor.rb | 12 +- lib/ruby_lsp/requests/hover.rb | 81 +++++++----- .../requests/support/rails_document_client.rb | 122 ------------------ misc/hover.gif | Bin 0 -> 326103 bytes misc/rails_document_link_hover.gif | Bin 221007 -> 0 bytes test/expectations/hover/controller.exp.json | 24 ---- .../hover/documented_class.exp.json | 24 ++++ .../hover/documented_constant.exp.json | 24 ++++ .../hover/documented_module.exp.json | 24 ++++ test/expectations/hover/job.exp.json | 24 ---- test/expectations/hover/model.exp.json | 24 ---- .../hover/model_action_text.exp.json | 24 ---- .../model_active_record_constant.exp.json | 24 ---- .../hover/model_active_storage.exp.json | 24 ---- test/expectations/hover/routes.exp.json | 24 ---- test/fixtures/documented_class.rb | 7 + test/fixtures/documented_constant.rb | 2 + test/fixtures/documented_module.rb | 3 + test/fixtures/rails_app/config/routes.rb | 3 - .../rails_app/controllers/controller.rb | 3 - test/fixtures/rails_app/jobs/job.rb | 4 - test/fixtures/rails_app/models/model.rb | 3 - .../rails_app/models/model_action_text.rb | 3 - .../models/model_active_record_constant.rb | 2 - .../rails_app/models/model_active_storage.rb | 3 - test/requests/hover_expectations_test.rb | 69 +++------- test/requests/support/uri_test.rb | 5 + 32 files changed, 175 insertions(+), 455 deletions(-) delete mode 100644 lib/ruby_lsp/requests/support/rails_document_client.rb create mode 100644 misc/hover.gif delete mode 100644 misc/rails_document_link_hover.gif delete mode 100644 test/expectations/hover/controller.exp.json create mode 100644 test/expectations/hover/documented_class.exp.json create mode 100644 test/expectations/hover/documented_constant.exp.json create mode 100644 test/expectations/hover/documented_module.exp.json delete mode 100644 test/expectations/hover/job.exp.json delete mode 100644 test/expectations/hover/model.exp.json delete mode 100644 test/expectations/hover/model_action_text.exp.json delete mode 100644 test/expectations/hover/model_active_record_constant.exp.json delete mode 100644 test/expectations/hover/model_active_storage.exp.json delete mode 100644 test/expectations/hover/routes.exp.json create mode 100644 test/fixtures/documented_class.rb create mode 100644 test/fixtures/documented_constant.rb create mode 100644 test/fixtures/documented_module.rb delete mode 100644 test/fixtures/rails_app/config/routes.rb delete mode 100644 test/fixtures/rails_app/controllers/controller.rb delete mode 100644 test/fixtures/rails_app/jobs/job.rb delete mode 100644 test/fixtures/rails_app/models/model.rb delete mode 100644 test/fixtures/rails_app/models/model_action_text.rb delete mode 100644 test/fixtures/rails_app/models/model_active_record_constant.rb delete mode 100644 test/fixtures/rails_app/models/model_active_storage.rb diff --git a/Gemfile b/Gemfile index 07b11c9ac..db9be3a40 100644 --- a/Gemfile +++ b/Gemfile @@ -23,7 +23,4 @@ group :development do gem "tapioca", "~> 0.11", require: false, platforms: NON_WINDOWS_PLATFORMS gem "rdoc", require: false gem "psych", "~> 5.1", require: false - - # The Rails documentation link only activates when railties is detected. - gem "railties", "~> 7.0", require: false end diff --git a/Gemfile.lock b/Gemfile.lock index 2245015e3..38b38eeda 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,47 +10,20 @@ PATH GEM remote: https://rubygems.org/ specs: - actionpack (7.0.6) - actionview (= 7.0.6) - activesupport (= 7.0.6) - rack (~> 2.0, >= 2.2.4) - rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.6) - activesupport (= 7.0.6) - builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activesupport (7.0.6) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 1.6, < 2) - minitest (>= 5.1) - tzinfo (~> 2.0) ansi (1.5.0) ast (2.4.2) base64 (0.1.1) builder (3.2.4) - concurrent-ruby (1.2.2) - crass (1.0.6) debug (1.8.0) irb (>= 1.5.0) reline (>= 0.3.1) diff-lcs (1.5.0) erubi (1.12.0) - i18n (1.14.1) - concurrent-ruby (~> 1.0) io-console (0.6.0) irb (1.7.0) reline (>= 0.3.0) json (2.6.3) language_server-protocol (3.17.0.3) - loofah (2.21.3) - crass (~> 1.0.2) - nokogiri (>= 1.12.0) - method_source (1.0.0) - mini_portile2 (2.8.2) minitest (5.19.0) minitest-reporters (1.6.1) ansi @@ -60,9 +33,6 @@ GEM mocha (2.1.0) ruby2_keywords (>= 0.0.5) netrc (0.11.0) - nokogiri (1.15.2) - mini_portile2 (~> 2.8.2) - racc (~> 1.4) parallel (1.23.0) parser (3.2.2.3) ast (~> 2.4.1) @@ -71,23 +41,6 @@ GEM psych (5.1.0) stringio racc (1.7.1) - rack (2.2.7) - rack-test (2.1.0) - rack (>= 1.3) - rails-dom-testing (2.1.1) - activesupport (>= 5.0.0) - minitest - nokogiri (>= 1.6) - rails-html-sanitizer (1.6.0) - loofah (~> 2.21) - nokogiri (~> 1.14) - railties (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) - method_source - rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) rainbow (3.1.1) rake (13.0.6) rbi (0.0.17) @@ -160,8 +113,6 @@ GEM thor (>= 1.2.0) yard-sorbet thor (1.2.2) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) unicode-display_width (2.4.2) unparser (0.6.8) diff-lcs (~> 1.3) @@ -171,7 +122,6 @@ GEM sorbet-runtime (>= 0.5) yard (>= 0.9) yarp (0.8.0) - zeitwerk (2.6.8) PLATFORMS arm64-darwin @@ -187,7 +137,6 @@ DEPENDENCIES minitest-reporters (~> 1.6) mocha (~> 2.1) psych (~> 5.1) - railties (~> 7.0) rake (~> 13.0) rdoc rubocop (~> 1.56) diff --git a/bin/benchmark b/bin/benchmark index 9ebda309a..736cb531d 100755 --- a/bin/benchmark +++ b/bin/benchmark @@ -24,9 +24,6 @@ require "benchmark" # Run signature blocks ahead of time T::Utils.run_all_sig_blocks -# Fetch Rails documents ahead of time -RubyLsp::Requests::Support::RailsDocumentClient.send(:search_index) - # Build gem file paths ahead of time RubyLsp::Requests::DocumentLink.gem_paths diff --git a/lib/core_ext/uri.rb b/lib/core_ext/uri.rb index a0125b9ed..2f3d02386 100644 --- a/lib/core_ext/uri.rb +++ b/lib/core_ext/uri.rb @@ -6,8 +6,8 @@ class Generic class << self extend T::Sig - sig { params(path: String, scheme: String).returns(URI::Generic) } - def from_path(path:, scheme: "file") + sig { params(path: String, fragment: T.nilable(String), scheme: String).returns(URI::Generic) } + def from_path(path:, fragment: nil, scheme: "file") # On Windows, if the path begins with the disk name, we need to add a leading slash to make it a valid URI escaped_path = if /^[A-Z]:/i.match?(path) DEFAULT_PARSER.escape("/#{path}") @@ -15,7 +15,7 @@ def from_path(path:, scheme: "file") DEFAULT_PARSER.escape(path) end - build(scheme: scheme, path: escaped_path) + build(scheme: scheme, path: escaped_path, fragment: fragment) end end diff --git a/lib/ruby_indexer/lib/ruby_indexer/index.rb b/lib/ruby_indexer/lib/ruby_indexer/index.rb index e4cc3edf4..c51a021aa 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/index.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/index.rb @@ -120,6 +120,11 @@ def initialize(name, file_path, location, comments) @comments = comments end + sig { returns(String) } + def file_name + File.basename(@file_path) + end + class Namespace < Entry sig { returns(String) } def short_name diff --git a/lib/ruby_lsp/executor.rb b/lib/ruby_lsp/executor.rb index e14502bf0..b3528b820 100644 --- a/lib/ruby_lsp/executor.rb +++ b/lib/ruby_lsp/executor.rb @@ -259,16 +259,20 @@ def hover(uri, position) document = @store.get(uri) return if document.syntax_error? - target, parent = document.locate_node(position) + target, parent, nesting = document.locate_node( + position, + node_types: Requests::Hover::ALLOWED_TARGETS, + ) - if !Requests::Hover::ALLOWED_TARGETS.include?(target.class) && - Requests::Hover::ALLOWED_TARGETS.include?(parent.class) + if (Requests::Hover::ALLOWED_TARGETS.include?(parent.class) && + !Requests::Hover::ALLOWED_TARGETS.include?(target.class)) || + (parent.is_a?(SyntaxTree::ConstPathRef) && target.is_a?(SyntaxTree::Const)) target = parent end # Instantiate all listeners emitter = EventEmitter.new - hover = Requests::Hover.new(emitter, @message_queue) + hover = Requests::Hover.new(@index, nesting, emitter, @message_queue) # Emit events for all listeners emitter.emit_for_target(target) diff --git a/lib/ruby_lsp/requests/hover.rb b/lib/ruby_lsp/requests/hover.rb index a7c2378ba..70359396a 100644 --- a/lib/ruby_lsp/requests/hover.rb +++ b/lib/ruby_lsp/requests/hover.rb @@ -3,19 +3,15 @@ module RubyLsp module Requests - # ![Hover demo](../../rails_document_link_hover.gif) + # ![Hover demo](../../hover.gif) # # The [hover request](https://microsoft.github.io/language-server-protocol/specification#textDocument_hover) - # renders a clickable link to the code's official documentation. - # It currently only supports Rails' documentation: when hovering over Rails DSLs/constants under certain paths, - # like `before_save :callback` in `models/post.rb`, it generates a link to `before_save`'s API documentation. + # displays the documentation for the symbol currently under the cursor. # # # Example # # ```ruby - # class Post < ApplicationRecord - # before_save :do_something # when hovering on before_save, the link will be rendered - # end + # String # -> Hovering over the class reference will show all declaration locations and the documentation # ``` class Hover < Listener extend T::Sig @@ -25,6 +21,7 @@ class Hover < Listener ALLOWED_TARGETS = T.let( [ + SyntaxTree::Const, SyntaxTree::Command, SyntaxTree::CallNode, SyntaxTree::ConstPathRef, @@ -35,15 +32,24 @@ class Hover < Listener sig { override.returns(ResponseType) } attr_reader :response - sig { params(emitter: EventEmitter, message_queue: Thread::Queue).void } - def initialize(emitter, message_queue) - super + sig do + params( + index: RubyIndexer::Index, + nesting: T::Array[String], + emitter: EventEmitter, + message_queue: Thread::Queue, + ).void + end + def initialize(index, nesting, emitter, message_queue) + super(emitter, message_queue) + @nesting = nesting + @index = index @external_listeners.concat( Extension.extensions.filter_map { |ext| ext.create_hover_listener(emitter, message_queue) }, ) @response = T.let(nil, ResponseType) - emitter.register(self, :on_command, :on_const_path_ref, :on_call) + emitter.register(self, :on_const_path_ref, :on_const) end # Merges responses from other hover listeners @@ -61,34 +67,51 @@ def merge_response!(other) self end - sig { params(node: SyntaxTree::Command).void } - def on_command(node) - message = node.message - @response = generate_rails_document_link_hover(message.value, message) - end - sig { params(node: SyntaxTree::ConstPathRef).void } def on_const_path_ref(node) - @response = generate_rails_document_link_hover(full_constant_name(node), node) + return if DependencyDetector::HAS_TYPECHECKER + + name = full_constant_name(node) + generate_hover(name, node) end - sig { params(node: SyntaxTree::CallNode).void } - def on_call(node) - message = node.message - return if message.is_a?(Symbol) + sig { params(node: SyntaxTree::Const).void } + def on_const(node) + return if DependencyDetector::HAS_TYPECHECKER - @response = generate_rails_document_link_hover(message.value, message) + generate_hover(node.value, node) end private - sig { params(name: String, node: SyntaxTree::Node).returns(T.nilable(Interface::Hover)) } - def generate_rails_document_link_hover(name, node) - urls = Support::RailsDocumentClient.generate_rails_document_urls(name) - return if urls.empty? + sig { params(name: String, node: SyntaxTree::Node).void } + def generate_hover(name, node) + entries = @index.resolve(name, @nesting) + return unless entries + + title = +"```ruby\n#{name}\n```" + definitions = [] + content = +"" + entries.each do |entry| + loc = entry.location + + # We always handle locations as zero based. However, for file links in Markdown we need them to be one based, + # which is why instead of the usual subtraction of 1 to line numbers, we are actually adding 1 to columns. The + # format for VS Code file URIs is `file:///path/to/file.rb#Lstart_line,start_column-end_line,end_column` + uri = URI::Generic.from_path( + path: entry.file_path, + fragment: "L#{loc.start_line},#{loc.start_column + 1}-#{loc.end_line},#{loc.end_column + 1}", + ) + + definitions << "[#{entry.file_name}](#{uri})" + content << "\n\n#{entry.comments.join("\n")}" unless entry.comments.empty? + end - contents = Interface::MarkupContent.new(kind: "markdown", value: urls.join("\n\n")) - Interface::Hover.new(range: range_from_syntax_tree_node(node), contents: contents) + contents = Interface::MarkupContent.new( + kind: "markdown", + value: "#{title}\n\n**Definitions**: #{definitions.join(" | ")}\n\n#{content}", + ) + @response = Interface::Hover.new(range: range_from_syntax_tree_node(node), contents: contents) end end end diff --git a/lib/ruby_lsp/requests/support/rails_document_client.rb b/lib/ruby_lsp/requests/support/rails_document_client.rb deleted file mode 100644 index 5598218aa..000000000 --- a/lib/ruby_lsp/requests/support/rails_document_client.rb +++ /dev/null @@ -1,122 +0,0 @@ -# typed: strict -# frozen_string_literal: true - -require "net/http" - -module RubyLsp - module Requests - module Support - class RailsDocumentClient - RAILS_DOC_HOST = "https://api.rubyonrails.org" - SUPPORTED_RAILS_DOC_NAMESPACES = T.let( - Regexp.union( - /ActionDispatch/, - /ActionController/, - /AbstractController/, - /ActiveRecord/, - /ActiveModel/, - /ActiveStorage/, - /ActionText/, - /ActiveJob/, - ).freeze, - Regexp, - ) - - RAILTIES_VERSION = T.let( - [*::Gem::Specification.default_stubs, *::Gem::Specification.stubs].find do |s| - s.name == "railties" - end&.version&.to_s, - T.nilable(String), - ) - - class << self - extend T::Sig - sig do - params(name: String).returns(T::Array[String]) - end - def generate_rails_document_urls(name) - docs = search_index&.fetch(name, nil) - - return [] unless docs - - docs.map do |doc| - owner = doc[:owner] - - link_name = - # class/module name - if owner == name - name - else - "#{owner}##{name}" - end - - "[Rails Document: `#{link_name}`](#{doc[:url]})" - end - end - - sig { returns(T.nilable(T::Hash[String, T::Array[T::Hash[Symbol, String]]])) } - private def search_index - @rails_documents ||= T.let( - build_search_index, - T.nilable(T::Hash[String, T::Array[T::Hash[Symbol, String]]]), - ) - end - - sig { returns(T.nilable(T::Hash[String, T::Array[T::Hash[Symbol, String]]])) } - private def build_search_index - return unless RAILTIES_VERSION - - warn("Fetching Rails Documents...") - - response = Net::HTTP.get_response(URI("#{RAILS_DOC_HOST}/v#{RAILTIES_VERSION}/js/search_index.js")) - - if response.code == "302" - # If the version's doc is not found, e.g. Rails main, it'll be redirected - # In this case, we just fetch the latest doc - response = Net::HTTP.get_response(URI("#{RAILS_DOC_HOST}/js/search_index.js")) - end - - if response.code == "200" - process_search_index(response.body) - else - warn("Response failed: #{response.inspect}") - nil - end - rescue StandardError => e - warn("Exception occurred when fetching Rails document index: #{e.inspect}") - end - - sig { params(js: String).returns(T::Hash[String, T::Array[T::Hash[Symbol, String]]]) } - private def process_search_index(js) - raw_data = js.sub("var search_data = ", "") - info = JSON.parse(raw_data).dig("index", "info") - - # An entry looks like this: - # - # ["belongs_to", # method or module/class - # "ActiveRecord::Associations::ClassMethods", # method owner - # "classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to", # path to the document - # "(name, scope = nil, **options)", # method's parameters - # "

Specifies a one-to-one association with another class..."] # document preview - # - info.each_with_object({}) do |(method_or_class, method_owner, doc_path, _, doc_preview), table| - # If a method doesn't have documentation, there's no need to generate the link to it. - next if doc_preview.nil? || doc_preview.empty? - - # If the method or class/module is not from the supported namespace, reject it - next unless [method_or_class, method_owner].any? do |elem| - elem.match?(SUPPORTED_RAILS_DOC_NAMESPACES) - end - - owner = method_owner.empty? ? method_or_class : method_owner - table[method_or_class] ||= [] - # It's possible to have multiple modules defining the same method name. For example, - # both `ActiveRecord::FinderMethods` and `ActiveRecord::Associations::CollectionProxy` defines `#find` - table[method_or_class] << { owner: owner, url: "#{RAILS_DOC_HOST}/v#{RAILTIES_VERSION}/#{doc_path}" } - end - end - end - end - end - end -end diff --git a/misc/hover.gif b/misc/hover.gif new file mode 100644 index 0000000000000000000000000000000000000000..82a33c5a35ba5385ad5cf1637030d645cce8663a GIT binary patch literal 326103 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

FO6*SU%7p+W?Cv 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ଵ$FG)~F2~Cv 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 W=D| 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 literal 0 HcmV?d00001 diff --git a/misc/rails_document_link_hover.gif b/misc/rails_document_link_hover.gif deleted file mode 100644 index 4dcce1cff0fef4218df1279779a9a7e644532e4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221007 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%0AkX9u@ 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

-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 Z1;`8r Date: Thu, 24 Aug 2023 10:03:23 -0400 Subject: [PATCH 06/20] Expand heredoc test for selection range (#927) * Expand heredoc test for selection range * Adjust start position in fixture --------- Co-authored-by: Andy Waite --- test/expectations/selection_ranges/heredoc.exp.json | 6 +++--- test/fixtures/heredoc.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/expectations/selection_ranges/heredoc.exp.json b/test/expectations/selection_ranges/heredoc.exp.json index d03540b13..63f0acc7c 100644 --- a/test/expectations/selection_ranges/heredoc.exp.json +++ b/test/expectations/selection_ranges/heredoc.exp.json @@ -2,7 +2,7 @@ "params": [ { "line": 1, - "character": 2 + "character": 15 } ], "result": [ @@ -10,11 +10,11 @@ "range": { "start": { "line": 1, - "character": 0 + "character": 13 }, "end": { "line": 1, - "character": 12 + "character": 18 } }, "parent": { diff --git a/test/fixtures/heredoc.rb b/test/fixtures/heredoc.rb index edcd60b10..940fe5144 100644 --- a/test/fixtures/heredoc.rb +++ b/test/fixtures/heredoc.rb @@ -1,3 +1,3 @@ <<~HEREDOC - some text + some text#{1 + 1}other text HEREDOC From 8a5f70bf28fc57225d3943fd662019438e8a8382 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Thu, 24 Aug 2023 11:13:00 -0400 Subject: [PATCH 07/20] Update rbis (#928) * Force psych RBI to be typed false Since we have psych as part of the bundle, Tapioca generates it and the generated RBI doesn't match the definitions in the Sorbet payload * Add Rack::Server shim for YARD RBI * Re-generate gem RBIs --- sorbet/rbi/gems/actionpack@7.0.5.rbi | 8 - sorbet/rbi/gems/actionview@7.0.5.rbi | 8 - sorbet/rbi/gems/activesupport@7.0.5.rbi | 14 - sorbet/rbi/gems/base64@0.1.1.rbi | 172 + sorbet/rbi/gems/concurrent-ruby@1.2.2.rbi | 8 - sorbet/rbi/gems/crass@1.0.6.rbi | 8 - sorbet/rbi/gems/erubi@1.12.0.rbi | 141 +- sorbet/rbi/gems/i18n@1.13.0.rbi | 8 - sorbet/rbi/gems/loofah@2.21.3.rbi | 8 - sorbet/rbi/gems/method_source@1.0.0.rbi | 8 - sorbet/rbi/gems/mini_portile2@2.8.2.rbi | 8 - ...1.6.0.rbi => minitest-reporters@1.6.1.rbi} | 46 +- ...initest@5.18.0.rbi => minitest@5.19.0.rbi} | 314 +- .../gems/{mocha@2.0.4.rbi => mocha@2.1.0.rbi} | 0 sorbet/rbi/gems/nokogiri@1.15.2.rbi | 8 - .../gems/{racc@1.6.2.rbi => racc@1.7.1.rbi} | 77 +- sorbet/rbi/gems/rack-test@2.1.0.rbi | 8 - sorbet/rbi/gems/rack@2.2.7.rbi | 5614 ----------------- sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi | 8 - .../rbi/gems/rails-html-sanitizer@1.6.0.rbi | 8 - sorbet/rbi/gems/railties@7.0.5.rbi | 8 - .../gems/{rbi@0.0.16.rbi => rbi@0.0.17.rbi} | 1087 ++-- sorbet/rbi/gems/tzinfo@2.0.6.rbi | 8 - sorbet/rbi/gems/zeitwerk@2.6.8.rbi | 8 - sorbet/rbi/shims/rack.rbi | 5 + sorbet/tapioca/config.yml | 2 + 26 files changed, 1047 insertions(+), 6545 deletions(-) delete mode 100644 sorbet/rbi/gems/actionpack@7.0.5.rbi delete mode 100644 sorbet/rbi/gems/actionview@7.0.5.rbi delete mode 100644 sorbet/rbi/gems/activesupport@7.0.5.rbi create mode 100644 sorbet/rbi/gems/base64@0.1.1.rbi delete mode 100644 sorbet/rbi/gems/concurrent-ruby@1.2.2.rbi delete mode 100644 sorbet/rbi/gems/crass@1.0.6.rbi delete mode 100644 sorbet/rbi/gems/i18n@1.13.0.rbi delete mode 100644 sorbet/rbi/gems/loofah@2.21.3.rbi delete mode 100644 sorbet/rbi/gems/method_source@1.0.0.rbi delete mode 100644 sorbet/rbi/gems/mini_portile2@2.8.2.rbi rename sorbet/rbi/gems/{minitest-reporters@1.6.0.rbi => minitest-reporters@1.6.1.rbi} (96%) rename sorbet/rbi/gems/{minitest@5.18.0.rbi => minitest@5.19.0.rbi} (85%) rename sorbet/rbi/gems/{mocha@2.0.4.rbi => mocha@2.1.0.rbi} (100%) delete mode 100644 sorbet/rbi/gems/nokogiri@1.15.2.rbi rename sorbet/rbi/gems/{racc@1.6.2.rbi => racc@1.7.1.rbi} (62%) delete mode 100644 sorbet/rbi/gems/rack-test@2.1.0.rbi delete mode 100644 sorbet/rbi/gems/rack@2.2.7.rbi delete mode 100644 sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi delete mode 100644 sorbet/rbi/gems/rails-html-sanitizer@1.6.0.rbi delete mode 100644 sorbet/rbi/gems/railties@7.0.5.rbi rename sorbet/rbi/gems/{rbi@0.0.16.rbi => rbi@0.0.17.rbi} (74%) delete mode 100644 sorbet/rbi/gems/tzinfo@2.0.6.rbi delete mode 100644 sorbet/rbi/gems/zeitwerk@2.6.8.rbi create mode 100644 sorbet/rbi/shims/rack.rbi diff --git a/sorbet/rbi/gems/actionpack@7.0.5.rbi b/sorbet/rbi/gems/actionpack@7.0.5.rbi deleted file mode 100644 index be565d7a0..000000000 --- a/sorbet/rbi/gems/actionpack@7.0.5.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `actionpack` gem. -# Please instead update this file by running `bin/tapioca gem actionpack`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/actionview@7.0.5.rbi b/sorbet/rbi/gems/actionview@7.0.5.rbi deleted file mode 100644 index 79d7b03f7..000000000 --- a/sorbet/rbi/gems/actionview@7.0.5.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `actionview` gem. -# Please instead update this file by running `bin/tapioca gem actionview`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/activesupport@7.0.5.rbi b/sorbet/rbi/gems/activesupport@7.0.5.rbi deleted file mode 100644 index 9afcbd12c..000000000 --- a/sorbet/rbi/gems/activesupport@7.0.5.rbi +++ /dev/null @@ -1,14 +0,0 @@ -# typed: false - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `activesupport` gem. -# Please instead update this file by running `bin/tapioca gem activesupport`. - -class LoadError < ::ScriptError - include ::DidYouMean::Correctable -end - -class NameError < ::StandardError - include ::ErrorHighlight::CoreExt - include ::DidYouMean::Correctable -end diff --git a/sorbet/rbi/gems/base64@0.1.1.rbi b/sorbet/rbi/gems/base64@0.1.1.rbi new file mode 100644 index 000000000..58bcecc24 --- /dev/null +++ b/sorbet/rbi/gems/base64@0.1.1.rbi @@ -0,0 +1,172 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `base64` gem. +# Please instead update this file by running `bin/tapioca gem base64`. + +# The Base64 module provides for the encoding (#encode64, #strict_encode64, +# #urlsafe_encode64) and decoding (#decode64, #strict_decode64, +# #urlsafe_decode64) of binary data using a Base64 representation. +# +# == Example +# +# A simple encoding and decoding. +# +# require "base64" +# +# enc = Base64.encode64('Send reinforcements') +# # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n" +# plain = Base64.decode64(enc) +# # -> "Send reinforcements" +# +# The purpose of using base64 to encode data is that it translates any +# binary data into purely printable characters. +module Base64 + private + + # Returns the Base64-decoded version of +str+. + # This method complies with RFC 2045. + # Characters outside the base alphabet are ignored. + # + # require 'base64' + # str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' + + # 'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' + + # 'ZSB0aHJlZQpBbmQgc28gb24uLi4K' + # puts Base64.decode64(str) + # + # Generates: + # + # This is line one + # This is line two + # This is line three + # And so on... + # + # source://base64//base64.rb#58 + def decode64(str); end + + # Returns the Base64-encoded version of +bin+. + # This method complies with RFC 2045. + # Line feeds are added to every 60 encoded characters. + # + # require 'base64' + # Base64.encode64("Now is the time for all good coders\nto learn Ruby") + # + # Generates: + # + # Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g + # UnVieQ== + # + # source://base64//base64.rb#38 + def encode64(bin); end + + # Returns the Base64-decoded version of +str+. + # This method complies with RFC 4648. + # ArgumentError is raised if +str+ is incorrectly padded or contains + # non-alphabet characters. Note that CR or LF are also rejected. + # + # source://base64//base64.rb#73 + def strict_decode64(str); end + + # Returns the Base64-encoded version of +bin+. + # This method complies with RFC 4648. + # No line feeds are added. + # + # source://base64//base64.rb#65 + def strict_encode64(bin); end + + # Returns the Base64-decoded version of +str+. + # This method complies with ``Base 64 Encoding with URL and Filename Safe + # Alphabet'' in RFC 4648. + # The alphabet uses '-' instead of '+' and '_' instead of '/'. + # + # The padding character is optional. + # This method accepts both correctly-padded and unpadded input. + # Note that it still rejects incorrectly-padded input. + # + # source://base64//base64.rb#98 + def urlsafe_decode64(str); end + + # Returns the Base64-encoded version of +bin+. + # This method complies with ``Base 64 Encoding with URL and Filename Safe + # Alphabet'' in RFC 4648. + # The alphabet uses '-' instead of '+' and '_' instead of '/'. + # Note that the result can still contain '='. + # You can remove the padding by setting +padding+ as false. + # + # source://base64//base64.rb#83 + def urlsafe_encode64(bin, padding: T.unsafe(nil)); end + + class << self + # Returns the Base64-decoded version of +str+. + # This method complies with RFC 2045. + # Characters outside the base alphabet are ignored. + # + # require 'base64' + # str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' + + # 'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' + + # 'ZSB0aHJlZQpBbmQgc28gb24uLi4K' + # puts Base64.decode64(str) + # + # Generates: + # + # This is line one + # This is line two + # This is line three + # And so on... + # + # source://base64//base64.rb#58 + def decode64(str); end + + # Returns the Base64-encoded version of +bin+. + # This method complies with RFC 2045. + # Line feeds are added to every 60 encoded characters. + # + # require 'base64' + # Base64.encode64("Now is the time for all good coders\nto learn Ruby") + # + # Generates: + # + # Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g + # UnVieQ== + # + # source://base64//base64.rb#38 + def encode64(bin); end + + # Returns the Base64-decoded version of +str+. + # This method complies with RFC 4648. + # ArgumentError is raised if +str+ is incorrectly padded or contains + # non-alphabet characters. Note that CR or LF are also rejected. + # + # source://base64//base64.rb#73 + def strict_decode64(str); end + + # Returns the Base64-encoded version of +bin+. + # This method complies with RFC 4648. + # No line feeds are added. + # + # source://base64//base64.rb#65 + def strict_encode64(bin); end + + # Returns the Base64-decoded version of +str+. + # This method complies with ``Base 64 Encoding with URL and Filename Safe + # Alphabet'' in RFC 4648. + # The alphabet uses '-' instead of '+' and '_' instead of '/'. + # + # The padding character is optional. + # This method accepts both correctly-padded and unpadded input. + # Note that it still rejects incorrectly-padded input. + # + # source://base64//base64.rb#98 + def urlsafe_decode64(str); end + + # Returns the Base64-encoded version of +bin+. + # This method complies with ``Base 64 Encoding with URL and Filename Safe + # Alphabet'' in RFC 4648. + # The alphabet uses '-' instead of '+' and '_' instead of '/'. + # Note that the result can still contain '='. + # You can remove the padding by setting +padding+ as false. + # + # source://base64//base64.rb#83 + def urlsafe_encode64(bin, padding: T.unsafe(nil)); end + end +end diff --git a/sorbet/rbi/gems/concurrent-ruby@1.2.2.rbi b/sorbet/rbi/gems/concurrent-ruby@1.2.2.rbi deleted file mode 100644 index 5b0aa746b..000000000 --- a/sorbet/rbi/gems/concurrent-ruby@1.2.2.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `concurrent-ruby` gem. -# Please instead update this file by running `bin/tapioca gem concurrent-ruby`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/crass@1.0.6.rbi b/sorbet/rbi/gems/crass@1.0.6.rbi deleted file mode 100644 index 0df5a2e40..000000000 --- a/sorbet/rbi/gems/crass@1.0.6.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `crass` gem. -# Please instead update this file by running `bin/tapioca gem crass`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/erubi@1.12.0.rbi b/sorbet/rbi/gems/erubi@1.12.0.rbi index d4a12f53e..c52738faa 100644 --- a/sorbet/rbi/gems/erubi@1.12.0.rbi +++ b/sorbet/rbi/gems/erubi@1.12.0.rbi @@ -4,5 +4,142 @@ # This is an autogenerated file for types exported from the `erubi` gem. # Please instead update this file by running `bin/tapioca gem erubi`. -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem +# source://erubi//lib/erubi.rb#3 +module Erubi + class << self + def h(_arg0); end + end +end + +# source://erubi//lib/erubi.rb#54 +class Erubi::Engine + # Initialize a new Erubi::Engine. Options: + # +:bufval+ :: The value to use for the buffer variable, as a string (default '::String.new'). + # +:bufvar+ :: The variable name to use for the buffer variable, as a string. + # +:chain_appends+ :: Whether to chain << calls to the buffer variable. Offers better + # performance, but can cause issues when the buffer variable is reassigned during + # template rendering (default +false+). + # +:ensure+ :: Wrap the template in a begin/ensure block restoring the previous value of bufvar. + # +:escapefunc+ :: The function to use for escaping, as a string (default: '::Erubi.h'). + # +:escape+ :: Whether to make <%= escape by default, and <%== not escape by default. + # +:escape_html+ :: Same as +:escape+, with lower priority. + # +:filename+ :: The filename for the template. + # the resulting source code. Note this may cause problems if you are wrapping the resulting + # source code in other code, because the magic comment only has an effect at the beginning of + # the file, and having the magic comment later in the file can trigger warnings. + # +:freeze_template_literals+ :: Whether to suffix all literal strings for template code with .freeze + # (default: +true+ on Ruby 2.1+, +false+ on Ruby 2.0 and older). + # Can be set to +false+ on Ruby 2.3+ when frozen string literals are enabled + # in order to improve performance. + # +:literal_prefix+ :: The prefix to output when using escaped tag delimiters (default '<%'). + # +:literal_postfix+ :: The postfix to output when using escaped tag delimiters (default '%>'). + # +:outvar+ :: Same as +:bufvar+, with lower priority. + # +:postamble+ :: The postamble for the template, by default returns the resulting source code. + # +:preamble+ :: The preamble for the template, by default initializes the buffer variable. + # +:regexp+ :: The regexp to use for scanning. + # +:src+ :: The initial value to use for the source code, an empty string by default. + # +:trim+ :: Whether to trim leading and trailing whitespace, true by default. + # + # @return [Engine] a new instance of Engine + # + # source://erubi//lib/erubi.rb#94 + def initialize(input, properties = T.unsafe(nil)); end + + # The variable name used for the buffer variable. + # + # source://erubi//lib/erubi.rb#65 + def bufvar; end + + # The filename of the template, if one was given. + # + # source://erubi//lib/erubi.rb#62 + def filename; end + + # The frozen ruby source code generated from the template, which can be evaled. + # + # source://erubi//lib/erubi.rb#59 + def src; end + + private + + # Add ruby code to the template + # + # source://erubi//lib/erubi.rb#226 + def add_code(code); end + + # Add the given ruby expression result to the template, + # escaping it based on the indicator given and escape flag. + # + # source://erubi//lib/erubi.rb#235 + def add_expression(indicator, code); end + + # Add the result of Ruby expression to the template + # + # source://erubi//lib/erubi.rb#244 + def add_expression_result(code); end + + # Add the escaped result of Ruby expression to the template + # + # source://erubi//lib/erubi.rb#249 + def add_expression_result_escaped(code); end + + # Add the given postamble to the src. Can be overridden in subclasses + # to make additional changes to src that depend on the current state. + # + # source://erubi//lib/erubi.rb#255 + def add_postamble(postamble); end + + # Add raw text to the template. Modifies argument if argument is mutable as a memory optimization. + # Must be called with a string, cannot be called with nil (Rails's subclass depends on it). + # + # source://erubi//lib/erubi.rb#213 + def add_text(text); end + + # Raise an exception, as the base engine class does not support handling other indicators. + # + # @raise [ArgumentError] + # + # source://erubi//lib/erubi.rb#261 + def handle(indicator, code, tailch, rspace, lspace); end + + # Make sure that any current expression has been terminated. + # The default is to terminate all expressions, but when + # the chain_appends option is used, expressions may not be + # terminated. + # + # source://erubi//lib/erubi.rb#289 + def terminate_expression; end + + # Make sure the buffer variable is the target of the next append + # before yielding to the block. Mark that the buffer is the target + # of the next append after the block executes. + # + # This method should only be called if the block will result in + # code where << will append to the bufvar. + # + # source://erubi//lib/erubi.rb#271 + def with_buffer; end +end + +# The default regular expression used for scanning. +# +# source://erubi//lib/erubi.rb#56 +Erubi::Engine::DEFAULT_REGEXP = T.let(T.unsafe(nil), Regexp) + +# source://erubi//lib/erubi.rb#17 +Erubi::FREEZE_TEMPLATE_LITERALS = T.let(T.unsafe(nil), TrueClass) + +# source://erubi//lib/erubi.rb#15 +Erubi::MATCH_METHOD = T.let(T.unsafe(nil), Symbol) + +# source://erubi//lib/erubi.rb#8 +Erubi::RANGE_FIRST = T.let(T.unsafe(nil), Integer) + +# source://erubi//lib/erubi.rb#9 +Erubi::RANGE_LAST = T.let(T.unsafe(nil), Integer) + +# source://erubi//lib/erubi.rb#16 +Erubi::SKIP_DEFINED_FOR_INSTANCE_VARIABLE = T.let(T.unsafe(nil), TrueClass) + +# source://erubi//lib/erubi.rb#4 +Erubi::VERSION = T.let(T.unsafe(nil), String) diff --git a/sorbet/rbi/gems/i18n@1.13.0.rbi b/sorbet/rbi/gems/i18n@1.13.0.rbi deleted file mode 100644 index 49dd358b5..000000000 --- a/sorbet/rbi/gems/i18n@1.13.0.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `i18n` gem. -# Please instead update this file by running `bin/tapioca gem i18n`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/loofah@2.21.3.rbi b/sorbet/rbi/gems/loofah@2.21.3.rbi deleted file mode 100644 index 844c389fa..000000000 --- a/sorbet/rbi/gems/loofah@2.21.3.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `loofah` gem. -# Please instead update this file by running `bin/tapioca gem loofah`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/method_source@1.0.0.rbi b/sorbet/rbi/gems/method_source@1.0.0.rbi deleted file mode 100644 index fe08676ba..000000000 --- a/sorbet/rbi/gems/method_source@1.0.0.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `method_source` gem. -# Please instead update this file by running `bin/tapioca gem method_source`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/mini_portile2@2.8.2.rbi b/sorbet/rbi/gems/mini_portile2@2.8.2.rbi deleted file mode 100644 index 8029498f3..000000000 --- a/sorbet/rbi/gems/mini_portile2@2.8.2.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `mini_portile2` gem. -# Please instead update this file by running `bin/tapioca gem mini_portile2`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/minitest-reporters@1.6.0.rbi b/sorbet/rbi/gems/minitest-reporters@1.6.1.rbi similarity index 96% rename from sorbet/rbi/gems/minitest-reporters@1.6.0.rbi rename to sorbet/rbi/gems/minitest-reporters@1.6.1.rbi index bcc1b1db6..b5edefb27 100644 --- a/sorbet/rbi/gems/minitest-reporters@1.6.0.rbi +++ b/sorbet/rbi/gems/minitest-reporters@1.6.1.rbi @@ -7,73 +7,73 @@ # source://minitest-reporters//lib/minitest/reporters.rb#3 module Minitest class << self - # source://minitest/5.18.0/lib/minitest.rb#173 + # source://minitest/5.19.0/lib/minitest.rb#173 def __run(reporter, options); end - # source://minitest/5.18.0/lib/minitest.rb#94 + # source://minitest/5.19.0/lib/minitest.rb#94 def after_run(&block); end - # source://minitest/5.18.0/lib/minitest.rb#66 + # source://minitest/5.19.0/lib/minitest.rb#66 def autorun; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def backtrace_filter; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def backtrace_filter=(_arg0); end - # source://minitest/5.18.0/lib/minitest.rb#18 + # source://minitest/5.19.0/lib/minitest.rb#18 def cattr_accessor(name); end - # source://minitest/5.18.0/lib/minitest.rb#1059 + # source://minitest/5.19.0/lib/minitest.rb#1099 def clock_time; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def extensions; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def extensions=(_arg0); end - # source://minitest/5.18.0/lib/minitest.rb#264 + # source://minitest/5.19.0/lib/minitest.rb#264 def filter_backtrace(bt); end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def info_signal; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def info_signal=(_arg0); end - # source://minitest/5.18.0/lib/minitest.rb#98 + # source://minitest/5.19.0/lib/minitest.rb#98 def init_plugins(options); end - # source://minitest/5.18.0/lib/minitest.rb#105 + # source://minitest/5.19.0/lib/minitest.rb#105 def load_plugins; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def parallel_executor; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def parallel_executor=(_arg0); end - # source://minitest/5.18.0/lib/minitest.rb#186 + # source://minitest/5.19.0/lib/minitest.rb#186 def process_args(args = T.unsafe(nil)); end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def reporter; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def reporter=(_arg0); end - # source://minitest/5.18.0/lib/minitest.rb#140 + # source://minitest/5.19.0/lib/minitest.rb#140 def run(args = T.unsafe(nil)); end - # source://minitest/5.18.0/lib/minitest.rb#1050 + # source://minitest/5.19.0/lib/minitest.rb#1090 def run_one_method(klass, method_name); end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def seed; end - # source://minitest/5.18.0/lib/minitest.rb#19 + # source://minitest/5.19.0/lib/minitest.rb#19 def seed=(_arg0); end end end diff --git a/sorbet/rbi/gems/minitest@5.18.0.rbi b/sorbet/rbi/gems/minitest@5.19.0.rbi similarity index 85% rename from sorbet/rbi/gems/minitest@5.18.0.rbi rename to sorbet/rbi/gems/minitest@5.19.0.rbi index ad726b1d0..cf760e917 100644 --- a/sorbet/rbi/gems/minitest@5.18.0.rbi +++ b/sorbet/rbi/gems/minitest@5.19.0.rbi @@ -37,7 +37,7 @@ module Minitest # source://minitest//lib/minitest.rb#18 def cattr_accessor(name); end - # source://minitest//lib/minitest.rb#1059 + # source://minitest//lib/minitest.rb#1099 def clock_time; end # source://minitest//lib/minitest.rb#19 @@ -95,7 +95,7 @@ module Minitest # source://minitest//lib/minitest.rb#140 def run(args = T.unsafe(nil)); end - # source://minitest//lib/minitest.rb#1050 + # source://minitest//lib/minitest.rb#1090 def run_one_method(klass, method_name); end # source://minitest//lib/minitest.rb#19 @@ -109,7 +109,7 @@ end # Defines the API for Reporters. Subclass this and override whatever # you want. Go nuts. # -# source://minitest//lib/minitest.rb#578 +# source://minitest//lib/minitest.rb#618 class Minitest::AbstractReporter include ::Mutex_m @@ -123,13 +123,13 @@ class Minitest::AbstractReporter # # @return [Boolean] # - # source://minitest//lib/minitest.rb#612 + # source://minitest//lib/minitest.rb#652 def passed?; end # About to start running a test. This allows a reporter to show # that it is starting or that we are in the middle of a test run. # - # source://minitest//lib/minitest.rb#591 + # source://minitest//lib/minitest.rb#631 def prerecord(klass, name); end # Output and record the result of the test. Call @@ -137,17 +137,17 @@ class Minitest::AbstractReporter # result character string. Stores the result of the run if the run # did not pass. # - # source://minitest//lib/minitest.rb#600 + # source://minitest//lib/minitest.rb#640 def record(result); end # Outputs the summary of the run. # - # source://minitest//lib/minitest.rb#606 + # source://minitest//lib/minitest.rb#646 def report; end # Starts reporting on the run. # - # source://minitest//lib/minitest.rb#584 + # source://minitest//lib/minitest.rb#624 def start; end # source://mutex_m/0.1.2/mutex_m.rb#78 @@ -162,20 +162,20 @@ end # Represents run failures. # -# source://minitest//lib/minitest.rb#895 +# source://minitest//lib/minitest.rb#935 class Minitest::Assertion < ::Exception - # source://minitest//lib/minitest.rb#896 + # source://minitest//lib/minitest.rb#936 def error; end # Where was this run before an assertion was raised? # - # source://minitest//lib/minitest.rb#903 + # source://minitest//lib/minitest.rb#943 def location; end - # source://minitest//lib/minitest.rb#912 + # source://minitest//lib/minitest.rb#952 def result_code; end - # source://minitest//lib/minitest.rb#916 + # source://minitest//lib/minitest.rb#956 def result_label; end end @@ -618,60 +618,60 @@ Minitest::Assertions::UNDEFINED = T.let(T.unsafe(nil), Object) # # See Minitest.backtrace_filter=. # -# source://minitest//lib/minitest.rb#1027 +# source://minitest//lib/minitest.rb#1067 class Minitest::BacktraceFilter # Filter +bt+ to something useful. Returns the whole thing if # $DEBUG (ruby) or $MT_DEBUG (env). # - # source://minitest//lib/minitest.rb#1035 + # source://minitest//lib/minitest.rb#1075 def filter(bt); end end -# source://minitest//lib/minitest.rb#1029 +# source://minitest//lib/minitest.rb#1069 Minitest::BacktraceFilter::MT_RE = T.let(T.unsafe(nil), Regexp) # Dispatch to multiple reporters as one. # -# source://minitest//lib/minitest.rb#844 +# source://minitest//lib/minitest.rb#884 class Minitest::CompositeReporter < ::Minitest::AbstractReporter # @return [CompositeReporter] a new instance of CompositeReporter # - # source://minitest//lib/minitest.rb#850 + # source://minitest//lib/minitest.rb#890 def initialize(*reporters); end # Add another reporter to the mix. # - # source://minitest//lib/minitest.rb#862 + # source://minitest//lib/minitest.rb#902 def <<(reporter); end - # source://minitest//lib/minitest.rb#855 + # source://minitest//lib/minitest.rb#895 def io; end # @return [Boolean] # - # source://minitest//lib/minitest.rb#866 + # source://minitest//lib/minitest.rb#906 def passed?; end - # source://minitest//lib/minitest.rb#874 + # source://minitest//lib/minitest.rb#914 def prerecord(klass, name); end - # source://minitest//lib/minitest.rb#881 + # source://minitest//lib/minitest.rb#921 def record(result); end - # source://minitest//lib/minitest.rb#887 + # source://minitest//lib/minitest.rb#927 def report; end # The list of reporters to dispatch to. # - # source://minitest//lib/minitest.rb#848 + # source://minitest//lib/minitest.rb#888 def reporters; end # The list of reporters to dispatch to. # - # source://minitest//lib/minitest.rb#848 + # source://minitest//lib/minitest.rb#888 def reporters=(_arg0); end - # source://minitest//lib/minitest.rb#870 + # source://minitest//lib/minitest.rb#910 def start; end end @@ -689,48 +689,48 @@ end # # ... lots of test methods ... # end # -# source://minitest//lib/minitest.rb#971 +# source://minitest//lib/minitest.rb#1011 module Minitest::Guard # Is this running on jruby? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#976 + # source://minitest//lib/minitest.rb#1016 def jruby?(platform = T.unsafe(nil)); end # Is this running on maglev? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#983 + # source://minitest//lib/minitest.rb#1023 def maglev?(platform = T.unsafe(nil)); end # Is this running on mri? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#993 + # source://minitest//lib/minitest.rb#1033 def mri?(platform = T.unsafe(nil)); end # Is this running on macOS? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#1000 + # source://minitest//lib/minitest.rb#1040 def osx?(platform = T.unsafe(nil)); end # Is this running on rubinius? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#1007 + # source://minitest//lib/minitest.rb#1047 def rubinius?(platform = T.unsafe(nil)); end # Is this running on windows? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#1017 + # source://minitest//lib/minitest.rb#1057 def windows?(platform = T.unsafe(nil)); end end @@ -793,36 +793,36 @@ end # plugin, pull this out of the composite and replace it with your # own. # -# source://minitest//lib/minitest.rb#643 +# source://minitest//lib/minitest.rb#683 class Minitest::ProgressReporter < ::Minitest::Reporter - # source://minitest//lib/minitest.rb#644 + # source://minitest//lib/minitest.rb#684 def prerecord(klass, name); end - # source://minitest//lib/minitest.rb#651 + # source://minitest//lib/minitest.rb#691 def record(result); end end # Shared code for anything that can get passed to a Reporter. See # Minitest::Test & Minitest::Result. # -# source://minitest//lib/minitest.rb#475 +# source://minitest//lib/minitest.rb#514 module Minitest::Reportable # @raise [NotImplementedError] # - # source://minitest//lib/minitest.rb#495 + # source://minitest//lib/minitest.rb#534 def class_name; end # Did this run error? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#516 + # source://minitest//lib/minitest.rb#555 def error?; end # The location identifier of this test. Depends on a method # existing called class_name. # - # source://minitest//lib/minitest.rb#490 + # source://minitest//lib/minitest.rb#529 def location; end # Did this run pass? @@ -832,47 +832,47 @@ module Minitest::Reportable # # @return [Boolean] # - # source://minitest//lib/minitest.rb#482 + # source://minitest//lib/minitest.rb#521 def passed?; end # Returns ".", "F", or "E" based on the result of the run. # - # source://minitest//lib/minitest.rb#502 + # source://minitest//lib/minitest.rb#541 def result_code; end # Was this run skipped? # # @return [Boolean] # - # source://minitest//lib/minitest.rb#509 + # source://minitest//lib/minitest.rb#548 def skipped?; end end -# source://minitest//lib/minitest.rb#619 +# source://minitest//lib/minitest.rb#659 class Minitest::Reporter < ::Minitest::AbstractReporter # @return [Reporter] a new instance of Reporter # - # source://minitest//lib/minitest.rb#628 + # source://minitest//lib/minitest.rb#668 def initialize(io = T.unsafe(nil), options = T.unsafe(nil)); end # The IO used to report. # - # source://minitest//lib/minitest.rb#621 + # source://minitest//lib/minitest.rb#661 def io; end # The IO used to report. # - # source://minitest//lib/minitest.rb#621 + # source://minitest//lib/minitest.rb#661 def io=(_arg0); end # Command-line options for this run. # - # source://minitest//lib/minitest.rb#626 + # source://minitest//lib/minitest.rb#666 def options; end # Command-line options for this run. # - # source://minitest//lib/minitest.rb#626 + # source://minitest//lib/minitest.rb#666 def options=(_arg0); end end @@ -882,40 +882,40 @@ end # blow up. By using Result.from(a_test) you can be reasonably sure # that the test result can be marshalled. # -# source://minitest//lib/minitest.rb#528 +# source://minitest//lib/minitest.rb#567 class Minitest::Result < ::Minitest::Runnable include ::Minitest::Reportable - # source://minitest//lib/minitest.rb#561 + # source://minitest//lib/minitest.rb#601 def class_name; end # The class name of the test result. # - # source://minitest//lib/minitest.rb#537 + # source://minitest//lib/minitest.rb#576 def klass; end # The class name of the test result. # - # source://minitest//lib/minitest.rb#537 + # source://minitest//lib/minitest.rb#576 def klass=(_arg0); end # The location of the test method. # - # source://minitest//lib/minitest.rb#542 + # source://minitest//lib/minitest.rb#581 def source_location; end # The location of the test method. # - # source://minitest//lib/minitest.rb#542 + # source://minitest//lib/minitest.rb#581 def source_location=(_arg0); end - # source://minitest//lib/minitest.rb#565 + # source://minitest//lib/minitest.rb#605 def to_s; end class << self # Create a new test result from a Runnable instance. # - # source://minitest//lib/minitest.rb#547 + # source://minitest//lib/minitest.rb#586 def from(runnable); end end end @@ -926,7 +926,7 @@ end class Minitest::Runnable # @return [Runnable] a new instance of Runnable # - # source://minitest//lib/minitest.rb#431 + # source://minitest//lib/minitest.rb#445 def initialize(name); end # Number of assertions executed in this run. @@ -939,7 +939,7 @@ class Minitest::Runnable # source://minitest//lib/minitest.rb#281 def assertions=(_arg0); end - # source://minitest//lib/minitest.rb#427 + # source://minitest//lib/minitest.rb#441 def failure; end # An assertion raised during the run, if any. @@ -952,12 +952,34 @@ class Minitest::Runnable # source://minitest//lib/minitest.rb#286 def failures=(_arg0); end - # source://minitest//lib/minitest.rb#413 + # source://minitest//lib/minitest.rb#427 def marshal_dump; end - # source://minitest//lib/minitest.rb#423 + # source://minitest//lib/minitest.rb#437 def marshal_load(ary); end + # Metadata you attach to the test results that get sent to the reporter. + # + # Lazily initializes to a hash, to keep memory down. + # + # NOTE: this data *must* be plain (read: marshal-able) data! + # Hashes! Arrays! Strings! + # + # source://minitest//lib/minitest.rb#460 + def metadata; end + + # Sets metadata, mainly used for +Result.from+. + # + # source://minitest//lib/minitest.rb#467 + def metadata=(_arg0); end + + # Returns true if metadata exists. + # + # @return [Boolean] + # + # source://minitest//lib/minitest.rb#472 + def metadata?; end + # Name of the run. # # source://minitest//lib/minitest.rb#304 @@ -976,7 +998,7 @@ class Minitest::Runnable # @raise [NotImplementedError] # @return [Boolean] # - # source://minitest//lib/minitest.rb#450 + # source://minitest//lib/minitest.rb#489 def passed?; end # Returns a single character string to print based on the result @@ -985,14 +1007,14 @@ class Minitest::Runnable # # @raise [NotImplementedError] # - # source://minitest//lib/minitest.rb#459 + # source://minitest//lib/minitest.rb#498 def result_code; end # Runs a single method. Needs to return self. # # @raise [NotImplementedError] # - # source://minitest//lib/minitest.rb#440 + # source://minitest//lib/minitest.rb#479 def run; end # Was this run skipped? See #passed? for more information. @@ -1000,7 +1022,7 @@ class Minitest::Runnable # @raise [NotImplementedError] # @return [Boolean] # - # source://minitest//lib/minitest.rb#466 + # source://minitest//lib/minitest.rb#505 def skipped?; end # The time it took to run. @@ -1017,7 +1039,7 @@ class Minitest::Runnable def time_it; end class << self - # source://minitest//lib/minitest.rb#1069 + # source://minitest//lib/minitest.rb#1109 def inherited(klass); end # Returns all instance methods matching the pattern +re+. @@ -1025,7 +1047,7 @@ class Minitest::Runnable # source://minitest//lib/minitest.rb#318 def methods_matching(re); end - # source://minitest//lib/minitest.rb#383 + # source://minitest//lib/minitest.rb#397 def on_signal(name, action); end # source://minitest//lib/minitest.rb#322 @@ -1043,7 +1065,7 @@ class Minitest::Runnable # that subclasses can specialize the running of an individual # test. See Minitest::ParallelTest::ClassMethods for an example. # - # source://minitest//lib/minitest.rb#363 + # source://minitest//lib/minitest.rb#369 def run_one_method(klass, method_name, reporter); end # Each subclass of Runnable is responsible for overriding this @@ -1051,27 +1073,33 @@ class Minitest::Runnable # # @raise [NotImplementedError] # - # source://minitest//lib/minitest.rb#400 + # source://minitest//lib/minitest.rb#414 def runnable_methods; end # Returns all subclasses of Runnable. # - # source://minitest//lib/minitest.rb#407 + # source://minitest//lib/minitest.rb#421 def runnables; end - # source://minitest//lib/minitest.rb#368 + # Defines the order to run tests (:random by default). Override + # this or use a convenience method to change it for your tests. + # + # source://minitest//lib/minitest.rb#378 + def test_order; end + + # source://minitest//lib/minitest.rb#382 def with_info_handler(reporter, &block); end end end -# source://minitest//lib/minitest.rb#381 +# source://minitest//lib/minitest.rb#395 Minitest::Runnable::SIGNALS = T.let(T.unsafe(nil), Hash) # Assertion raised when skipping a run. # -# source://minitest//lib/minitest.rb#924 +# source://minitest//lib/minitest.rb#964 class Minitest::Skip < ::Minitest::Assertion - # source://minitest//lib/minitest.rb#925 + # source://minitest//lib/minitest.rb#965 def result_label; end end @@ -1095,113 +1123,113 @@ end # end # end # -# source://minitest//lib/minitest.rb#679 +# source://minitest//lib/minitest.rb#719 class Minitest::StatisticsReporter < ::Minitest::Reporter # @return [StatisticsReporter] a new instance of StatisticsReporter # - # source://minitest//lib/minitest.rb#723 + # source://minitest//lib/minitest.rb#763 def initialize(io = T.unsafe(nil), options = T.unsafe(nil)); end # Total number of assertions. # - # source://minitest//lib/minitest.rb#683 + # source://minitest//lib/minitest.rb#723 def assertions; end # Total number of assertions. # - # source://minitest//lib/minitest.rb#683 + # source://minitest//lib/minitest.rb#723 def assertions=(_arg0); end # Total number of test cases. # - # source://minitest//lib/minitest.rb#688 + # source://minitest//lib/minitest.rb#728 def count; end # Total number of test cases. # - # source://minitest//lib/minitest.rb#688 + # source://minitest//lib/minitest.rb#728 def count=(_arg0); end # Total number of tests that erred. # - # source://minitest//lib/minitest.rb#716 + # source://minitest//lib/minitest.rb#756 def errors; end # Total number of tests that erred. # - # source://minitest//lib/minitest.rb#716 + # source://minitest//lib/minitest.rb#756 def errors=(_arg0); end # Total number of tests that failed. # - # source://minitest//lib/minitest.rb#711 + # source://minitest//lib/minitest.rb#751 def failures; end # Total number of tests that failed. # - # source://minitest//lib/minitest.rb#711 + # source://minitest//lib/minitest.rb#751 def failures=(_arg0); end # @return [Boolean] # - # source://minitest//lib/minitest.rb#736 + # source://minitest//lib/minitest.rb#776 def passed?; end - # source://minitest//lib/minitest.rb#744 + # source://minitest//lib/minitest.rb#784 def record(result); end # Report on the tracked statistics. # - # source://minitest//lib/minitest.rb#754 + # source://minitest//lib/minitest.rb#794 def report; end # An +Array+ of test cases that failed or were skipped. # - # source://minitest//lib/minitest.rb#693 + # source://minitest//lib/minitest.rb#733 def results; end # An +Array+ of test cases that failed or were skipped. # - # source://minitest//lib/minitest.rb#693 + # source://minitest//lib/minitest.rb#733 def results=(_arg0); end # Total number of tests that where skipped. # - # source://minitest//lib/minitest.rb#721 + # source://minitest//lib/minitest.rb#761 def skips; end # Total number of tests that where skipped. # - # source://minitest//lib/minitest.rb#721 + # source://minitest//lib/minitest.rb#761 def skips=(_arg0); end - # source://minitest//lib/minitest.rb#740 + # source://minitest//lib/minitest.rb#780 def start; end # Time the test run started. If available, the monotonic clock is # used and this is a +Float+, otherwise it's an instance of # +Time+. # - # source://minitest//lib/minitest.rb#700 + # source://minitest//lib/minitest.rb#740 def start_time; end # Time the test run started. If available, the monotonic clock is # used and this is a +Float+, otherwise it's an instance of # +Time+. # - # source://minitest//lib/minitest.rb#700 + # source://minitest//lib/minitest.rb#740 def start_time=(_arg0); end # Test run time. If available, the monotonic clock is used and # this is a +Float+, otherwise it's an instance of +Time+. # - # source://minitest//lib/minitest.rb#706 + # source://minitest//lib/minitest.rb#746 def total_time; end # Test run time. If available, the monotonic clock is used and # this is a +Float+, otherwise it's an instance of +Time+. # - # source://minitest//lib/minitest.rb#706 + # source://minitest//lib/minitest.rb#746 def total_time=(_arg0); end end @@ -1213,48 +1241,48 @@ end # plugin, pull this out of the composite and replace it with your # own. # -# source://minitest//lib/minitest.rb#774 +# source://minitest//lib/minitest.rb#814 class Minitest::SummaryReporter < ::Minitest::StatisticsReporter - # source://minitest//lib/minitest.rb#809 + # source://minitest//lib/minitest.rb#849 def aggregated_results(io); end # Returns the value of attribute old_sync. # - # source://minitest//lib/minitest.rb#777 + # source://minitest//lib/minitest.rb#817 def old_sync; end # Sets the attribute old_sync # # @param value the value to set the attribute old_sync to. # - # source://minitest//lib/minitest.rb#777 + # source://minitest//lib/minitest.rb#817 def old_sync=(_arg0); end - # source://minitest//lib/minitest.rb#792 + # source://minitest//lib/minitest.rb#832 def report; end # :startdoc: # - # source://minitest//lib/minitest.rb#780 + # source://minitest//lib/minitest.rb#820 def start; end - # source://minitest//lib/minitest.rb#804 + # source://minitest//lib/minitest.rb#844 def statistics; end - # source://minitest//lib/minitest.rb#829 + # source://minitest//lib/minitest.rb#869 def summary; end # :stopdoc: # - # source://minitest//lib/minitest.rb#776 + # source://minitest//lib/minitest.rb#816 def sync; end # :stopdoc: # - # source://minitest//lib/minitest.rb#776 + # source://minitest//lib/minitest.rb#816 def sync=(_arg0); end - # source://minitest//lib/minitest.rb#825 + # source://minitest//lib/minitest.rb#865 def to_s; end end @@ -1276,27 +1304,27 @@ class Minitest::Test < ::Minitest::Runnable # LifecycleHooks # - # source://minitest//lib/minitest/test.rb#198 + # source://minitest//lib/minitest/test.rb#190 def capture_exceptions; end # source://minitest//lib/minitest/test.rb#15 def class_name; end - # source://minitest//lib/minitest/test.rb#215 + # source://minitest//lib/minitest/test.rb#207 def neuter_exception(e); end - # source://minitest//lib/minitest/test.rb#226 + # source://minitest//lib/minitest/test.rb#218 def new_exception(klass, msg, bt, kill = T.unsafe(nil)); end # Runs a single test with setup/teardown hooks. # - # source://minitest//lib/minitest/test.rb#94 + # source://minitest//lib/minitest/test.rb#86 def run; end - # source://minitest//lib/minitest/test.rb#208 + # source://minitest//lib/minitest/test.rb#200 def sanitize_exception(e); end - # source://minitest//lib/minitest/test.rb#240 + # source://minitest//lib/minitest/test.rb#232 def with_info_handler(&block); end class << self @@ -1340,12 +1368,6 @@ class Minitest::Test < ::Minitest::Runnable # # source://minitest//lib/minitest/test.rb#69 def runnable_methods; end - - # Defines the order to run tests (:random by default). Override - # this or use a convenience method to change it for your tests. - # - # source://minitest//lib/minitest/test.rb#87 - def test_order; end end end @@ -1353,7 +1375,7 @@ end # meant for library writers, NOT for regular test authors. See # #before_setup for an example. # -# source://minitest//lib/minitest/test.rb#121 +# source://minitest//lib/minitest/test.rb#113 module Minitest::Test::LifecycleHooks # Runs before every test, after setup. This hook is meant for # libraries to extend minitest. It is not meant to be used by @@ -1361,7 +1383,7 @@ module Minitest::Test::LifecycleHooks # # See #before_setup for an example. # - # source://minitest//lib/minitest/test.rb#171 + # source://minitest//lib/minitest/test.rb#163 def after_setup; end # Runs after every test, after teardown. This hook is meant for @@ -1370,7 +1392,7 @@ module Minitest::Test::LifecycleHooks # # See #before_setup for an example. # - # source://minitest//lib/minitest/test.rb#195 + # source://minitest//lib/minitest/test.rb#187 def after_teardown; end # Runs before every test, before setup. This hook is meant for @@ -1401,11 +1423,11 @@ module Minitest::Test::LifecycleHooks # end # end # - # class MiniTest::Test + # class Minitest::Test # include MyMinitestPlugin # end # - # source://minitest//lib/minitest/test.rb#156 + # source://minitest//lib/minitest/test.rb#148 def before_setup; end # Runs after every test, before teardown. This hook is meant for @@ -1414,19 +1436,19 @@ module Minitest::Test::LifecycleHooks # # See #before_setup for an example. # - # source://minitest//lib/minitest/test.rb#180 + # source://minitest//lib/minitest/test.rb#172 def before_teardown; end # Runs before every test. Use this to set up before each test # run. # - # source://minitest//lib/minitest/test.rb#162 + # source://minitest//lib/minitest/test.rb#154 def setup; end # Runs after every test. Use this to clean up after each test # run. # - # source://minitest//lib/minitest/test.rb#186 + # source://minitest//lib/minitest/test.rb#178 def teardown; end end @@ -1441,54 +1463,32 @@ Minitest::Test::TEARDOWN_METHODS = T.let(T.unsafe(nil), Array) # Assertion wrapping an unexpected error that was raised during a run. # -# source://minitest//lib/minitest.rb#933 +# source://minitest//lib/minitest.rb#973 class Minitest::UnexpectedError < ::Minitest::Assertion # @return [UnexpectedError] a new instance of UnexpectedError # - # source://minitest//lib/minitest.rb#937 + # source://minitest//lib/minitest.rb#977 def initialize(error); end - # source://minitest//lib/minitest.rb#942 + # source://minitest//lib/minitest.rb#982 def backtrace; end # TODO: figure out how to use `cause` instead # - # source://minitest//lib/minitest.rb#935 + # source://minitest//lib/minitest.rb#975 def error; end # TODO: figure out how to use `cause` instead # - # source://minitest//lib/minitest.rb#935 + # source://minitest//lib/minitest.rb#975 def error=(_arg0); end - # source://minitest//lib/minitest.rb#946 + # source://minitest//lib/minitest.rb#986 def message; end - # source://minitest//lib/minitest.rb#951 + # source://minitest//lib/minitest.rb#991 def result_label; end end -# source://minitest//lib/minitest/unit.rb#20 -class Minitest::Unit - class << self - # source://minitest//lib/minitest/unit.rb#36 - def after_tests(&b); end - - # source://minitest//lib/minitest/unit.rb#30 - def autorun; end - end -end - -# source://minitest//lib/minitest/unit.rb#22 -class Minitest::Unit::TestCase < ::Minitest::Test - class << self - # source://minitest//lib/minitest/unit.rb#23 - def inherited(klass); end - end -end - -# source://minitest//lib/minitest/unit.rb#21 -Minitest::Unit::VERSION = T.let(T.unsafe(nil), String) - # source://minitest//lib/minitest.rb#12 Minitest::VERSION = T.let(T.unsafe(nil), String) diff --git a/sorbet/rbi/gems/mocha@2.0.4.rbi b/sorbet/rbi/gems/mocha@2.1.0.rbi similarity index 100% rename from sorbet/rbi/gems/mocha@2.0.4.rbi rename to sorbet/rbi/gems/mocha@2.1.0.rbi diff --git a/sorbet/rbi/gems/nokogiri@1.15.2.rbi b/sorbet/rbi/gems/nokogiri@1.15.2.rbi deleted file mode 100644 index 6b293e4de..000000000 --- a/sorbet/rbi/gems/nokogiri@1.15.2.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `nokogiri` gem. -# Please instead update this file by running `bin/tapioca gem nokogiri`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/racc@1.6.2.rbi b/sorbet/rbi/gems/racc@1.7.1.rbi similarity index 62% rename from sorbet/rbi/gems/racc@1.6.2.rbi rename to sorbet/rbi/gems/racc@1.7.1.rbi index e3ff20a08..d01a4f515 100644 --- a/sorbet/rbi/gems/racc@1.6.2.rbi +++ b/sorbet/rbi/gems/racc@1.7.1.rbi @@ -4,33 +4,37 @@ # This is an autogenerated file for types exported from the `racc` gem. # Please instead update this file by running `bin/tapioca gem racc`. -# source://racc//racc/parser.rb#23 +# source://racc//lib/racc/parser.rb#23 ParseError = Racc::ParseError -# source://racc//racc/info.rb#16 +# source://racc//lib/racc/info.rb#16 Racc::Copyright = T.let(T.unsafe(nil), String) +# source://racc//lib/racc/parser.rb#186 class Racc::Parser - # source://racc//racc/parser.rb#281 + # source://racc//lib/racc/parser.rb#281 def _racc_do_parse_rb(arg, in_debug); end - # source://racc//racc/parser.rb#481 + # source://racc//lib/racc/parser.rb#481 def _racc_do_reduce(arg, act); end # common # - # source://racc//racc/parser.rb#384 + # source://racc//lib/racc/parser.rb#384 def _racc_evalact(act, arg); end - # source://racc//racc/parser.rb#234 + # source://racc//lib/racc/parser.rb#234 def _racc_init_sysvars; end - # source://racc//racc/parser.rb#222 + # source://racc//lib/racc/parser.rb#222 def _racc_setup; end - # source://racc//racc/parser.rb#331 + # source://racc//lib/racc/parser.rb#331 def _racc_yyparse_rb(recv, mid, arg, c_debug); end + # source://racc//lib/racc/parser.rb#264 + def do_parse; end + # The method to fetch next token. # If you use #do_parse method, you must implement #next_token. # @@ -42,7 +46,7 @@ class Racc::Parser # # @raise [NotImplementedError] # - # source://racc//racc/parser.rb#277 + # source://racc//lib/racc/parser.rb#277 def next_token; end # This method is called when a parse error is found. @@ -62,89 +66,96 @@ class Racc::Parser # # @raise [ParseError] # - # source://racc//racc/parser.rb#537 + # source://racc//lib/racc/parser.rb#537 def on_error(t, val, vstack); end - # source://racc//racc/parser.rb#586 + # source://racc//lib/racc/parser.rb#586 def racc_accept; end - # source://racc//racc/parser.rb#591 + # source://racc//lib/racc/parser.rb#591 def racc_e_pop(state, tstack, vstack); end - # source://racc//racc/parser.rb#598 + # source://racc//lib/racc/parser.rb#598 def racc_next_state(curstate, state); end - # source://racc//racc/parser.rb#604 + # source://racc//lib/racc/parser.rb#604 def racc_print_stacks(t, v); end - # source://racc//racc/parser.rb#613 + # source://racc//lib/racc/parser.rb#613 def racc_print_states(s); end # For debugging output # - # source://racc//racc/parser.rb#560 + # source://racc//lib/racc/parser.rb#560 def racc_read_token(t, tok, val); end - # source://racc//racc/parser.rb#573 + # source://racc//lib/racc/parser.rb#573 def racc_reduce(toks, sim, tstack, vstack); end - # source://racc//racc/parser.rb#567 + # source://racc//lib/racc/parser.rb#567 def racc_shift(tok, tstack, vstack); end - # source://racc//racc/parser.rb#620 + # source://racc//lib/racc/parser.rb#620 def racc_token2str(tok); end # Convert internal ID of token symbol to the string. # - # source://racc//racc/parser.rb#626 + # source://racc//lib/racc/parser.rb#626 def token_to_str(t); end # Exit parser. # Return value is +Symbol_Value_Stack[0]+. # - # source://racc//racc/parser.rb#550 + # source://racc//lib/racc/parser.rb#550 def yyaccept; end # Leave error recovering mode. # - # source://racc//racc/parser.rb#555 + # source://racc//lib/racc/parser.rb#555 def yyerrok; end # Enter error recovering mode. # This method does not call #on_error. # - # source://racc//racc/parser.rb#544 + # source://racc//lib/racc/parser.rb#544 def yyerror; end + # source://racc//lib/racc/parser.rb#326 + def yyparse(recv, mid); end + class << self - # source://racc//racc/parser.rb#218 + # source://racc//lib/racc/parser.rb#218 def racc_runtime_type; end end end -# source://racc//racc/parser.rb#207 +# source://racc//lib/racc/parser.rb#207 Racc::Parser::Racc_Main_Parsing_Routine = T.let(T.unsafe(nil), Symbol) -# source://racc//racc/parser.rb#209 +Racc::Parser::Racc_Runtime_Core_Id_C = T.let(T.unsafe(nil), String) + +# source://racc//lib/racc/parser.rb#209 Racc::Parser::Racc_Runtime_Core_Version = T.let(T.unsafe(nil), String) -# source://racc//racc/parser.rb#189 +Racc::Parser::Racc_Runtime_Core_Version_C = T.let(T.unsafe(nil), String) + +# source://racc//lib/racc/parser.rb#189 Racc::Parser::Racc_Runtime_Core_Version_R = T.let(T.unsafe(nil), String) -# source://racc//racc/parser.rb#210 +# source://racc//lib/racc/parser.rb#210 Racc::Parser::Racc_Runtime_Type = T.let(T.unsafe(nil), String) -# source://racc//racc/parser.rb#188 +# source://racc//lib/racc/parser.rb#188 Racc::Parser::Racc_Runtime_Version = T.let(T.unsafe(nil), String) -# source://racc//racc/parser.rb#208 +# source://racc//lib/racc/parser.rb#208 Racc::Parser::Racc_YY_Parse_Method = T.let(T.unsafe(nil), Symbol) -# source://racc//racc/parser.rb#183 +# source://racc//lib/racc/parser.rb#183 Racc::Racc_No_Extensions = T.let(T.unsafe(nil), FalseClass) -# source://racc//racc/info.rb#14 +# source://racc//lib/racc/info.rb#14 Racc::VERSION = T.let(T.unsafe(nil), String) -# source://racc//racc/info.rb#15 +# source://racc//lib/racc/info.rb#15 Racc::Version = T.let(T.unsafe(nil), String) diff --git a/sorbet/rbi/gems/rack-test@2.1.0.rbi b/sorbet/rbi/gems/rack-test@2.1.0.rbi deleted file mode 100644 index 16907a294..000000000 --- a/sorbet/rbi/gems/rack-test@2.1.0.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `rack-test` gem. -# Please instead update this file by running `bin/tapioca gem rack-test`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/rack@2.2.7.rbi b/sorbet/rbi/gems/rack@2.2.7.rbi deleted file mode 100644 index 9af5e4d29..000000000 --- a/sorbet/rbi/gems/rack@2.2.7.rbi +++ /dev/null @@ -1,5614 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `rack` gem. -# Please instead update this file by running `bin/tapioca gem rack`. - -# The Rack main module, serving as a namespace for all core Rack -# modules and classes. -# -# All modules meant for use in your application are autoloaded here, -# so it should be enough just to require 'rack' in your code. -# -# source://rack//lib/rack/version.rb#14 -module Rack - class << self - # Return the Rack release as a dotted string. - # - # source://rack//lib/rack/version.rb#26 - def release; end - - # Return the Rack protocol version as a dotted string. - # - # source://rack//lib/rack/version.rb#19 - def version; end - end -end - -# source://rack//lib/rack.rb#124 -module Rack::Auth; end - -# Rack::Auth::AbstractHandler implements common authentication functionality. -# -# +realm+ should be set for all handlers. -# -# source://rack//lib/rack/auth/abstract/handler.rb#9 -class Rack::Auth::AbstractHandler - # @return [AbstractHandler] a new instance of AbstractHandler - # - # source://rack//lib/rack/auth/abstract/handler.rb#13 - def initialize(app, realm = T.unsafe(nil), &authenticator); end - - # Returns the value of attribute realm. - # - # source://rack//lib/rack/auth/abstract/handler.rb#11 - def realm; end - - # Sets the attribute realm - # - # @param value the value to set the attribute realm to. - # - # source://rack//lib/rack/auth/abstract/handler.rb#11 - def realm=(_arg0); end - - private - - # source://rack//lib/rack/auth/abstract/handler.rb#29 - def bad_request; end - - # source://rack//lib/rack/auth/abstract/handler.rb#20 - def unauthorized(www_authenticate = T.unsafe(nil)); end -end - -# source://rack//lib/rack/auth/abstract/request.rb#5 -class Rack::Auth::AbstractRequest - # @return [AbstractRequest] a new instance of AbstractRequest - # - # source://rack//lib/rack/auth/abstract/request.rb#7 - def initialize(env); end - - # source://rack//lib/rack/auth/abstract/request.rb#31 - def params; end - - # source://rack//lib/rack/auth/abstract/request.rb#23 - def parts; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/abstract/request.rb#15 - def provided?; end - - # source://rack//lib/rack/auth/abstract/request.rb#11 - def request; end - - # source://rack//lib/rack/auth/abstract/request.rb#27 - def scheme; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/abstract/request.rb#19 - def valid?; end - - private - - # source://rack//lib/rack/auth/abstract/request.rb#40 - def authorization_key; end -end - -# source://rack//lib/rack/auth/abstract/request.rb#38 -Rack::Auth::AbstractRequest::AUTHORIZATION_KEYS = T.let(T.unsafe(nil), Array) - -# Rack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617. -# -# Initialize with the Rack application that you want protecting, -# and a block that checks if a username and password pair are valid. -# -# See also: example/protectedlobster.rb -# -# source://rack//lib/rack/auth/basic.rb#16 -class Rack::Auth::Basic < ::Rack::Auth::AbstractHandler - # source://rack//lib/rack/auth/basic.rb#18 - def call(env); end - - private - - # source://rack//lib/rack/auth/basic.rb#37 - def challenge; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/basic.rb#41 - def valid?(auth); end -end - -# source://rack//lib/rack/auth/basic.rb#45 -class Rack::Auth::Basic::Request < ::Rack::Auth::AbstractRequest - # @return [Boolean] - # - # source://rack//lib/rack/auth/basic.rb#46 - def basic?; end - - # source://rack//lib/rack/auth/basic.rb#50 - def credentials; end - - # source://rack//lib/rack/auth/basic.rb#54 - def username; end -end - -# source://rack//lib/rack.rb#128 -module Rack::Auth::Digest; end - -# Rack::Auth::Digest::MD5 implements the MD5 algorithm version of -# HTTP Digest Authentication, as per RFC 2617. -# -# Initialize with the [Rack] application that you want protecting, -# and a block that looks up a plaintext password for a given username. -# -# +opaque+ needs to be set to a constant base64/hexadecimal string. -# -# source://rack//lib/rack/auth/digest/md5.rb#20 -class Rack::Auth::Digest::MD5 < ::Rack::Auth::AbstractHandler - # @return [MD5] a new instance of MD5 - # - # source://rack//lib/rack/auth/digest/md5.rb#26 - def initialize(app, realm = T.unsafe(nil), opaque = T.unsafe(nil), &authenticator); end - - # source://rack//lib/rack/auth/digest/md5.rb#39 - def call(env); end - - # Returns the value of attribute opaque. - # - # source://rack//lib/rack/auth/digest/md5.rb#22 - def opaque; end - - # Sets the attribute opaque - # - # @param value the value to set the attribute opaque to. - # - # source://rack//lib/rack/auth/digest/md5.rb#22 - def opaque=(_arg0); end - - # Sets the attribute passwords_hashed - # - # @param value the value to set the attribute passwords_hashed to. - # - # source://rack//lib/rack/auth/digest/md5.rb#24 - def passwords_hashed=(_arg0); end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/md5.rb#35 - def passwords_hashed?; end - - private - - # source://rack//lib/rack/auth/digest/md5.rb#114 - def A1(auth, password); end - - # source://rack//lib/rack/auth/digest/md5.rb#118 - def A2(auth); end - - # source://rack//lib/rack/auth/digest/md5.rb#104 - def H(data); end - - # source://rack//lib/rack/auth/digest/md5.rb#110 - def KD(secret, data); end - - # source://rack//lib/rack/auth/digest/md5.rb#79 - def challenge(hash = T.unsafe(nil)); end - - # source://rack//lib/rack/auth/digest/md5.rb#122 - def digest(auth, password); end - - # source://rack//lib/rack/auth/digest/md5.rb#104 - def md5(data); end - - # source://rack//lib/rack/auth/digest/md5.rb#68 - def params(hash = T.unsafe(nil)); end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/md5.rb#83 - def valid?(auth); end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/md5.rb#99 - def valid_digest?(auth); end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/md5.rb#95 - def valid_nonce?(auth); end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/md5.rb#91 - def valid_opaque?(auth); end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/md5.rb#87 - def valid_qop?(auth); end -end - -# source://rack//lib/rack/auth/digest/md5.rb#66 -Rack::Auth::Digest::MD5::QOP = T.let(T.unsafe(nil), String) - -# Rack::Auth::Digest::Nonce is the default nonce generator for the -# Rack::Auth::Digest::MD5 authentication handler. -# -# +private_key+ needs to set to a constant string. -# -# +time_limit+ can be optionally set to an integer (number of seconds), -# to limit the validity of the generated nonces. -# -# source://rack//lib/rack/auth/digest/nonce.rb#17 -class Rack::Auth::Digest::Nonce - # @return [Nonce] a new instance of Nonce - # - # source://rack//lib/rack/auth/digest/nonce.rb#27 - def initialize(timestamp = T.unsafe(nil), given_digest = T.unsafe(nil)); end - - # source://rack//lib/rack/auth/digest/nonce.rb#35 - def digest; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/nonce.rb#47 - def fresh?; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/nonce.rb#43 - def stale?; end - - # source://rack//lib/rack/auth/digest/nonce.rb#31 - def to_s; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/nonce.rb#39 - def valid?; end - - class << self - # source://rack//lib/rack/auth/digest/nonce.rb#23 - def parse(string); end - - # Returns the value of attribute private_key. - # - # source://rack//lib/rack/auth/digest/nonce.rb#20 - def private_key; end - - # Sets the attribute private_key - # - # @param value the value to set the attribute private_key to. - # - # source://rack//lib/rack/auth/digest/nonce.rb#20 - def private_key=(_arg0); end - - # Returns the value of attribute time_limit. - # - # source://rack//lib/rack/auth/digest/nonce.rb#20 - def time_limit; end - - # Sets the attribute time_limit - # - # @param value the value to set the attribute time_limit to. - # - # source://rack//lib/rack/auth/digest/nonce.rb#20 - def time_limit=(_arg0); end - end -end - -# source://rack//lib/rack/auth/digest/params.rb#6 -class Rack::Auth::Digest::Params < ::Hash - # @return [Params] a new instance of Params - # @yield [_self] - # @yieldparam _self [Rack::Auth::Digest::Params] the object that the method was called on - # - # source://rack//lib/rack/auth/digest/params.rb#25 - def initialize; end - - # source://rack//lib/rack/auth/digest/params.rb#31 - def [](k); end - - # source://rack//lib/rack/auth/digest/params.rb#35 - def []=(k, v); end - - # From WEBrick::HTTPUtils - # - # source://rack//lib/rack/auth/digest/params.rb#47 - def quote(str); end - - # source://rack//lib/rack/auth/digest/params.rb#41 - def to_s; end - - class << self - # From WEBrick::HTTPUtils - # - # source://rack//lib/rack/auth/digest/params.rb#15 - def dequote(str); end - - # source://rack//lib/rack/auth/digest/params.rb#8 - def parse(str); end - - # source://rack//lib/rack/auth/digest/params.rb#21 - def split_header_value(str); end - end -end - -# source://rack//lib/rack/auth/digest/params.rb#39 -Rack::Auth::Digest::Params::UNQUOTED = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/auth/digest/request.rb#10 -class Rack::Auth::Digest::Request < ::Rack::Auth::AbstractRequest - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/request.rb#19 - def correct_uri?; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/request.rb#15 - def digest?; end - - # source://rack//lib/rack/auth/digest/request.rb#11 - def method; end - - # @raise [ArgumentError] - # - # source://rack//lib/rack/auth/digest/request.rb#35 - def method_missing(sym, *args); end - - # source://rack//lib/rack/auth/digest/request.rb#23 - def nonce; end - - # source://rack//lib/rack/auth/digest/request.rb#27 - def params; end - - # @return [Boolean] - # - # source://rack//lib/rack/auth/digest/request.rb#31 - def respond_to?(sym, *_arg1); end -end - -# Proxy for response bodies allowing calling a block when -# the response body is closed (after the response has been fully -# sent to the client). -# -# source://rack//lib/rack/body_proxy.rb#7 -class Rack::BodyProxy - # Set the response body to wrap, and the block to call when the - # response has been fully sent. - # - # @return [BodyProxy] a new instance of BodyProxy - # - # source://rack//lib/rack/body_proxy.rb#10 - def initialize(body, &block); end - - # If not already closed, close the wrapped body and - # then call the block the proxy was initialized with. - # - # source://rack//lib/rack/body_proxy.rb#23 - def close; end - - # Whether the proxy is closed. The proxy starts as not closed, - # and becomes closed on the first call to close. - # - # @return [Boolean] - # - # source://rack//lib/rack/body_proxy.rb#35 - def closed?; end - - # Delegate missing methods to the wrapped body. - # - # source://rack//lib/rack/body_proxy.rb#40 - def method_missing(method_name, *args, **_arg2, &block); end - - private - - # Return whether the wrapped body responds to the method. - # - # @return [Boolean] - # - # source://rack//lib/rack/body_proxy.rb#17 - def respond_to_missing?(method_name, include_all = T.unsafe(nil)); end -end - -# Rack::Builder implements a small DSL to iteratively construct Rack -# applications. -# -# Example: -# -# require 'rack/lobster' -# app = Rack::Builder.new do -# use Rack::CommonLogger -# use Rack::ShowExceptions -# map "/lobster" do -# use Rack::Lint -# run Rack::Lobster.new -# end -# end -# -# run app -# -# Or -# -# app = Rack::Builder.app do -# use Rack::CommonLogger -# run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['OK']] } -# end -# -# run app -# -# +use+ adds middleware to the stack, +run+ dispatches to an application. -# You can use +map+ to construct a Rack::URLMap in a convenient way. -# -# source://rack//lib/rack/builder.rb#33 -class Rack::Builder - # Initialize a new Rack::Builder instance. +default_app+ specifies the - # default application if +run+ is not called later. If a block - # is given, it is evaluted in the context of the instance. - # - # @return [Builder] a new instance of Builder - # - # source://rack//lib/rack/builder.rb#123 - def initialize(default_app = T.unsafe(nil), &block); end - - # Call the Rack application generated by this builder instance. Note that - # this rebuilds the Rack application and runs the warmup code (if any) - # every time it is called, so it should not be used if performance is important. - # - # source://rack//lib/rack/builder.rb#243 - def call(env); end - - # Freeze the app (set using run) and all middleware instances when building the application - # in to_app. - # - # source://rack//lib/rack/builder.rb#226 - def freeze_app; end - - # Creates a route within the application. Routes under the mapped path will be sent to - # the Rack application specified by run inside the block. Other requests will be sent to the - # default application specified by run outside the block. - # - # Rack::Builder.app do - # map '/heartbeat' do - # run Heartbeat - # end - # run App - # end - # - # The +use+ method can also be used inside the block to specify middleware to run under a specific path: - # - # Rack::Builder.app do - # map '/heartbeat' do - # use Middleware - # run Heartbeat - # end - # run App - # end - # - # This example includes a piece of middleware which will run before +/heartbeat+ requests hit +Heartbeat+. - # - # Note that providing a +path+ of +/+ will ignore any default application given in a +run+ statement - # outside the block. - # - # source://rack//lib/rack/builder.rb#219 - def map(path, &block); end - - # Takes an argument that is an object that responds to #call and returns a Rack response. - # The simplest form of this is a lambda object: - # - # run lambda { |env| [200, { "Content-Type" => "text/plain" }, ["OK"]] } - # - # However this could also be a class: - # - # class Heartbeat - # def self.call(env) - # [200, { "Content-Type" => "text/plain" }, ["OK"]] - # end - # end - # - # run Heartbeat - # - # source://rack//lib/rack/builder.rb#176 - def run(app); end - - # Return the Rack application generated by this instance. - # - # source://rack//lib/rack/builder.rb#231 - def to_app; end - - # Specifies middleware to use in a stack. - # - # class Middleware - # def initialize(app) - # @app = app - # end - # - # def call(env) - # env["rack.some_header"] = "setting an example" - # @app.call(env) - # end - # end - # - # use Middleware - # run lambda { |env| [200, { "Content-Type" => "text/plain" }, ["OK"]] } - # - # All requests through to this application will first be processed by the middleware class. - # The +call+ method in this example sets an additional environment key which then can be - # referenced in the application if required. - # - # source://rack//lib/rack/builder.rb#153 - def use(middleware, *args, **_arg2, &block); end - - # Takes a lambda or block that is used to warm-up the application. This block is called - # before the Rack application is returned by to_app. - # - # warmup do |app| - # client = Rack::MockRequest.new(app) - # client.get('/') - # end - # - # use SomeMiddleware - # run MyApp - # - # source://rack//lib/rack/builder.rb#190 - def warmup(prc = T.unsafe(nil), &block); end - - private - - # Generate a URLMap instance by generating new Rack applications for each - # map block in this instance. - # - # source://rack//lib/rack/builder.rb#251 - def generate_map(default_app, mapping); end - - class << self - # Create a new Rack::Builder instance and return the Rack application - # generated from it. - # - # source://rack//lib/rack/builder.rb#130 - def app(default_app = T.unsafe(nil), &block); end - - # Load the given file as a rackup file, treating the - # contents as if specified inside a Rack::Builder block. - # - # Treats the first comment at the beginning of a line - # that starts with a backslash as options similar to - # options passed on a rackup command line. - # - # Ignores content in the file after +__END__+, so that - # use of +__END__+ will not result in a syntax error. - # - # Example config.ru file: - # - # $ cat config.ru - # - # #\ -p 9393 - # - # use Rack::ContentLength - # require './app.rb' - # run App - # - # source://rack//lib/rack/builder.rb#93 - def load_file(path, opts = T.unsafe(nil)); end - - # Evaluate the given +builder_script+ string in the context of - # a Rack::Builder block, returning a Rack application. - # - # source://rack//lib/rack/builder.rb#112 - def new_from_string(builder_script, file = T.unsafe(nil)); end - - # Parse the given config file to get a Rack application. - # - # If the config file ends in +.ru+, it is treated as a - # rackup file and the contents will be treated as if - # specified inside a Rack::Builder block, using the given - # options. - # - # If the config file does not end in +.ru+, it is - # required and Rack will use the basename of the file - # to guess which constant will be the Rack application to run. - # The options given will be ignored in this case. - # - # Examples: - # - # Rack::Builder.parse_file('config.ru') - # # Rack application built using Rack::Builder.new - # - # Rack::Builder.parse_file('app.rb') - # # requires app.rb, which can be anywhere in Ruby's - # # load path. After requiring, assumes App constant - # # contains Rack application - # - # Rack::Builder.parse_file('./my_app.rb') - # # requires ./my_app.rb, which should be in the - # # process's current directory. After requiring, - # # assumes MyApp constant contains Rack application - # - # source://rack//lib/rack/builder.rb#64 - def parse_file(config, opts = T.unsafe(nil)); end - end -end - -# https://stackoverflow.com/questions/2223882/whats-the-difference-between-utf-8-and-utf-8-without-bom -# -# source://rack//lib/rack/builder.rb#36 -Rack::Builder::UTF_8_BOM = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#29 -Rack::CACHE_CONTROL = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#31 -Rack::CONTENT_LENGTH = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#32 -Rack::CONTENT_TYPE = T.let(T.unsafe(nil), String) - -# Rack::Cascade tries a request on several apps, and returns the -# first response that is not 404 or 405 (or in a list of configured -# status codes). If all applications tried return one of the configured -# status codes, return the last response. -# -# source://rack//lib/rack/cascade.rb#9 -class Rack::Cascade - # Set the apps to send requests to, and what statuses result in - # cascading. Arguments: - # - # apps: An enumerable of rack applications. - # cascade_for: The statuses to use cascading for. If a response is received - # from an app, the next app is tried. - # - # @return [Cascade] a new instance of Cascade - # - # source://rack//lib/rack/cascade.rb#22 - def initialize(apps, cascade_for = T.unsafe(nil)); end - - # Append an app to the list of apps to cascade. This app will - # be tried last. - # - # source://rack//lib/rack/cascade.rb#57 - def <<(app); end - - # Append an app to the list of apps to cascade. This app will - # be tried last. - # - # source://rack//lib/rack/cascade.rb#57 - def add(app); end - - # An array of applications to try in order. - # - # source://rack//lib/rack/cascade.rb#14 - def apps; end - - # Call each app in order. If the responses uses a status that requires - # cascading, try the next app. If all responses require cascading, - # return the response from the last app. - # - # source://rack//lib/rack/cascade.rb#33 - def call(env); end - - # Whether the given app is one of the apps to cascade to. - # - # @return [Boolean] - # - # source://rack//lib/rack/cascade.rb#62 - def include?(app); end -end - -# deprecated, no longer used -# -# source://rack//lib/rack/cascade.rb#11 -Rack::Cascade::NotFound = T.let(T.unsafe(nil), Array) - -# Middleware that applies chunked transfer encoding to response bodies -# when the response does not include a Content-Length header. -# -# This supports the Trailer response header to allow the use of trailing -# headers in the chunked encoding. However, using this requires you manually -# specify a response body that supports a +trailers+ method. Example: -# -# [200, { 'Trailer' => 'Expires'}, ["Hello", "World"]] -# # error raised -# -# body = ["Hello", "World"] -# def body.trailers -# { 'Expires' => Time.now.to_s } -# end -# [200, { 'Trailer' => 'Expires'}, body] -# # No exception raised -# -# source://rack//lib/rack/chunked.rb#21 -class Rack::Chunked - include ::Rack::Utils - - # @return [Chunked] a new instance of Chunked - # - # source://rack//lib/rack/chunked.rb#78 - def initialize(app); end - - # If the rack app returns a response that should have a body, - # but does not have Content-Length or Transfer-Encoding headers, - # modify the response to use chunked Transfer-Encoding. - # - # source://rack//lib/rack/chunked.rb#97 - def call(env); end - - # Whether the HTTP version supports chunked encoding (HTTP 1.1 does). - # - # @return [Boolean] - # - # source://rack//lib/rack/chunked.rb#83 - def chunkable_version?(ver); end -end - -# A body wrapper that emits chunked responses. -# -# source://rack//lib/rack/chunked.rb#25 -class Rack::Chunked::Body - # Store the response body to be chunked. - # - # @return [Body] a new instance of Body - # - # source://rack//lib/rack/chunked.rb#30 - def initialize(body); end - - # Close the response body if the response body supports it. - # - # source://rack//lib/rack/chunked.rb#50 - def close; end - - # For each element yielded by the response body, yield - # the element in chunked encoding. - # - # @yield [TAIL] - # - # source://rack//lib/rack/chunked.rb#36 - def each(&block); end - - private - - # Do nothing as this class does not support trailer headers. - # - # source://rack//lib/rack/chunked.rb#57 - def yield_trailers; end -end - -# source://rack//lib/rack/chunked.rb#27 -Rack::Chunked::Body::TAIL = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/chunked.rb#26 -Rack::Chunked::Body::TERM = T.let(T.unsafe(nil), String) - -# A body wrapper that emits chunked responses and also supports -# sending Trailer headers. Note that the response body provided to -# initialize must have a +trailers+ method that returns a hash -# of trailer headers, and the rack response itself should have a -# Trailer header listing the headers that the +trailers+ method -# will return. -# -# source://rack//lib/rack/chunked.rb#67 -class Rack::Chunked::TrailerBody < ::Rack::Chunked::Body - private - - # Yield strings for each trailer header. - # - # source://rack//lib/rack/chunked.rb#71 - def yield_trailers; end -end - -# Rack::CommonLogger forwards every request to the given +app+, and -# logs a line in the -# {Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common] -# to the configured logger. -# -# source://rack//lib/rack/common_logger.rb#8 -class Rack::CommonLogger - # +logger+ can be any object that supports the +write+ or +<<+ methods, - # which includes the standard library Logger. These methods are called - # with a single string argument, the log message. - # If +logger+ is nil, CommonLogger will fall back env['rack.errors']. - # - # @return [CommonLogger] a new instance of CommonLogger - # - # source://rack//lib/rack/common_logger.rb#24 - def initialize(app, logger = T.unsafe(nil)); end - - # Log all requests in common_log format after a response has been - # returned. Note that if the app raises an exception, the request - # will not be logged, so if exception handling middleware are used, - # they should be loaded after this middleware. Additionally, because - # the logging happens after the request body has been fully sent, any - # exceptions raised during the sending of the response body will - # cause the request not to be logged. - # - # source://rack//lib/rack/common_logger.rb#36 - def call(env); end - - private - - # Attempt to determine the content length for the response to - # include it in the logged data. - # - # source://rack//lib/rack/common_logger.rb#78 - def extract_content_length(headers); end - - # Log the request to the configured logger. - # - # source://rack//lib/rack/common_logger.rb#47 - def log(env, status, header, began_at); end -end - -# Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common -# -# lilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 - -# -# %{%s - %s [%s] "%s %s%s %s" %d %s\n} % -# -# The actual format is slightly different than the above due to the -# separation of SCRIPT_NAME and PATH_INFO, and because the elapsed -# time in seconds is included at the end. -# -# source://rack//lib/rack/common_logger.rb#18 -Rack::CommonLogger::FORMAT = T.let(T.unsafe(nil), String) - -# Middleware that enables conditional GET using If-None-Match and -# If-Modified-Since. The application should set either or both of the -# Last-Modified or Etag response headers according to RFC 2616. When -# either of the conditions is met, the response body is set to be zero -# length and the response status is set to 304 Not Modified. -# -# Applications that defer response body generation until the body's each -# message is received will avoid response body generation completely when -# a conditional GET matches. -# -# Adapted from Michael Klishin's Merb implementation: -# https://github.com/wycats/merb/blob/master/merb-core/lib/merb-core/rack/middleware/conditional_get.rb -# -# source://rack//lib/rack/conditional_get.rb#17 -class Rack::ConditionalGet - # @return [ConditionalGet] a new instance of ConditionalGet - # - # source://rack//lib/rack/conditional_get.rb#18 - def initialize(app); end - - # Return empty 304 response if the response has not been - # modified since the last request. - # - # source://rack//lib/rack/conditional_get.rb#24 - def call(env); end - - private - - # Whether the ETag response header matches the If-None-Match request header. - # If so, the request has not been modified. - # - # @return [Boolean] - # - # source://rack//lib/rack/conditional_get.rb#59 - def etag_matches?(none_match, headers); end - - # Return whether the response has not been modified since the - # last request. - # - # @return [Boolean] - # - # source://rack//lib/rack/conditional_get.rb#48 - def fresh?(env, headers); end - - # Whether the Last-Modified response header matches the If-Modified-Since - # request header. If so, the request has not been modified. - # - # @return [Boolean] - # - # source://rack//lib/rack/conditional_get.rb#65 - def modified_since?(modified_since, headers); end - - # Return a Time object for the given string (which should be in RFC2822 - # format), or nil if the string cannot be parsed. - # - # source://rack//lib/rack/conditional_get.rb#72 - def to_rfc2822(since); end -end - -# Rack::Config modifies the environment using the block given during -# initialization. -# -# Example: -# use Rack::Config do |env| -# env['my-key'] = 'some-value' -# end -# -# source://rack//lib/rack/config.rb#11 -class Rack::Config - # @return [Config] a new instance of Config - # - # source://rack//lib/rack/config.rb#12 - def initialize(app, &block); end - - # source://rack//lib/rack/config.rb#17 - def call(env); end -end - -# Sets the Content-Length header on responses that do not specify -# a Content-Length or Transfer-Encoding header. Note that this -# does not fix responses that have an invalid Content-Length -# header specified. -# -# source://rack//lib/rack/content_length.rb#9 -class Rack::ContentLength - include ::Rack::Utils - - # @return [ContentLength] a new instance of ContentLength - # - # source://rack//lib/rack/content_length.rb#12 - def initialize(app); end - - # source://rack//lib/rack/content_length.rb#16 - def call(env); end -end - -# Sets the Content-Type header on responses which don't have one. -# -# Builder Usage: -# use Rack::ContentType, "text/plain" -# -# When no content type argument is provided, "text/html" is the -# default. -# -# source://rack//lib/rack/content_type.rb#12 -class Rack::ContentType - include ::Rack::Utils - - # @return [ContentType] a new instance of ContentType - # - # source://rack//lib/rack/content_type.rb#15 - def initialize(app, content_type = T.unsafe(nil)); end - - # source://rack//lib/rack/content_type.rb#19 - def call(env); end -end - -# source://rack//lib/rack.rb#43 -Rack::DELETE = T.let(T.unsafe(nil), String) - -# This middleware enables content encoding of http responses, -# usually for purposes of compression. -# -# Currently supported encodings: -# -# * gzip -# * identity (no transformation) -# -# This middleware automatically detects when encoding is supported -# and allowed. For example no encoding is made when a cache -# directive of 'no-transform' is present, when the response status -# code is one that doesn't allow an entity body, or when the body -# is empty. -# -# Note that despite the name, Deflater does not support the +deflate+ -# encoding. -# -# source://rack//lib/rack/deflater.rb#23 -class Rack::Deflater - # Creates Rack::Deflater middleware. Options: - # - # :if :: a lambda enabling / disabling deflation based on returned boolean value - # (e.g use Rack::Deflater, :if => lambda { |*, body| sum=0; body.each { |i| sum += i.length }; sum > 512 }). - # However, be aware that calling `body.each` inside the block will break cases where `body.each` is not idempotent, - # such as when it is an +IO+ instance. - # :include :: a list of content types that should be compressed. By default, all content types are compressed. - # :sync :: determines if the stream is going to be flushed after every chunk. Flushing after every chunk reduces - # latency for time-sensitive streaming applications, but hurts compression and throughput. - # Defaults to +true+. - # - # @return [Deflater] a new instance of Deflater - # - # source://rack//lib/rack/deflater.rb#36 - def initialize(app, options = T.unsafe(nil)); end - - # source://rack//lib/rack/deflater.rb#43 - def call(env); end - - private - - # Whether the body should be compressed. - # - # @return [Boolean] - # - # source://rack//lib/rack/deflater.rb#122 - def should_deflate?(env, status, headers, body); end -end - -# Body class used for gzip encoded responses. -# -# source://rack//lib/rack/deflater.rb#79 -class Rack::Deflater::GzipStream - # Initialize the gzip stream. Arguments: - # body :: Response body to compress with gzip - # mtime :: The modification time of the body, used to set the - # modification time in the gzip header. - # sync :: Whether to flush each gzip chunk as soon as it is ready. - # - # @return [GzipStream] a new instance of GzipStream - # - # source://rack//lib/rack/deflater.rb#85 - def initialize(body, mtime, sync); end - - # Close the original body if possible. - # - # source://rack//lib/rack/deflater.rb#114 - def close; end - - # Yield gzip compressed strings to the given block. - # - # source://rack//lib/rack/deflater.rb#92 - def each(&block); end - - # Call the block passed to #each with the the gzipped data. - # - # source://rack//lib/rack/deflater.rb#109 - def write(data); end -end - -# Rack::Directory serves entries below the +root+ given, according to the -# path info of the Rack request. If a directory is found, the file's contents -# will be presented in an html based index. If a file is found, the env will -# be passed to the specified +app+. -# -# If +app+ is not specified, a Rack::Files of the same +root+ will be used. -# -# source://rack//lib/rack/directory.rb#13 -class Rack::Directory - # Set the root directory and application for serving files. - # - # @return [Directory] a new instance of Directory - # - # source://rack//lib/rack/directory.rb#77 - def initialize(root, app = T.unsafe(nil)); end - - # source://rack//lib/rack/directory.rb#83 - def call(env); end - - # Rack response to use for requests with invalid paths, or nil if path is valid. - # - # source://rack//lib/rack/directory.rb#103 - def check_bad_request(path_info); end - - # Rack response to use for requests with paths outside the root, or nil if path is inside the root. - # - # source://rack//lib/rack/directory.rb#113 - def check_forbidden(path_info); end - - # Rack response to use for unreadable and non-file, non-directory entries. - # - # source://rack//lib/rack/directory.rb#175 - def entity_not_found(path_info); end - - # Provide human readable file sizes - # - # source://rack//lib/rack/directory.rb#191 - def filesize_format(int); end - - # Internals of request handling. Similar to call but does - # not remove body for HEAD requests. - # - # source://rack//lib/rack/directory.rb#90 - def get(env); end - - # Rack response to use for directories under the root. - # - # source://rack//lib/rack/directory.rb#124 - def list_directory(path_info, path, script_name); end - - # Rack response to use for files and directories under the root. - # Unreadable and non-file, non-directory entries will get a 404 response. - # - # source://rack//lib/rack/directory.rb#165 - def list_path(env, path, path_info, script_name); end - - # The root of the directory hierarchy. Only requests for files and - # directories inside of the root directory are supported. - # - # source://rack//lib/rack/directory.rb#74 - def root; end - - # File::Stat for the given path, but return nil for missing/bad entries. - # - # source://rack//lib/rack/directory.rb#157 - def stat(path); end -end - -# source://rack//lib/rack/directory.rb#14 -Rack::Directory::DIR_FILE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/directory.rb#37 -Rack::Directory::DIR_PAGE_FOOTER = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/directory.rb#15 -Rack::Directory::DIR_PAGE_HEADER = T.let(T.unsafe(nil), String) - -# Body class for directory entries, showing an index page with links -# to each file. -# -# source://rack//lib/rack/directory.rb#45 -class Rack::Directory::DirectoryBody < ::Struct - # Yield strings for each part of the directory entry - # - # @yield [DIR_PAGE_HEADER % [ show_path, show_path ]] - # - # source://rack//lib/rack/directory.rb#47 - def each; end - - private - - # Escape each element in the array of html strings. - # - # source://rack//lib/rack/directory.rb#67 - def DIR_FILE_escape(htmls); end -end - -# Stolen from Ramaze -# -# source://rack//lib/rack/directory.rb#183 -Rack::Directory::FILESIZE_FORMAT = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack.rb#36 -Rack::ETAG = T.let(T.unsafe(nil), String) - -# Automatically sets the ETag header on all String bodies. -# -# The ETag header is skipped if ETag or Last-Modified headers are sent or if -# a sendfile body (body.responds_to :to_path) is given (since such cases -# should be handled by apache/nginx). -# -# On initialization, you can pass two parameters: a Cache-Control directive -# used when Etag is absent and a directive when it is present. The first -# defaults to nil, while the second defaults to "max-age=0, private, must-revalidate" -# -# source://rack//lib/rack/etag.rb#16 -class Rack::ETag - # @return [ETag] a new instance of ETag - # - # source://rack//lib/rack/etag.rb#20 - def initialize(app, no_cache_control = T.unsafe(nil), cache_control = T.unsafe(nil)); end - - # source://rack//lib/rack/etag.rb#26 - def call(env); end - - private - - # source://rack//lib/rack/etag.rb#65 - def digest_body(body); end - - # @return [Boolean] - # - # source://rack//lib/rack/etag.rb#57 - def etag_body?(body); end - - # @return [Boolean] - # - # source://rack//lib/rack/etag.rb#53 - def etag_status?(status); end - - # @return [Boolean] - # - # source://rack//lib/rack/etag.rb#61 - def skip_caching?(headers); end -end - -# source://rack//lib/rack/etag.rb#18 -Rack::ETag::DEFAULT_CACHE_CONTROL = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/etag.rb#17 -Rack::ETag::ETAG_STRING = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#30 -Rack::EXPIRES = T.let(T.unsafe(nil), String) - -# This middleware provides hooks to certain places in the request / -# response lifecycle. This is so that middleware that don't need to filter -# the response data can safely leave it alone and not have to send messages -# down the traditional "rack stack". -# -# The events are: -# -# * on_start(request, response) -# -# This event is sent at the start of the request, before the next -# middleware in the chain is called. This method is called with a request -# object, and a response object. Right now, the response object is always -# nil, but in the future it may actually be a real response object. -# -# * on_commit(request, response) -# -# The response has been committed. The application has returned, but the -# response has not been sent to the webserver yet. This method is always -# called with a request object and the response object. The response -# object is constructed from the rack triple that the application returned. -# Changes may still be made to the response object at this point. -# -# * on_send(request, response) -# -# The webserver has started iterating over the response body and presumably -# has started sending data over the wire. This method is always called with -# a request object and the response object. The response object is -# constructed from the rack triple that the application returned. Changes -# SHOULD NOT be made to the response object as the webserver has already -# started sending data. Any mutations will likely result in an exception. -# -# * on_finish(request, response) -# -# The webserver has closed the response, and all data has been written to -# the response socket. The request and response object should both be -# read-only at this point. The body MAY NOT be available on the response -# object as it may have been flushed to the socket. -# -# * on_error(request, response, error) -# -# An exception has occurred in the application or an `on_commit` event. -# This method will get the request, the response (if available) and the -# exception that was raised. -# -# ## Order -# -# `on_start` is called on the handlers in the order that they were passed to -# the constructor. `on_commit`, on_send`, `on_finish`, and `on_error` are -# called in the reverse order. `on_finish` handlers are called inside an -# `ensure` block, so they are guaranteed to be called even if something -# raises an exception. If something raises an exception in a `on_finish` -# method, then nothing is guaranteed. -# -# source://rack//lib/rack/events.rb#57 -class Rack::Events - # @return [Events] a new instance of Events - # - # source://rack//lib/rack/events.rb#102 - def initialize(app, handlers); end - - # source://rack//lib/rack/events.rb#107 - def call(env); end - - private - - # source://rack//lib/rack/events.rb#145 - def make_request(env); end - - # source://rack//lib/rack/events.rb#149 - def make_response(status, headers, body); end - - # source://rack//lib/rack/events.rb#133 - def on_commit(request, response); end - - # source://rack//lib/rack/events.rb#129 - def on_error(request, response, e); end - - # source://rack//lib/rack/events.rb#141 - def on_finish(request, response); end - - # source://rack//lib/rack/events.rb#137 - def on_start(request, response); end -end - -# source://rack//lib/rack/events.rb#58 -module Rack::Events::Abstract - # source://rack//lib/rack/events.rb#62 - def on_commit(req, res); end - - # source://rack//lib/rack/events.rb#71 - def on_error(req, res, e); end - - # source://rack//lib/rack/events.rb#68 - def on_finish(req, res); end - - # source://rack//lib/rack/events.rb#65 - def on_send(req, res); end - - # source://rack//lib/rack/events.rb#59 - def on_start(req, res); end -end - -# source://rack//lib/rack/events.rb#91 -class Rack::Events::BufferedResponse < ::Rack::Response::Raw - # @return [BufferedResponse] a new instance of BufferedResponse - # - # source://rack//lib/rack/events.rb#94 - def initialize(status, headers, body); end - - # Returns the value of attribute body. - # - # source://rack//lib/rack/events.rb#92 - def body; end - - # source://rack//lib/rack/events.rb#99 - def to_a; end -end - -# source://rack//lib/rack/events.rb#75 -class Rack::Events::EventedBodyProxy < ::Rack::BodyProxy - # @return [EventedBodyProxy] a new instance of EventedBodyProxy - # - # source://rack//lib/rack/events.rb#78 - def initialize(body, request, response, handlers, &block); end - - # source://rack//lib/rack/events.rb#85 - def each; end - - # Returns the value of attribute request. - # - # source://rack//lib/rack/events.rb#76 - def request; end - - # Returns the value of attribute response. - # - # source://rack//lib/rack/events.rb#76 - def response; end -end - -# source://rack//lib/rack/file.rb#6 -Rack::File = Rack::Files - -# Rack::Files serves files below the +root+ directory given, according to the -# path info of the Rack request. -# e.g. when Rack::Files.new("/etc") is used, you can access 'passwd' file -# as http://localhost:9292/passwd -# -# Handlers can detect if bodies are a Rack::Files, and use mechanisms -# like sendfile on the +path+. -# -# source://rack//lib/rack/files.rb#14 -class Rack::Files - # @return [Files] a new instance of Files - # - # source://rack//lib/rack/files.rb#29 - def initialize(root, headers = T.unsafe(nil), default_mime = T.unsafe(nil)); end - - # source://rack//lib/rack/files.rb#36 - def call(env); end - - # source://rack//lib/rack/files.rb#41 - def get(env); end - - # Returns the value of attribute root. - # - # source://rack//lib/rack/files.rb#27 - def root; end - - # source://rack//lib/rack/files.rb#70 - def serving(request, path); end - - private - - # source://rack//lib/rack/files.rb#192 - def fail(status, body, headers = T.unsafe(nil)); end - - # source://rack//lib/rack/files.rb#211 - def filesize(path); end - - # The MIME type for the contents of the file located at @path - # - # source://rack//lib/rack/files.rb#207 - def mime_type(path, default_mime); end - - class << self - # @todo remove in 3.0 - # - # source://rack//lib/rack/files.rb#20 - def method_added(name); end - end -end - -# source://rack//lib/rack/files.rb#15 -Rack::Files::ALLOWED_VERBS = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/files.rb#16 -Rack::Files::ALLOW_HEADER = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/files.rb#123 -class Rack::Files::BaseIterator - # @return [BaseIterator] a new instance of BaseIterator - # - # source://rack//lib/rack/files.rb#126 - def initialize(path, ranges, options); end - - # source://rack//lib/rack/files.rb#146 - def bytesize; end - - # source://rack//lib/rack/files.rb#155 - def close; end - - # source://rack//lib/rack/files.rb#132 - def each; end - - # Returns the value of attribute options. - # - # source://rack//lib/rack/files.rb#124 - def options; end - - # Returns the value of attribute path. - # - # source://rack//lib/rack/files.rb#124 - def path; end - - # Returns the value of attribute ranges. - # - # source://rack//lib/rack/files.rb#124 - def ranges; end - - private - - # source://rack//lib/rack/files.rb#173 - def each_range_part(file, range); end - - # @return [Boolean] - # - # source://rack//lib/rack/files.rb#159 - def multipart?; end - - # source://rack//lib/rack/files.rb#163 - def multipart_heading(range); end -end - -# source://rack//lib/rack/files.rb#186 -class Rack::Files::Iterator < ::Rack::Files::BaseIterator - # source://rack//lib/rack/files.rb#124 - def to_path; end -end - -# source://rack//lib/rack/files.rb#17 -Rack::Files::MULTIPART_BOUNDARY = T.let(T.unsafe(nil), String) - -# Rack::ForwardRequest gets caught by Rack::Recursive and redirects -# the current request to the app at +url+. -# -# raise ForwardRequest.new("/not-found") -# -# source://rack//lib/rack/recursive.rb#12 -class Rack::ForwardRequest < ::Exception - # @return [ForwardRequest] a new instance of ForwardRequest - # - # source://rack//lib/rack/recursive.rb#15 - def initialize(url, env = T.unsafe(nil)); end - - # Returns the value of attribute env. - # - # source://rack//lib/rack/recursive.rb#13 - def env; end - - # Returns the value of attribute url. - # - # source://rack//lib/rack/recursive.rb#13 - def url; end -end - -# HTTP method verbs -# -# source://rack//lib/rack.rb#39 -Rack::GET = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#44 -Rack::HEAD = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#20 -Rack::HTTPS = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#35 -Rack::HTTP_COOKIE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#17 -Rack::HTTP_HOST = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#18 -Rack::HTTP_PORT = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#19 -Rack::HTTP_VERSION = T.let(T.unsafe(nil), String) - -# *Handlers* connect web servers with Rack. -# -# Rack includes Handlers for Thin, WEBrick, FastCGI, CGI, SCGI -# and LiteSpeed. -# -# Handlers usually are activated by calling MyHandler.run(myapp). -# A second optional hash can be passed to include server-specific -# configuration. -# -# source://rack//lib/rack/handler.rb#12 -module Rack::Handler - class << self - # source://rack//lib/rack/handler.rb#51 - def default; end - - # source://rack//lib/rack/handler.rb#13 - def get(server); end - - # Select first available Rack handler given an `Array` of server names. - # Raises `LoadError` if no handler was found. - # - # > pick ['thin', 'webrick'] - # => Rack::Handler::WEBrick - # - # @raise [LoadError] - # - # source://rack//lib/rack/handler.rb#36 - def pick(server_names); end - - # source://rack//lib/rack/handler.rb#85 - def register(server, klass); end - - # Transforms server-name constants to their canonical form as filenames, - # then tries to require them but silences the LoadError if not found - # - # Naming convention: - # - # Foo # => 'foo' - # FooBar # => 'foo_bar.rb' - # FooBAR # => 'foobar.rb' - # FOObar # => 'foobar.rb' - # FOOBAR # => 'foobar.rb' - # FooBarBaz # => 'foo_bar_baz.rb' - # - # source://rack//lib/rack/handler.rb#75 - def try_require(prefix, const_name); end - end -end - -# source://rack//lib/rack/handler/cgi.rb#5 -class Rack::Handler::CGI - class << self - # source://rack//lib/rack/handler/cgi.rb#6 - def run(app, **options); end - - # source://rack//lib/rack/handler/cgi.rb#51 - def send_body(body); end - - # source://rack//lib/rack/handler/cgi.rb#40 - def send_headers(status, headers); end - - # source://rack//lib/rack/handler/cgi.rb#11 - def serve(app); end - end -end - -# source://rack//lib/rack/handler.rb#48 -Rack::Handler::SERVER_NAMES = T.let(T.unsafe(nil), Array) - -# Rack::Head returns an empty body for all HEAD requests. It leaves -# all other requests unchanged. -# -# source://rack//lib/rack/head.rb#6 -class Rack::Head - # @return [Head] a new instance of Head - # - # source://rack//lib/rack/head.rb#7 - def initialize(app); end - - # source://rack//lib/rack/head.rb#11 - def call(env); end -end - -# source://rack//lib/rack.rb#46 -Rack::LINK = T.let(T.unsafe(nil), String) - -# Rack::Lint validates your application and the requests and -# responses according to the Rack spec. -# -# source://rack//lib/rack/lint.rb#9 -class Rack::Lint - include ::Rack::Lint::Assertion - - # @return [Lint] a new instance of Lint - # - # source://rack//lib/rack/lint.rb#10 - def initialize(app); end - - # source://rack//lib/rack/lint.rb#41 - def _call(env); end - - # A Rack application is a Ruby object (not a class) that - # responds to +call+. - # - # source://rack//lib/rack/lint.rb#37 - def call(env = T.unsafe(nil)); end - - # === The Content-Length - # - # source://rack//lib/rack/lint.rb#719 - def check_content_length(status, headers); end - - # === The Content-Type - # - # source://rack//lib/rack/lint.rb#705 - def check_content_type(status, headers); end - - # == The Environment - # - # source://rack//lib/rack/lint.rb#77 - def check_env(env); end - - # === The Error Stream - # - # source://rack//lib/rack/lint.rb#497 - def check_error(error); end - - # === The Headers - # - # source://rack//lib/rack/lint.rb#668 - def check_headers(header); end - - # === Hijacking - # - # AUTHORS: n.b. The trailing whitespace between paragraphs is important and - # should not be removed. The whitespace creates paragraphs in the RDoc - # output. - # - # ==== Request (before status) - # - # source://rack//lib/rack/lint.rb#562 - def check_hijack(env); end - - # ==== Response (after headers) - # It is also possible to hijack a response after the status and headers - # have been sent. - # - # source://rack//lib/rack/lint.rb#609 - def check_hijack_response(headers, env); end - - # === The Input Stream - # - # The input stream is an IO-like object which contains the raw HTTP - # POST data. - # - # source://rack//lib/rack/lint.rb#377 - def check_input(input); end - - # === The Status - # - # source://rack//lib/rack/lint.rb#661 - def check_status(status); end - - # source://rack//lib/rack/lint.rb#792 - def close; end - - # === The Body - # - # source://rack//lib/rack/lint.rb#745 - def each; end - - # source://rack//lib/rack/lint.rb#732 - def verify_content_length(bytes); end -end - -# source://rack//lib/rack/lint.rb#18 -module Rack::Lint::Assertion - # source://rack//lib/rack/lint.rb#19 - def assert(message); end -end - -# source://rack//lib/rack/lint.rb#506 -class Rack::Lint::ErrorWrapper - include ::Rack::Lint::Assertion - - # @return [ErrorWrapper] a new instance of ErrorWrapper - # - # source://rack//lib/rack/lint.rb#509 - def initialize(error); end - - # * +close+ must never be called on the error stream. - # - # source://rack//lib/rack/lint.rb#531 - def close(*args); end - - # * +flush+ must be called without arguments and must be called - # in order to make the error appear for sure. - # - # source://rack//lib/rack/lint.rb#526 - def flush; end - - # * +puts+ must be called with a single argument that responds to +to_s+. - # - # source://rack//lib/rack/lint.rb#514 - def puts(str); end - - # * +write+ must be called with a single argument that is a String. - # - # source://rack//lib/rack/lint.rb#519 - def write(str); end -end - -# source://rack//lib/rack/lint.rb#536 -class Rack::Lint::HijackWrapper - include ::Rack::Lint::Assertion - extend ::Forwardable - - # @return [HijackWrapper] a new instance of HijackWrapper - # - # source://rack//lib/rack/lint.rb#547 - def initialize(io); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def close(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def close_read(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def close_write(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def closed?(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def flush(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def read(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def read_nonblock(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def write(*args, **_arg1, &block); end - - # source://forwardable/1.3.3/forwardable.rb#231 - def write_nonblock(*args, **_arg1, &block); end -end - -# source://rack//lib/rack/lint.rb#540 -Rack::Lint::HijackWrapper::REQUIRED_METHODS = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/lint.rb#395 -class Rack::Lint::InputWrapper - include ::Rack::Lint::Assertion - - # @return [InputWrapper] a new instance of InputWrapper - # - # source://rack//lib/rack/lint.rb#398 - def initialize(input); end - - # * +close+ must never be called on the input stream. - # - # source://rack//lib/rack/lint.rb#491 - def close(*args); end - - # * +each+ must be called without arguments and only yield Strings. - # - # source://rack//lib/rack/lint.rb#463 - def each(*args); end - - # * +gets+ must be called without arguments and return a string, - # or +nil+ on EOF. - # - # source://rack//lib/rack/lint.rb#404 - def gets(*args); end - - # * +read+ behaves like IO#read. - # Its signature is read([length, [buffer]]). - # - # If given, +length+ must be a non-negative Integer (>= 0) or +nil+, - # and +buffer+ must be a String and may not be nil. - # - # If +length+ is given and not nil, then this method reads at most - # +length+ bytes from the input stream. - # - # If +length+ is not given or nil, then this method reads - # all data until EOF. - # - # When EOF is reached, this method returns nil if +length+ is given - # and not nil, or "" if +length+ is not given or is nil. - # - # If +buffer+ is given, then the read data will be placed - # into +buffer+ instead of a newly created String object. - # - # source://rack//lib/rack/lint.rb#430 - def read(*args); end - - # * +rewind+ must be called without arguments. It rewinds the input - # stream back to the beginning. It must not raise Errno::ESPIPE: - # that is, it may not be a pipe or a socket. Therefore, handler - # developers must buffer the input data into some rewindable object - # if the underlying input stream is not rewindable. - # - # source://rack//lib/rack/lint.rb#478 - def rewind(*args); end -end - -# :stopdoc: -# -# source://rack//lib/rack/lint.rb#17 -class Rack::Lint::LintError < ::RuntimeError; end - -# Rack::Lock locks every request inside a mutex, so that every request -# will effectively be executed synchronously. -# -# source://rack//lib/rack/lock.rb#8 -class Rack::Lock - # @return [Lock] a new instance of Lock - # - # source://rack//lib/rack/lock.rb#9 - def initialize(app, mutex = T.unsafe(nil)); end - - # source://rack//lib/rack/lock.rb#13 - def call(env); end - - private - - # source://rack//lib/rack/lock.rb#27 - def unlock; end -end - -# Sets up rack.logger to write to rack.errors stream -# -# source://rack//lib/rack/logger.rb#7 -class Rack::Logger - # @return [Logger] a new instance of Logger - # - # source://rack//lib/rack/logger.rb#8 - def initialize(app, level = T.unsafe(nil)); end - - # source://rack//lib/rack/logger.rb#12 - def call(env); end -end - -# Rack::MediaType parse media type and parameters out of content_type string -# -# source://rack//lib/rack/media_type.rb#6 -class Rack::MediaType - class << self - # The media type parameters provided in CONTENT_TYPE as a Hash, or - # an empty Hash if no CONTENT_TYPE or media-type parameters were - # provided. e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8", - # this method responds with the following Hash: - # { 'charset' => 'utf-8' } - # - # source://rack//lib/rack/media_type.rb#26 - def params(content_type); end - - # The media type (type/subtype) portion of the CONTENT_TYPE header - # without any media type parameters. e.g., when CONTENT_TYPE is - # "text/plain;charset=utf-8", the media-type is "text/plain". - # - # For more information on the use of media types in HTTP, see: - # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7 - # - # source://rack//lib/rack/media_type.rb#16 - def type(content_type); end - - private - - # source://rack//lib/rack/media_type.rb#38 - def strip_doublequotes(str); end - end -end - -# source://rack//lib/rack/media_type.rb#7 -Rack::MediaType::SPLIT_PATTERN = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/method_override.rb#4 -class Rack::MethodOverride - # @return [MethodOverride] a new instance of MethodOverride - # - # source://rack//lib/rack/method_override.rb#11 - def initialize(app); end - - # source://rack//lib/rack/method_override.rb#15 - def call(env); end - - # source://rack//lib/rack/method_override.rb#27 - def method_override(env); end - - private - - # source://rack//lib/rack/method_override.rb#40 - def allowed_methods; end - - # source://rack//lib/rack/method_override.rb#44 - def method_override_param(req); end -end - -# source://rack//lib/rack/method_override.rb#9 -Rack::MethodOverride::ALLOWED_METHODS = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/method_override.rb#5 -Rack::MethodOverride::HTTP_METHODS = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/method_override.rb#8 -Rack::MethodOverride::HTTP_METHOD_OVERRIDE_HEADER = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/method_override.rb#7 -Rack::MethodOverride::METHOD_OVERRIDE_PARAM_KEY = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/mime.rb#4 -module Rack::Mime - private - - # Returns true if the given value is a mime match for the given mime match - # specification, false otherwise. - # - # Rack::Mime.match?('text/html', 'text/*') => true - # Rack::Mime.match?('text/plain', '*') => true - # Rack::Mime.match?('text/html', 'application/json') => false - # - # @return [Boolean] - # - # source://rack//lib/rack/mime.rb#30 - def match?(value, matcher); end - - # Returns String with mime type if found, otherwise use +fallback+. - # +ext+ should be filename extension in the '.ext' format that - # File.extname(file) returns. - # +fallback+ may be any object - # - # Also see the documentation for MIME_TYPES - # - # Usage: - # Rack::Mime.mime_type('.foo') - # - # This is a shortcut for: - # Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream') - # - # source://rack//lib/rack/mime.rb#18 - def mime_type(ext, fallback = T.unsafe(nil)); end - - class << self - # Returns true if the given value is a mime match for the given mime match - # specification, false otherwise. - # - # Rack::Mime.match?('text/html', 'text/*') => true - # Rack::Mime.match?('text/plain', '*') => true - # Rack::Mime.match?('text/html', 'application/json') => false - # - # @return [Boolean] - # - # source://rack//lib/rack/mime.rb#30 - def match?(value, matcher); end - - # Returns String with mime type if found, otherwise use +fallback+. - # +ext+ should be filename extension in the '.ext' format that - # File.extname(file) returns. - # +fallback+ may be any object - # - # Also see the documentation for MIME_TYPES - # - # Usage: - # Rack::Mime.mime_type('.foo') - # - # This is a shortcut for: - # Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream') - # - # source://rack//lib/rack/mime.rb#18 - def mime_type(ext, fallback = T.unsafe(nil)); end - end -end - -# List of most common mime-types, selected various sources -# according to their usefulness in a webserving scope for Ruby -# users. -# -# To amend this list with your local mime.types list you can use: -# -# require 'webrick/httputils' -# list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types') -# Rack::Mime::MIME_TYPES.merge!(list) -# -# N.B. On Ubuntu the mime.types file does not include the leading period, so -# users may need to modify the data before merging into the hash. -# -# source://rack//lib/rack/mime.rb#51 -Rack::Mime::MIME_TYPES = T.let(T.unsafe(nil), Hash) - -# Rack::MockRequest helps testing your Rack application without -# actually using HTTP. -# -# After performing a request on a URL with get/post/put/patch/delete, it -# returns a MockResponse with useful helper methods for effective -# testing. -# -# You can pass a hash with additional configuration to the -# get/post/put/patch/delete. -# :input:: A String or IO-like to be used as rack.input. -# :fatal:: Raise a FatalWarning if the app writes to rack.errors. -# :lint:: If true, wrap the application in a Rack::Lint. -# -# source://rack//lib/rack/mock.rb#22 -class Rack::MockRequest - # @return [MockRequest] a new instance of MockRequest - # - # source://rack//lib/rack/mock.rb#52 - def initialize(app); end - - # Make a DELETE request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#65 - def delete(uri, opts = T.unsafe(nil)); end - - # Make a GET request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#57 - def get(uri, opts = T.unsafe(nil)); end - - # Make a HEAD request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#67 - def head(uri, opts = T.unsafe(nil)); end - - # Make an OPTIONS request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#69 - def options(uri, opts = T.unsafe(nil)); end - - # Make a PATCH request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#63 - def patch(uri, opts = T.unsafe(nil)); end - - # Make a POST request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#59 - def post(uri, opts = T.unsafe(nil)); end - - # Make a PUT request and return a MockResponse. See #request. - # - # source://rack//lib/rack/mock.rb#61 - def put(uri, opts = T.unsafe(nil)); end - - # Make a request using the given request method for the given - # uri to the rack application and return a MockResponse. - # Options given are passed to MockRequest.env_for. - # - # source://rack//lib/rack/mock.rb#74 - def request(method = T.unsafe(nil), uri = T.unsafe(nil), opts = T.unsafe(nil)); end - - class << self - # Return the Rack environment used for a request to +uri+. - # All options that are strings are added to the returned environment. - # Options: - # :fatal :: Whether to raise an exception if request outputs to rack.errors - # :input :: The rack.input to set - # :method :: The HTTP request method to use - # :params :: The params to use - # :script_name :: The SCRIPT_NAME to set - # - # source://rack//lib/rack/mock.rb#105 - def env_for(uri = T.unsafe(nil), opts = T.unsafe(nil)); end - - # For historical reasons, we're pinning to RFC 2396. - # URI::Parser = URI::RFC2396_Parser - # - # source://rack//lib/rack/mock.rb#92 - def parse_uri_rfc2396(uri); end - end -end - -# source://rack//lib/rack/mock.rb#43 -Rack::MockRequest::DEFAULT_ENV = T.let(T.unsafe(nil), Hash) - -# source://rack//lib/rack/mock.rb#26 -class Rack::MockRequest::FatalWarner - # source://rack//lib/rack/mock.rb#35 - def flush; end - - # @raise [FatalWarning] - # - # source://rack//lib/rack/mock.rb#27 - def puts(warning); end - - # source://rack//lib/rack/mock.rb#38 - def string; end - - # @raise [FatalWarning] - # - # source://rack//lib/rack/mock.rb#31 - def write(warning); end -end - -# source://rack//lib/rack/mock.rb#23 -class Rack::MockRequest::FatalWarning < ::RuntimeError; end - -# Rack::MockResponse provides useful helpers for testing your apps. -# Usually, you don't create the MockResponse on your own, but use -# MockRequest. -# -# source://rack//lib/rack/mock.rb#173 -class Rack::MockResponse < ::Rack::Response - # @return [MockResponse] a new instance of MockResponse - # - # source://rack//lib/rack/mock.rb#184 - def initialize(status, headers, body, errors = T.unsafe(nil)); end - - # source://rack//lib/rack/mock.rb#194 - def =~(other); end - - # source://rack//lib/rack/mock.rb#202 - def body; end - - # source://rack//lib/rack/mock.rb#226 - def cookie(name); end - - # Headers - # - # source://rack//lib/rack/mock.rb#179 - def cookies; end - - # @return [Boolean] - # - # source://rack//lib/rack/mock.rb#222 - def empty?; end - - # Errors - # - # source://rack//lib/rack/mock.rb#182 - def errors; end - - # Errors - # - # source://rack//lib/rack/mock.rb#182 - def errors=(_arg0); end - - # source://rack//lib/rack/mock.rb#198 - def match(other); end - - # Headers - # - # source://rack//lib/rack/mock.rb#179 - def original_headers; end - - private - - # source://rack//lib/rack/mock.rb#253 - def identify_cookie_attributes(cookie_filling); end - - # source://rack//lib/rack/mock.rb#232 - def parse_cookies_from_header; end - - class << self - def [](*_arg0); end - end -end - -# A multipart form data parser, adapted from IOWA. -# -# Usually, Rack::Request#POST takes care of calling this. -# -# source://rack//lib/rack/multipart/parser.rb#6 -module Rack::Multipart - class << self - # source://rack//lib/rack/multipart.rb#58 - def build_multipart(params, first = T.unsafe(nil)); end - - # source://rack//lib/rack/multipart.rb#44 - def extract_multipart(req, params = T.unsafe(nil)); end - - # source://rack//lib/rack/multipart.rb#40 - def parse_multipart(env, params = T.unsafe(nil)); end - end -end - -# source://rack//lib/rack/multipart.rb#25 -Rack::Multipart::ATTRIBUTE = T.let(T.unsafe(nil), Regexp) - -# Updated definitions from RFC 2231 -# -# source://rack//lib/rack/multipart.rb#24 -Rack::Multipart::ATTRIBUTE_CHAR = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#19 -Rack::Multipart::BROKEN = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#17 -Rack::Multipart::CONDISP = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#36 -Rack::Multipart::DISPPARM = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#13 -Rack::Multipart::EOL = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/multipart.rb#32 -Rack::Multipart::EXTENDED_INITIAL_NAME = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#34 -Rack::Multipart::EXTENDED_INITIAL_PARAMETER = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#33 -Rack::Multipart::EXTENDED_INITIAL_VALUE = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#29 -Rack::Multipart::EXTENDED_OTHER_NAME = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#31 -Rack::Multipart::EXTENDED_OTHER_PARAMETER = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#30 -Rack::Multipart::EXTENDED_OTHER_VALUE = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#35 -Rack::Multipart::EXTENDED_PARAMETER = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart/generator.rb#5 -class Rack::Multipart::Generator - # @return [Generator] a new instance of Generator - # - # source://rack//lib/rack/multipart/generator.rb#6 - def initialize(params, first = T.unsafe(nil)); end - - # source://rack//lib/rack/multipart/generator.rb#14 - def dump; end - - private - - # source://rack//lib/rack/multipart/generator.rb#87 - def content_for_other(file, name); end - - # source://rack//lib/rack/multipart/generator.rb#75 - def content_for_tempfile(io, file, name); end - - # source://rack//lib/rack/multipart/generator.rb#50 - def flattened_params; end - - # @return [Boolean] - # - # source://rack//lib/rack/multipart/generator.rb#35 - def multipart?; end -end - -# source://rack//lib/rack/multipart.rb#15 -Rack::Multipart::MULTIPART = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#14 -Rack::Multipart::MULTIPART_BOUNDARY = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/multipart.rb#21 -Rack::Multipart::MULTIPART_CONTENT_DISPOSITION = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#22 -Rack::Multipart::MULTIPART_CONTENT_ID = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#20 -Rack::Multipart::MULTIPART_CONTENT_TYPE = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart/parser.rb#7 -class Rack::Multipart::MultipartPartLimitError < ::Errno::EMFILE; end - -# source://rack//lib/rack/multipart/parser.rb#8 -class Rack::Multipart::MultipartTotalPartLimitError < ::StandardError; end - -# source://rack//lib/rack/multipart/parser.rb#10 -class Rack::Multipart::Parser - # @return [Parser] a new instance of Parser - # - # source://rack//lib/rack/multipart/parser.rb#178 - def initialize(boundary, tempfile, bufsize, query_parser); end - - # source://rack//lib/rack/multipart/parser.rb#196 - def on_read(content); end - - # source://rack//lib/rack/multipart/parser.rb#202 - def result; end - - # Returns the value of attribute state. - # - # source://rack//lib/rack/multipart/parser.rb#176 - def state; end - - private - - # source://rack//lib/rack/multipart/parser.rb#294 - def consume_boundary; end - - # source://rack//lib/rack/multipart/parser.rb#292 - def full_boundary; end - - # source://rack//lib/rack/multipart/parser.rb#304 - def get_filename(head); end - - # source://rack//lib/rack/multipart/parser.rb#240 - def handle_consume_token; end - - # source://rack//lib/rack/multipart/parser.rb#369 - def handle_empty_content!(content); end - - # source://rack//lib/rack/multipart/parser.rb#231 - def handle_fast_forward; end - - # source://rack//lib/rack/multipart/parser.rb#273 - def handle_mime_body; end - - # source://rack//lib/rack/multipart/parser.rb#250 - def handle_mime_head; end - - # source://rack//lib/rack/multipart/parser.rb#214 - def run_parser; end - - # source://rack//lib/rack/multipart/parser.rb#341 - def tag_multipart_encoding(filename, content_type, name, body); end - - class << self - # source://rack//lib/rack/multipart/parser.rb#64 - def parse(io, content_length, content_type, tmpfile, bufsize, qp); end - - # source://rack//lib/rack/multipart/parser.rb#57 - def parse_boundary(content_type); end - end -end - -# source://rack//lib/rack/multipart/parser.rb#19 -Rack::Multipart::Parser::BOUNDARY_REGEX = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart/parser.rb#13 -Rack::Multipart::Parser::BUFSIZE = T.let(T.unsafe(nil), Integer) - -# source://rack//lib/rack/multipart/parser.rb#21 -class Rack::Multipart::Parser::BoundedIO - # @return [BoundedIO] a new instance of BoundedIO - # - # source://rack//lib/rack/multipart/parser.rb#22 - def initialize(io, content_length); end - - # source://rack//lib/rack/multipart/parser.rb#28 - def read(size, outbuf = T.unsafe(nil)); end - - # source://rack//lib/rack/multipart/parser.rb#49 - def rewind; end -end - -# source://rack//lib/rack/multipart/parser.rb#339 -Rack::Multipart::Parser::CHARSET = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/multipart/parser.rb#85 -class Rack::Multipart::Parser::Collector - include ::Enumerable - - # @return [Collector] a new instance of Collector - # - # source://rack//lib/rack/multipart/parser.rb#121 - def initialize(tempfile); end - - # source://rack//lib/rack/multipart/parser.rb#127 - def each; end - - # source://rack//lib/rack/multipart/parser.rb#147 - def on_mime_body(mime_index, content); end - - # source://rack//lib/rack/multipart/parser.rb#151 - def on_mime_finish(mime_index); end - - # source://rack//lib/rack/multipart/parser.rb#131 - def on_mime_head(mime_index, head, filename, content_type, name); end - - private - - # source://rack//lib/rack/multipart/parser.rb#156 - def check_part_limits; end -end - -# source://rack//lib/rack/multipart/parser.rb#109 -class Rack::Multipart::Parser::Collector::BufferPart < ::Rack::Multipart::Parser::Collector::MimePart - # source://rack//lib/rack/multipart/parser.rb#111 - def close; end - - # @return [Boolean] - # - # source://rack//lib/rack/multipart/parser.rb#110 - def file?; end -end - -# source://rack//lib/rack/multipart/parser.rb#86 -class Rack::Multipart::Parser::Collector::MimePart < ::Struct - # @yield [data] - # - # source://rack//lib/rack/multipart/parser.rb#87 - def get_data; end -end - -# source://rack//lib/rack/multipart/parser.rb#114 -class Rack::Multipart::Parser::Collector::TempfilePart < ::Rack::Multipart::Parser::Collector::MimePart - # source://rack//lib/rack/multipart/parser.rb#116 - def close; end - - # @return [Boolean] - # - # source://rack//lib/rack/multipart/parser.rb#115 - def file?; end -end - -# source://rack//lib/rack/multipart/parser.rb#55 -Rack::Multipart::Parser::EMPTY = T.let(T.unsafe(nil), Rack::Multipart::Parser::MultipartInfo) - -# source://rack//lib/rack/multipart/parser.rb#54 -class Rack::Multipart::Parser::MultipartInfo < ::Struct - # Returns the value of attribute params - # - # @return [Object] the current value of params - def params; end - - # Sets the attribute params - # - # @param value [Object] the value to set the attribute params to. - # @return [Object] the newly set value - def params=(_); end - - # Returns the value of attribute tmp_files - # - # @return [Object] the current value of tmp_files - def tmp_files; end - - # Sets the attribute tmp_files - # - # @param value [Object] the value to set the attribute tmp_files to. - # @return [Object] the newly set value - def tmp_files=(_); end - - class << self - def [](*_arg0); end - def inspect; end - def keyword_init?; end - def members; end - def new(*_arg0); end - end -end - -# source://rack//lib/rack/multipart/parser.rb#15 -Rack::Multipart::Parser::TEMPFILE_FACTORY = T.let(T.unsafe(nil), Proc) - -# source://rack//lib/rack/multipart/parser.rb#14 -Rack::Multipart::Parser::TEXT_PLAIN = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/multipart.rb#28 -Rack::Multipart::REGULAR_PARAMETER = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#27 -Rack::Multipart::REGULAR_PARAMETER_NAME = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#37 -Rack::Multipart::RFC2183 = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#26 -Rack::Multipart::SECTION = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart.rb#16 -Rack::Multipart::TOKEN = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/multipart/uploaded_file.rb#5 -class Rack::Multipart::UploadedFile - # @return [UploadedFile] a new instance of UploadedFile - # - # source://rack//lib/rack/multipart/uploaded_file.rb#12 - def initialize(filepath = T.unsafe(nil), ct = T.unsafe(nil), bin = T.unsafe(nil), path: T.unsafe(nil), content_type: T.unsafe(nil), binary: T.unsafe(nil), filename: T.unsafe(nil), io: T.unsafe(nil)); end - - # The content type of the "uploaded" file - # - # source://rack//lib/rack/multipart/uploaded_file.rb#10 - def content_type; end - - # The content type of the "uploaded" file - # - # source://rack//lib/rack/multipart/uploaded_file.rb#10 - def content_type=(_arg0); end - - # source://rack//lib/rack/multipart/uploaded_file.rb#27 - def local_path; end - - # source://rack//lib/rack/multipart/uploaded_file.rb#36 - def method_missing(method_name, *args, &block); end - - # The filename, *not* including the path, of the "uploaded" file - # - # source://rack//lib/rack/multipart/uploaded_file.rb#7 - def original_filename; end - - # source://rack//lib/rack/multipart/uploaded_file.rb#27 - def path; end - - # @return [Boolean] - # - # source://rack//lib/rack/multipart/uploaded_file.rb#32 - def respond_to?(*args); end -end - -# source://rack//lib/rack/multipart.rb#18 -Rack::Multipart::VALUE = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/null_logger.rb#4 -class Rack::NullLogger - # @return [NullLogger] a new instance of NullLogger - # - # source://rack//lib/rack/null_logger.rb#5 - def initialize(app); end - - # source://rack//lib/rack/null_logger.rb#37 - def <<(msg); end - - # source://rack//lib/rack/null_logger.rb#36 - def add(severity, message = T.unsafe(nil), progname = T.unsafe(nil), &block); end - - # source://rack//lib/rack/null_logger.rb#9 - def call(env); end - - # source://rack//lib/rack/null_logger.rb#35 - def close; end - - # source://rack//lib/rack/null_logger.rb#27 - def datetime_format; end - - # source://rack//lib/rack/null_logger.rb#32 - def datetime_format=(datetime_format); end - - # source://rack//lib/rack/null_logger.rb#15 - def debug(progname = T.unsafe(nil), &block); end - - # @return [Boolean] - # - # source://rack//lib/rack/null_logger.rb#21 - def debug?; end - - # source://rack//lib/rack/null_logger.rb#17 - def error(progname = T.unsafe(nil), &block); end - - # @return [Boolean] - # - # source://rack//lib/rack/null_logger.rb#23 - def error?; end - - # source://rack//lib/rack/null_logger.rb#18 - def fatal(progname = T.unsafe(nil), &block); end - - # @return [Boolean] - # - # source://rack//lib/rack/null_logger.rb#24 - def fatal?; end - - # source://rack//lib/rack/null_logger.rb#28 - def formatter; end - - # source://rack//lib/rack/null_logger.rb#33 - def formatter=(formatter); end - - # source://rack//lib/rack/null_logger.rb#14 - def info(progname = T.unsafe(nil), &block); end - - # @return [Boolean] - # - # source://rack//lib/rack/null_logger.rb#20 - def info?; end - - # source://rack//lib/rack/null_logger.rb#25 - def level; end - - # source://rack//lib/rack/null_logger.rb#30 - def level=(level); end - - # source://rack//lib/rack/null_logger.rb#26 - def progname; end - - # source://rack//lib/rack/null_logger.rb#31 - def progname=(progname); end - - # source://rack//lib/rack/null_logger.rb#29 - def sev_threshold; end - - # source://rack//lib/rack/null_logger.rb#34 - def sev_threshold=(sev_threshold); end - - # source://rack//lib/rack/null_logger.rb#19 - def unknown(progname = T.unsafe(nil), &block); end - - # source://rack//lib/rack/null_logger.rb#16 - def warn(progname = T.unsafe(nil), &block); end - - # @return [Boolean] - # - # source://rack//lib/rack/null_logger.rb#22 - def warn?; end -end - -# source://rack//lib/rack.rb#45 -Rack::OPTIONS = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#42 -Rack::PATCH = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#21 -Rack::PATH_INFO = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#40 -Rack::POST = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#41 -Rack::PUT = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#25 -Rack::QUERY_STRING = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/query_parser.rb#4 -class Rack::QueryParser - # @return [QueryParser] a new instance of QueryParser - # - # source://rack//lib/rack/query_parser.rb#29 - def initialize(params_class, key_space_limit, param_depth_limit); end - - # Returns the value of attribute key_space_limit. - # - # source://rack//lib/rack/query_parser.rb#27 - def key_space_limit; end - - # source://rack//lib/rack/query_parser.rb#128 - def make_params; end - - # source://rack//lib/rack/query_parser.rb#136 - def new_depth_limit(param_depth_limit); end - - # source://rack//lib/rack/query_parser.rb#132 - def new_space_limit(key_space_limit); end - - # normalize_params recursively expands parameters into structural types. If - # the structural types represented by two different parameter names are in - # conflict, a ParameterTypeError is raised. - # - # @raise [ParamsTooDeepError] - # - # source://rack//lib/rack/query_parser.rb#87 - def normalize_params(params, name, v, depth); end - - # Returns the value of attribute param_depth_limit. - # - # source://rack//lib/rack/query_parser.rb#27 - def param_depth_limit; end - - # parse_nested_query expands a query string into structural types. Supported - # types are Arrays, Hashes and basic value types. It is possible to supply - # query strings with parameters of conflicting types, in this case a - # ParameterTypeError is raised. Users are encouraged to return a 400 in this - # case. - # - # source://rack//lib/rack/query_parser.rb#68 - def parse_nested_query(qs, d = T.unsafe(nil)); end - - # Stolen from Mongrel, with some small modifications: - # Parses a query string by breaking it up at the '&' - # and ';' characters. You can also use this to parse - # cookies by changing the characters used in the second - # parameter (which defaults to '&;'). - # - # source://rack//lib/rack/query_parser.rb#40 - def parse_query(qs, d = T.unsafe(nil), &unescaper); end - - private - - # @return [Boolean] - # - # source://rack//lib/rack/query_parser.rb#146 - def params_hash_has_key?(hash, key); end - - # @return [Boolean] - # - # source://rack//lib/rack/query_parser.rb#142 - def params_hash_type?(obj); end - - # source://rack//lib/rack/query_parser.rb#158 - def unescape(s); end - - class << self - # source://rack//lib/rack/query_parser.rb#23 - def make_default(key_space_limit, param_depth_limit); end - end -end - -# source://rack//lib/rack/query_parser.rb#8 -Rack::QueryParser::COMMON_SEP = T.let(T.unsafe(nil), Hash) - -# source://rack//lib/rack/query_parser.rb#7 -Rack::QueryParser::DEFAULT_SEP = T.let(T.unsafe(nil), Regexp) - -# InvalidParameterError is the error that is raised when incoming structural -# parameters (parsed by parse_nested_query) contain invalid format or byte -# sequence. -# -# source://rack//lib/rack/query_parser.rb#17 -class Rack::QueryParser::InvalidParameterError < ::ArgumentError; end - -# ParameterTypeError is the error that is raised when incoming structural -# parameters (parsed by parse_nested_query) contain conflicting types. -# -# source://rack//lib/rack/query_parser.rb#12 -class Rack::QueryParser::ParameterTypeError < ::TypeError; end - -# source://rack//lib/rack/query_parser.rb#162 -class Rack::QueryParser::Params - # @return [Params] a new instance of Params - # - # source://rack//lib/rack/query_parser.rb#163 - def initialize(limit); end - - # source://rack//lib/rack/query_parser.rb#169 - def [](key); end - - # @raise [ParamsTooDeepError] - # - # source://rack//lib/rack/query_parser.rb#173 - def []=(key, value); end - - # @return [Boolean] - # - # source://rack//lib/rack/query_parser.rb#179 - def key?(key); end - - # Recursively unwraps nested `Params` objects and constructs an object - # of the same shape, but using the objects' internal representations - # (Ruby hashes) in place of the objects. The result is a hash consisting - # purely of Ruby primitives. - # - # Mutation warning! - # - # 1. This method mutates the internal representation of the `Params` - # objects in order to save object allocations. - # - # 2. The value you get back is a reference to the internal hash - # representation, not a copy. - # - # 3. Because the `Params` object's internal representation is mutable - # through the `#[]=` method, it is not thread safe. The result of - # getting the hash representation while another thread is adding a - # key to it is non-deterministic. - # - # source://rack//lib/rack/query_parser.rb#201 - def to_h; end - - # Recursively unwraps nested `Params` objects and constructs an object - # of the same shape, but using the objects' internal representations - # (Ruby hashes) in place of the objects. The result is a hash consisting - # purely of Ruby primitives. - # - # Mutation warning! - # - # 1. This method mutates the internal representation of the `Params` - # objects in order to save object allocations. - # - # 2. The value you get back is a reference to the internal hash - # representation, not a copy. - # - # 3. Because the `Params` object's internal representation is mutable - # through the `#[]=` method, it is not thread safe. The result of - # getting the hash representation while another thread is adding a - # key to it is non-deterministic. - # - # source://rack//lib/rack/query_parser.rb#201 - def to_params_hash; end -end - -# ParamsTooDeepError is the error that is raised when params are recursively -# nested over the specified limit. -# -# source://rack//lib/rack/query_parser.rb#21 -class Rack::QueryParser::ParamsTooDeepError < ::RangeError; end - -# source://rack//lib/rack.rb#53 -Rack::RACK_ERRORS = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#63 -Rack::RACK_HIJACK = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#65 -Rack::RACK_HIJACK_IO = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#55 -Rack::RACK_INPUT = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#64 -Rack::RACK_IS_HIJACK = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#54 -Rack::RACK_LOGGER = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#76 -Rack::RACK_METHODOVERRIDE_ORIGINAL_METHOD = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#67 -Rack::RACK_MULTIPART_BUFFER_SIZE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#68 -Rack::RACK_MULTIPART_TEMPFILE_FACTORY = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#60 -Rack::RACK_MULTIPROCESS = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#59 -Rack::RACK_MULTITHREAD = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#66 -Rack::RACK_RECURSIVE_INCLUDE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#72 -Rack::RACK_REQUEST_COOKIE_HASH = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#73 -Rack::RACK_REQUEST_COOKIE_STRING = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#70 -Rack::RACK_REQUEST_FORM_HASH = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#69 -Rack::RACK_REQUEST_FORM_INPUT = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#71 -Rack::RACK_REQUEST_FORM_VARS = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#74 -Rack::RACK_REQUEST_QUERY_HASH = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#75 -Rack::RACK_REQUEST_QUERY_STRING = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#61 -Rack::RACK_RUNONCE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#56 -Rack::RACK_SESSION = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#57 -Rack::RACK_SESSION_OPTIONS = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#77 -Rack::RACK_SESSION_UNPACKED_COOKIE_DATA = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#58 -Rack::RACK_SHOWSTATUS_DETAIL = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#52 -Rack::RACK_TEMPFILES = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#62 -Rack::RACK_URL_SCHEME = T.let(T.unsafe(nil), String) - -# Rack environment variables -# -# source://rack//lib/rack.rb#51 -Rack::RACK_VERSION = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/version.rb#23 -Rack::RELEASE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#22 -Rack::REQUEST_METHOD = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#23 -Rack::REQUEST_PATH = T.let(T.unsafe(nil), String) - -# Rack::Recursive allows applications called down the chain to -# include data from other applications (by using -# rack['rack.recursive.include'][...] or raise a -# ForwardRequest to redirect internally. -# -# source://rack//lib/rack/recursive.rb#34 -class Rack::Recursive - # @return [Recursive] a new instance of Recursive - # - # source://rack//lib/rack/recursive.rb#35 - def initialize(app); end - - # source://rack//lib/rack/recursive.rb#43 - def _call(env); end - - # source://rack//lib/rack/recursive.rb#39 - def call(env); end - - # source://rack//lib/rack/recursive.rb#50 - def include(env, path); end -end - -# High performant source reloader -# -# This class acts as Rack middleware. -# -# What makes it especially suited for use in a production environment is that -# any file will only be checked once and there will only be made one system -# call stat(2). -# -# Please note that this will not reload files in the background, it does so -# only when actively called. -# -# It is performing a check/reload cycle at the start of every request, but -# also respects a cool down time, during which nothing will be done. -# -# source://rack//lib/rack/reloader.rb#24 -class Rack::Reloader - # @return [Reloader] a new instance of Reloader - # - # source://rack//lib/rack/reloader.rb#27 - def initialize(app, cooldown = T.unsafe(nil), backend = T.unsafe(nil)); end - - # source://rack//lib/rack/reloader.rb#38 - def call(env); end - - # source://rack//lib/rack/reloader.rb#52 - def reload!(stderr = T.unsafe(nil)); end - - # A safe Kernel::load, issuing the hooks depending on the results - # - # source://rack//lib/rack/reloader.rb#60 - def safe_load(file, mtime, stderr = T.unsafe(nil)); end -end - -# source://rack//lib/rack/reloader.rb#70 -module Rack::Reloader::Stat - # Takes a relative or absolute +file+ name, a couple possible +paths+ that - # the +file+ might reside in. Returns the full path and File::Stat for the - # path. - # - # source://rack//lib/rack/reloader.rb#90 - def figure_path(file, paths); end - - # source://rack//lib/rack/reloader.rb#71 - def rotation; end - - # source://rack//lib/rack/reloader.rb#105 - def safe_stat(file); end -end - -# Rack::Request provides a convenient interface to a Rack -# environment. It is stateless, the environment +env+ passed to the -# constructor will be directly modified. -# -# req = Rack::Request.new(env) -# req.post? -# req.params["data"] -# -# source://rack//lib/rack/request.rb#12 -class Rack::Request - include ::Rack::Request::Env - include ::Rack::Request::Helpers - - # @return [Request] a new instance of Request - # - # source://rack//lib/rack/request.rb#26 - def initialize(env); end - - # source://rack//lib/rack/request.rb#40 - def delete_param(k); end - - # source://rack//lib/rack/request.rb#31 - def params; end - - # source://rack//lib/rack/request.rb#31 - def query; end - - # source://rack//lib/rack/request.rb#35 - def update_param(k, v); end - - # source://yard/0.9.34/lib/yard/server/rack_adapter.rb#94 - def version_supplied; end - - # source://yard/0.9.34/lib/yard/server/rack_adapter.rb#94 - def version_supplied=(_arg0); end - - # source://yard/0.9.34/lib/yard/server/rack_adapter.rb#96 - def xhr?; end - - class << self - # Returns the value of attribute ip_filter. - # - # source://rack//lib/rack/request.rb#16 - def ip_filter; end - - # Sets the attribute ip_filter - # - # @param value the value to set the attribute ip_filter to. - # - # source://rack//lib/rack/request.rb#16 - def ip_filter=(_arg0); end - end -end - -# source://rack//lib/rack/request.rb#20 -Rack::Request::ALLOWED_SCHEMES = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/request.rb#46 -module Rack::Request::Env - # source://rack//lib/rack/request.rb#50 - def initialize(env); end - - # Add a header that may have multiple values. - # - # Example: - # request.add_header 'Accept', 'image/png' - # request.add_header 'Accept', '*/*' - # - # assert_equal 'image/png,*/*', request.get_header('Accept') - # - # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 - # - # source://rack//lib/rack/request.rb#91 - def add_header(key, v); end - - # Delete a request specific value for `name`. - # - # source://rack//lib/rack/request.rb#102 - def delete_header(name); end - - # Loops through each key / value pair in the request specific data. - # - # source://rack//lib/rack/request.rb#73 - def each_header(&block); end - - # The environment of the request. - # - # source://rack//lib/rack/request.rb#48 - def env; end - - # If a block is given, it yields to the block if the value hasn't been set - # on the request. - # - # source://rack//lib/rack/request.rb#68 - def fetch_header(name, &block); end - - # Get a request specific value for `name`. - # - # source://rack//lib/rack/request.rb#62 - def get_header(name); end - - # Predicate method to test to see if `name` has been set as request - # specific data - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#57 - def has_header?(name); end - - # Set a request specific value for `name` to `v` - # - # source://rack//lib/rack/request.rb#78 - def set_header(name, v); end - - private - - # source://rack//lib/rack/request.rb#106 - def initialize_copy(other); end -end - -# source://rack//lib/rack/request.rb#111 -module Rack::Request::Helpers - # Returns the data received in the query string. - # - # source://rack//lib/rack/request.rb#426 - def GET; end - - # Returns the data received in the request body. - # - # This method support both application/x-www-form-urlencoded and - # multipart/form-data. - # - # source://rack//lib/rack/request.rb#440 - def POST; end - - # shortcut for request.params[key] - # - # source://rack//lib/rack/request.rb#532 - def [](key); end - - # shortcut for request.params[key] = value - # - # Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params. - # - # source://rack//lib/rack/request.rb#543 - def []=(key, value); end - - # source://rack//lib/rack/request.rb#519 - def accept_encoding; end - - # source://rack//lib/rack/request.rb#523 - def accept_language; end - - # The authority of the incoming request as defined by RFC3976. - # https://tools.ietf.org/html/rfc3986#section-3.2 - # - # In HTTP/1, this is the `host` header. - # In HTTP/2, this is the `:authority` pseudo-header. - # - # source://rack//lib/rack/request.rb#227 - def authority; end - - # source://rack//lib/rack/request.rb#502 - def base_url; end - - # source://rack//lib/rack/request.rb#150 - def body; end - - # The character set of the request body if a "charset" media type - # parameter was given, or nil if no "charset" was specified. Note - # that, per RFC2616, text/* media types that specify no explicit - # charset are to be considered ISO-8859-1. - # - # source://rack//lib/rack/request.rb#400 - def content_charset; end - - # source://rack//lib/rack/request.rb#159 - def content_length; end - - # source://rack//lib/rack/request.rb#271 - def content_type; end - - # source://rack//lib/rack/request.rb#256 - def cookies; end - - # Checks the HTTP request method (or verb) to see if it was of type DELETE - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#181 - def delete?; end - - # Destructively delete a parameter, whether it's in GET or POST. Returns the value of the deleted parameter. - # - # If the parameter is in both GET and POST, the POST value takes precedence since that's how #params works. - # - # env['rack.input'] is not touched. - # - # source://rack//lib/rack/request.rb#497 - def delete_param(k); end - - # Determine whether the request body contains form-data by checking - # the request Content-Type for one of the media-types: - # "application/x-www-form-urlencoded" or "multipart/form-data". The - # list of form-data media types can be modified through the - # +FORM_DATA_MEDIA_TYPES+ array. - # - # A request body is also assumed to contain form-data when no - # Content-Type header is provided and the request_method is POST. - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#412 - def form_data?; end - - # source://rack//lib/rack/request.rb#344 - def forwarded_authority; end - - # source://rack//lib/rack/request.rb#330 - def forwarded_for; end - - # source://rack//lib/rack/request.rb#338 - def forwarded_port; end - - # source://rack//lib/rack/request.rb#515 - def fullpath; end - - # Checks the HTTP request method (or verb) to see if it was of type GET - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#184 - def get?; end - - # Checks the HTTP request method (or verb) to see if it was of type HEAD - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#187 - def head?; end - - # Returns a formatted host, suitable for being used in a URI. - # - # source://rack//lib/rack/request.rb#296 - def host; end - - # The `HTTP_HOST` header. - # - # source://rack//lib/rack/request.rb#281 - def host_authority; end - - # source://rack//lib/rack/request.rb#285 - def host_with_port(authority = T.unsafe(nil)); end - - # Returns an address suitable for being to resolve to an address. - # In the case of a domain name or IPv4 address, the result is the same - # as +host+. In the case of IPv6 or future address formats, the square - # brackets are removed. - # - # source://rack//lib/rack/request.rb#304 - def hostname; end - - # source://rack//lib/rack/request.rb#354 - def ip; end - - # Checks the HTTP request method (or verb) to see if it was of type LINK - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#193 - def link?; end - - # source://rack//lib/rack/request.rb#160 - def logger; end - - # The media type (type/subtype) portion of the CONTENT_TYPE header - # without any media type parameters. e.g., when CONTENT_TYPE is - # "text/plain;charset=utf-8", the media-type is "text/plain". - # - # For more information on the use of media types in HTTP, see: - # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7 - # - # source://rack//lib/rack/request.rb#383 - def media_type; end - - # The media type parameters provided in CONTENT_TYPE as a Hash, or - # an empty Hash if no CONTENT_TYPE or media-type parameters were - # provided. e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8", - # this method responds with the following Hash: - # { 'charset' => 'utf-8' } - # - # source://rack//lib/rack/request.rb#392 - def media_type_params; end - - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#162 - def multithread?; end - - # Checks the HTTP request method (or verb) to see if it was of type OPTIONS - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#190 - def options?; end - - # The union of GET and POST data. - # - # Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params. - # - # source://rack//lib/rack/request.rb#468 - def params; end - - # Determine whether the request body contains data by checking - # the request media_type against registered parse-data media-types - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#421 - def parseable_data?; end - - # Checks the HTTP request method (or verb) to see if it was of type PATCH - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#196 - def patch?; end - - # source://rack//lib/rack/request.rb#511 - def path; end - - # source://rack//lib/rack/request.rb#154 - def path_info; end - - # source://rack//lib/rack/request.rb#155 - def path_info=(s); end - - # source://rack//lib/rack/request.rb#308 - def port; end - - # Checks the HTTP request method (or verb) to see if it was of type POST - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#199 - def post?; end - - # Checks the HTTP request method (or verb) to see if it was of type PUT - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#202 - def put?; end - - # source://rack//lib/rack/request.rb#158 - def query_string; end - - # the referer of the client - # - # source://rack//lib/rack/request.rb#165 - def referer; end - - # the referer of the client - # - # source://rack//lib/rack/request.rb#165 - def referrer; end - - # source://rack//lib/rack/request.rb#157 - def request_method; end - - # source://rack//lib/rack/request.rb#210 - def scheme; end - - # source://rack//lib/rack/request.rb#151 - def script_name; end - - # source://rack//lib/rack/request.rb#152 - def script_name=(s); end - - # The authority as defined by the `SERVER_NAME` and `SERVER_PORT` - # variables. - # - # source://rack//lib/rack/request.rb#233 - def server_authority; end - - # source://rack//lib/rack/request.rb#246 - def server_name; end - - # source://rack//lib/rack/request.rb#250 - def server_port; end - - # source://rack//lib/rack/request.rb#168 - def session; end - - # source://rack//lib/rack/request.rb#174 - def session_options; end - - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#350 - def ssl?; end - - # Checks the HTTP request method (or verb) to see if it was of type TRACE - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#205 - def trace?; end - - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#527 - def trusted_proxy?(ip); end - - # Checks the HTTP request method (or verb) to see if it was of type UNLINK - # - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#208 - def unlink?; end - - # Destructively update a parameter, whether it's in GET and/or POST. Returns nil. - # - # The parameter is updated wherever it was previous defined, so GET, POST, or both. If it wasn't previously defined, it's inserted into GET. - # - # env['rack.input'] is not touched. - # - # source://rack//lib/rack/request.rb#477 - def update_param(k, v); end - - # Tries to return a remake of the original request URL as a string. - # - # source://rack//lib/rack/request.rb#507 - def url; end - - # source://rack//lib/rack/request.rb#161 - def user_agent; end - - # like Hash#values_at - # - # source://rack//lib/rack/request.rb#552 - def values_at(*keys); end - - # @return [Boolean] - # - # source://rack//lib/rack/request.rb#276 - def xhr?; end - - private - - # source://rack//lib/rack/request.rb#641 - def allowed_scheme(header); end - - # source://rack//lib/rack/request.rb#558 - def default_session; end - - # source://rack//lib/rack/request.rb#645 - def extract_proto_header(header); end - - # source://rack//lib/rack/request.rb#636 - def forwarded_scheme; end - - # source://rack//lib/rack/request.rb#574 - def parse_http_accept_header(header); end - - # source://rack//lib/rack/request.rb#593 - def parse_multipart; end - - # source://rack//lib/rack/request.rb#589 - def parse_query(qs, d = T.unsafe(nil)); end - - # source://rack//lib/rack/request.rb#585 - def query_parser; end - - # source://rack//lib/rack/request.rb#632 - def reject_trusted_ip_addresses(ip_addresses); end - - # source://rack//lib/rack/request.rb#619 - def split_authority(authority); end - - # source://rack//lib/rack/request.rb#597 - def split_header(value); end - - # Assist with compatibility when processing `X-Forwarded-For`. - # - # source://rack//lib/rack/request.rb#561 - def wrap_ipv6(host); end -end - -# source://rack//lib/rack/request.rb#601 -Rack::Request::Helpers::AUTHORITY = T.let(T.unsafe(nil), Regexp) - -# Default ports depending on scheme. Used to decide whether or not -# to include the port in a generated URI. -# -# source://rack//lib/rack/request.rb#130 -Rack::Request::Helpers::DEFAULT_PORTS = T.let(T.unsafe(nil), Hash) - -# The set of form-data media-types. Requests that do not indicate -# one of the media types present in this list will not be eligible -# for form-data / param parsing. -# -# source://rack//lib/rack/request.rb#115 -Rack::Request::Helpers::FORM_DATA_MEDIA_TYPES = T.let(T.unsafe(nil), Array) - -# The address of the client which connected to the proxy. -# -# source://rack//lib/rack/request.rb#133 -Rack::Request::Helpers::HTTP_X_FORWARDED_FOR = T.let(T.unsafe(nil), String) - -# The contents of the host/:authority header sent to the proxy. -# -# source://rack//lib/rack/request.rb#136 -Rack::Request::Helpers::HTTP_X_FORWARDED_HOST = T.let(T.unsafe(nil), String) - -# The port used to connect to the proxy. -# -# source://rack//lib/rack/request.rb#145 -Rack::Request::Helpers::HTTP_X_FORWARDED_PORT = T.let(T.unsafe(nil), String) - -# The protocol used to connect to the proxy. -# -# source://rack//lib/rack/request.rb#142 -Rack::Request::Helpers::HTTP_X_FORWARDED_PROTO = T.let(T.unsafe(nil), String) - -# The value of the scheme sent to the proxy. -# -# source://rack//lib/rack/request.rb#139 -Rack::Request::Helpers::HTTP_X_FORWARDED_SCHEME = T.let(T.unsafe(nil), String) - -# Another way for specifing https scheme was used. -# -# source://rack//lib/rack/request.rb#148 -Rack::Request::Helpers::HTTP_X_FORWARDED_SSL = T.let(T.unsafe(nil), String) - -# The set of media-types. Requests that do not indicate -# one of the media types present in this list will not be eligible -# for param parsing like soap attachments or generic multiparts -# -# source://rack//lib/rack/request.rb#123 -Rack::Request::Helpers::PARSEABLE_DATA_MEDIA_TYPES = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/request.rb#21 -Rack::Request::SCHEME_WHITELIST = T.let(T.unsafe(nil), Array) - -# Rack::Response provides a convenient interface to create a Rack -# response. -# -# It allows setting of headers and cookies, and provides useful -# defaults (an OK response with empty headers and body). -# -# You can use Response#write to iteratively generate your response, -# but note that this is buffered by Rack::Response until you call -# +finish+. +finish+ however can take a block inside which calls to -# +write+ are synchronous with the Rack response. -# -# Your application's +call+ should end returning Response#finish. -# -# source://rack//lib/rack/response.rb#18 -class Rack::Response - include ::Rack::Response::Helpers - - # Initialize the response object with the specified body, status - # and headers. - # - # HTTP protocol RFCs. - # conform to the HTTP protocol RFCs. - # - # Providing a body which responds to #to_str is legacy behaviour. - # - # @param body [nil, #each, #to_str] the response body. - # @param status [Integer] the integer status as defined by the - # @param headers [#each] a list of key-value header pairs which - # @return [Response] a new instance of Response - # @yield [_self] - # @yieldparam _self [Rack::Response] the object that the method was called on - # - # source://rack//lib/rack/response.rb#42 - def initialize(body = T.unsafe(nil), status = T.unsafe(nil), headers = T.unsafe(nil)); end - - # source://rack//lib/rack/response.rb#127 - def [](key); end - - # source://rack//lib/rack/response.rb#128 - def []=(key, v); end - - # Returns the value of attribute body. - # - # source://rack//lib/rack/response.rb#26 - def body; end - - # Sets the attribute body - # - # @param value the value to set the attribute body to. - # - # source://rack//lib/rack/response.rb#26 - def body=(_arg0); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#73 - def chunked?; end - - # source://rack//lib/rack/response.rb#118 - def close; end - - # source://rack//lib/rack/response.rb#129 - def delete_header(key); end - - # source://rack//lib/rack/response.rb#98 - def each(&callback); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#122 - def empty?; end - - # Generate a response array consistent with the requirements of the SPEC. - # which is suitable to be returned from the middleware `#call(env)` method. - # - # @return [Array] a 3-tuple suitable of `[status, headers, body]` - # - # source://rack//lib/rack/response.rb#80 - def finish(&block); end - - # source://rack//lib/rack/response.rb#127 - def get_header(key); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#126 - def has_header?(key); end - - # Returns the value of attribute headers. - # - # @deprecated Use {#headers} instead. - # - # source://rack//lib/rack/response.rb#27 - def header; end - - # Returns the value of attribute headers. - # - # source://rack//lib/rack/response.rb#27 - def headers; end - - # Returns the value of attribute length. - # - # source://rack//lib/rack/response.rb#26 - def length; end - - # Sets the attribute length - # - # @param value the value to set the attribute length to. - # - # source://rack//lib/rack/response.rb#26 - def length=(_arg0); end - - # source://rack//lib/rack/response.rb#68 - def redirect(target, status = T.unsafe(nil)); end - - # source://rack//lib/rack/response.rb#128 - def set_header(key, v); end - - # Returns the value of attribute status. - # - # source://rack//lib/rack/response.rb#26 - def status; end - - # Sets the attribute status - # - # @param value the value to set the attribute status to. - # - # source://rack//lib/rack/response.rb#26 - def status=(_arg0); end - - # Generate a response array consistent with the requirements of the SPEC. - # which is suitable to be returned from the middleware `#call(env)` method. - # For *response - # - # @return [Array] a 3-tuple suitable of `[status, headers, body]` - # - # source://rack//lib/rack/response.rb#80 - def to_a(&block); end - - # Append to body and update Content-Length. - # - # NOTE: Do not mix #write and direct #body access! - # - # source://rack//lib/rack/response.rb#112 - def write(chunk); end - - class << self - # source://rack//lib/rack/response.rb#19 - def [](status, headers, body); end - end -end - -# source://rack//lib/rack/response.rb#23 -Rack::Response::CHUNKED = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/response.rb#134 -module Rack::Response::Helpers - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#145 - def accepted?; end - - # Add a header that may have multiple values. - # - # Example: - # response.add_header 'Vary', 'Accept-Encoding' - # response.add_header 'Vary', 'Cookie' - # - # assert_equal 'Accept-Encoding,Cookie', response.get_header('Vary') - # - # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 - # - # source://rack//lib/rack/response.rb#171 - def add_header(key, v); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#148 - def bad_request?; end - - # Specify that the content should be cached. - # - # @option directive - # @param duration [Integer] The number of seconds until the cache expires. - # @param directive [Hash] a customizable set of options - # - # source://rack//lib/rack/response.rb#246 - def cache!(duration = T.unsafe(nil), directive: T.unsafe(nil)); end - - # source://rack//lib/rack/response.rb#229 - def cache_control; end - - # source://rack//lib/rack/response.rb#233 - def cache_control=(v); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#140 - def client_error?; end - - # source://rack//lib/rack/response.rb#199 - def content_length; end - - # Get the content type of the response. - # - # source://rack//lib/rack/response.rb#182 - def content_type; end - - # Set the content type of the response. - # - # source://rack//lib/rack/response.rb#187 - def content_type=(content_type); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#144 - def created?; end - - # source://rack//lib/rack/response.rb#217 - def delete_cookie(key, value = T.unsafe(nil)); end - - # Specifies that the content shouldn't be cached. Overrides `cache!` if already called. - # - # source://rack//lib/rack/response.rb#238 - def do_not_cache!; end - - # source://rack//lib/rack/response.rb#253 - def etag; end - - # source://rack//lib/rack/response.rb#257 - def etag=(v); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#150 - def forbidden?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#158 - def include?(header); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#137 - def informational?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#135 - def invalid?; end - - # source://rack//lib/rack/response.rb#204 - def location; end - - # source://rack//lib/rack/response.rb#208 - def location=(location); end - - # source://rack//lib/rack/response.rb#191 - def media_type; end - - # source://rack//lib/rack/response.rb#195 - def media_type_params; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#152 - def method_not_allowed?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#147 - def moved_permanently?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#146 - def no_content?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#151 - def not_found?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#143 - def ok?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#153 - def precondition_failed?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#156 - def redirect?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#139 - def redirection?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#141 - def server_error?; end - - # source://rack//lib/rack/response.rb#212 - def set_cookie(key, value); end - - # source://rack//lib/rack/response.rb#221 - def set_cookie_header; end - - # source://rack//lib/rack/response.rb#225 - def set_cookie_header=(v); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#138 - def successful?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#149 - def unauthorized?; end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#154 - def unprocessable?; end - - protected - - # source://rack//lib/rack/response.rb#287 - def append(chunk); end - - # source://rack//lib/rack/response.rb#263 - def buffered_body!; end -end - -# source://rack//lib/rack/response.rb#301 -class Rack::Response::Raw - include ::Rack::Response::Helpers - - # @return [Raw] a new instance of Raw - # - # source://rack//lib/rack/response.rb#307 - def initialize(status, headers); end - - # source://rack//lib/rack/response.rb#315 - def delete_header(key); end - - # source://rack//lib/rack/response.rb#313 - def get_header(key); end - - # @return [Boolean] - # - # source://rack//lib/rack/response.rb#312 - def has_header?(key); end - - # Returns the value of attribute headers. - # - # source://rack//lib/rack/response.rb#304 - def headers; end - - # source://rack//lib/rack/response.rb#314 - def set_header(key, v); end - - # Returns the value of attribute status. - # - # source://rack//lib/rack/response.rb#305 - def status; end - - # Sets the attribute status - # - # @param value the value to set the attribute status to. - # - # source://rack//lib/rack/response.rb#305 - def status=(_arg0); end -end - -# source://rack//lib/rack/response.rb#24 -Rack::Response::STATUS_WITH_NO_ENTITY_BODY = T.let(T.unsafe(nil), Hash) - -# Class which can make any IO object rewindable, including non-rewindable ones. It does -# this by buffering the data into a tempfile, which is rewindable. -# -# rack.input is required to be rewindable, so if your input stream IO is non-rewindable -# by nature (e.g. a pipe or a socket) then you can wrap it in an object of this class -# to easily make it rewindable. -# -# Don't forget to call #close when you're done. This frees up temporary resources that -# RewindableInput uses, though it does *not* close the original IO object. -# -# source://rack//lib/rack/rewindable_input.rb#16 -class Rack::RewindableInput - # @return [RewindableInput] a new instance of RewindableInput - # - # source://rack//lib/rack/rewindable_input.rb#17 - def initialize(io); end - - # Closes this RewindableInput object without closing the originally - # wrapped IO object. Cleans up any temporary resources that this RewindableInput - # has created. - # - # This method may be called multiple times. It does nothing on subsequent calls. - # - # source://rack//lib/rack/rewindable_input.rb#48 - def close; end - - # source://rack//lib/rack/rewindable_input.rb#33 - def each(&block); end - - # source://rack//lib/rack/rewindable_input.rb#23 - def gets; end - - # source://rack//lib/rack/rewindable_input.rb#28 - def read(*args); end - - # source://rack//lib/rack/rewindable_input.rb#38 - def rewind; end - - private - - # @return [Boolean] - # - # source://rack//lib/rack/rewindable_input.rb#90 - def filesystem_has_posix_semantics?; end - - # source://rack//lib/rack/rewindable_input.rb#61 - def make_rewindable; end -end - -# Sets an "X-Runtime" response header, indicating the response -# time of the request, in seconds -# -# You can put it right before the application to see the processing -# time, or before all the other middlewares to include time for them, -# too. -# -# source://rack//lib/rack/runtime.rb#10 -class Rack::Runtime - # @return [Runtime] a new instance of Runtime - # - # source://rack//lib/rack/runtime.rb#14 - def initialize(app, name = T.unsafe(nil)); end - - # source://rack//lib/rack/runtime.rb#20 - def call(env); end -end - -# source://rack//lib/rack/runtime.rb#11 -Rack::Runtime::FORMAT_STRING = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/runtime.rb#12 -Rack::Runtime::HEADER_NAME = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#24 -Rack::SCRIPT_NAME = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#27 -Rack::SERVER_NAME = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#28 -Rack::SERVER_PORT = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#26 -Rack::SERVER_PROTOCOL = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#33 -Rack::SET_COOKIE = T.let(T.unsafe(nil), String) - -# = Sendfile -# -# The Sendfile middleware intercepts responses whose body is being -# served from a file and replaces it with a server specific X-Sendfile -# header. The web server is then responsible for writing the file contents -# to the client. This can dramatically reduce the amount of work required -# by the Ruby backend and takes advantage of the web server's optimized file -# delivery code. -# -# In order to take advantage of this middleware, the response body must -# respond to +to_path+ and the request must include an X-Sendfile-Type -# header. Rack::Files and other components implement +to_path+ so there's -# rarely anything you need to do in your application. The X-Sendfile-Type -# header is typically set in your web servers configuration. The following -# sections attempt to document -# -# === Nginx -# -# Nginx supports the X-Accel-Redirect header. This is similar to X-Sendfile -# but requires parts of the filesystem to be mapped into a private URL -# hierarchy. -# -# The following example shows the Nginx configuration required to create -# a private "/files/" area, enable X-Accel-Redirect, and pass the special -# X-Sendfile-Type and X-Accel-Mapping headers to the backend: -# -# location ~ /files/(.*) { -# internal; -# alias /var/www/$1; -# } -# -# location / { -# proxy_redirect off; -# -# proxy_set_header Host $host; -# proxy_set_header X-Real-IP $remote_addr; -# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -# -# proxy_set_header X-Sendfile-Type X-Accel-Redirect; -# proxy_set_header X-Accel-Mapping /var/www/=/files/; -# -# proxy_pass http://127.0.0.1:8080/; -# } -# -# Note that the X-Sendfile-Type header must be set exactly as shown above. -# The X-Accel-Mapping header should specify the location on the file system, -# followed by an equals sign (=), followed name of the private URL pattern -# that it maps to. The middleware performs a simple substitution on the -# resulting path. -# -# See Also: https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile -# -# === lighttpd -# -# Lighttpd has supported some variation of the X-Sendfile header for some -# time, although only recent version support X-Sendfile in a reverse proxy -# configuration. -# -# $HTTP["host"] == "example.com" { -# proxy-core.protocol = "http" -# proxy-core.balancer = "round-robin" -# proxy-core.backends = ( -# "127.0.0.1:8000", -# "127.0.0.1:8001", -# ... -# ) -# -# proxy-core.allow-x-sendfile = "enable" -# proxy-core.rewrite-request = ( -# "X-Sendfile-Type" => (".*" => "X-Sendfile") -# ) -# } -# -# See Also: http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore -# -# === Apache -# -# X-Sendfile is supported under Apache 2.x using a separate module: -# -# https://tn123.org/mod_xsendfile/ -# -# Once the module is compiled and installed, you can enable it using -# XSendFile config directive: -# -# RequestHeader Set X-Sendfile-Type X-Sendfile -# ProxyPassReverse / http://localhost:8001/ -# XSendFile on -# -# === Mapping parameter -# -# The third parameter allows for an overriding extension of the -# X-Accel-Mapping header. Mappings should be provided in tuples of internal to -# external. The internal values may contain regular expression syntax, they -# will be matched with case indifference. -# -# source://rack//lib/rack/sendfile.rb#100 -class Rack::Sendfile - # @return [Sendfile] a new instance of Sendfile - # - # source://rack//lib/rack/sendfile.rb#101 - def initialize(app, variation = T.unsafe(nil), mappings = T.unsafe(nil)); end - - # source://rack//lib/rack/sendfile.rb#109 - def call(env); end - - private - - # source://rack//lib/rack/sendfile.rb#149 - def map_accel_path(env, path); end - - # source://rack//lib/rack/sendfile.rb#143 - def variation(env); end -end - -# source://rack//lib/rack/server.rb#8 -class Rack::Server - # Options may include: - # * :app - # a rack application to run (overrides :config and :builder) - # * :builder - # a string to evaluate a Rack::Builder from - # * :config - # a rackup configuration file path to load (.ru) - # * :environment - # this selects the middleware that will be wrapped around - # your application. Default options available are: - # - development: CommonLogger, ShowExceptions, and Lint - # - deployment: CommonLogger - # - none: no extra middleware - # note: when the server is a cgi server, CommonLogger is not included. - # * :server - # choose a specific Rack::Handler, e.g. cgi, fcgi, webrick - # * :daemonize - # if true, the server will daemonize itself (fork, detach, etc) - # * :pid - # path to write a pid file after daemonize - # * :Host - # the host address to bind to (used by supporting Rack::Handler) - # * :Port - # the port to bind to (used by supporting Rack::Handler) - # * :AccessLog - # webrick access log options (or supporting Rack::Handler) - # * :debug - # turn on debug output ($DEBUG = true) - # * :warn - # turn on warnings ($-w = true) - # * :include - # add given paths to $LOAD_PATH - # * :require - # require the given libraries - # - # Additional options for profiling app initialization include: - # * :heapfile - # location for ObjectSpace.dump_all to write the output to - # * :profile_file - # location for CPU/Memory (StackProf) profile output (defaults to a tempfile) - # * :profile_mode - # StackProf profile mode (cpu|wall|object) - # - # @return [Server] a new instance of Server - # - # source://rack//lib/rack/server.rb#215 - def initialize(options = T.unsafe(nil)); end - - # source://rack//lib/rack/server.rb#248 - def app; end - - # source://rack//lib/rack/server.rb#234 - def default_options; end - - # source://rack//lib/rack/server.rb#282 - def middleware; end - - # source://rack//lib/rack/server.rb#229 - def options; end - - # Sets the attribute options - # - # @param value the value to set the attribute options to. - # - # source://rack//lib/rack/server.rb#171 - def options=(_arg0); end - - # source://rack//lib/rack/server.rb#330 - def server; end - - # source://rack//lib/rack/server.rb#286 - def start(&block); end - - private - - # source://rack//lib/rack/server.rb#411 - def build_app(app); end - - # source://rack//lib/rack/server.rb#344 - def build_app_and_options_from_config; end - - # source://rack//lib/rack/server.rb#392 - def build_app_from_string; end - - # source://rack//lib/rack/server.rb#440 - def check_pid!; end - - # source://rack//lib/rack/server.rb#425 - def daemonize_app; end - - # source://rack//lib/rack/server.rb#354 - def handle_profiling(heapfile, profile_mode, filename); end - - # source://rack//lib/rack/server.rb#382 - def make_profile_name(filename); end - - # source://rack//lib/rack/server.rb#407 - def opt_parser; end - - # source://rack//lib/rack/server.rb#396 - def parse_options(args); end - - # source://rack//lib/rack/server.rb#450 - def pidfile_process_status; end - - # source://rack//lib/rack/server.rb#421 - def wrapped_app; end - - # source://rack//lib/rack/server.rb#432 - def write_pid; end - - class << self - # source://rack//lib/rack/server.rb#259 - def default_middleware_by_environment; end - - # source://rack//lib/rack/server.rb#253 - def logging_middleware; end - - # source://rack//lib/rack/server.rb#277 - def middleware; end - - # Start a new rack server (like running rackup). This will parse ARGV and - # provide standard ARGV rackup options, defaulting to load 'config.ru'. - # - # Providing an options hash will prevent ARGV parsing and will not include - # any default options. - # - # This method can be used to very easily launch a CGI application, for - # example: - # - # Rack::Server.start( - # :app => lambda do |e| - # [200, {'Content-Type' => 'text/html'}, ['hello world']] - # end, - # :server => 'cgi' - # ) - # - # Further options available here are documented on Rack::Server#initialize - # - # source://rack//lib/rack/server.rb#167 - def start(options = T.unsafe(nil)); end - end -end - -# source://rack//lib/rack/server.rb#11 -class Rack::Server::Options - # source://rack//lib/rack/server.rb#127 - def handler_opts(options); end - - # source://rack//lib/rack/server.rb#12 - def parse!(args); end -end - -# source://rack//lib/rack.rb#136 -module Rack::Session; end - -# source://rack//lib/rack/session/abstract/id.rb#41 -module Rack::Session::Abstract; end - -# source://rack//lib/rack/session/abstract/id.rb#487 -class Rack::Session::Abstract::ID < ::Rack::Session::Abstract::Persisted - # All thread safety and session destroy procedures should occur here. - # Should return a new session id or nil if options[:drop] - # - # source://rack//lib/rack/session/abstract/id.rb#517 - def delete_session(req, sid, options); end - - # All thread safety and session retrieval procedures should occur here. - # Should return [session_id, session]. - # If nil is provided as the session id, generation of a new valid id - # should occur within. - # - # source://rack//lib/rack/session/abstract/id.rb#502 - def find_session(req, sid); end - - # All thread safety and session storage procedures should occur here. - # Must return the session id if the session was saved successfully, or - # false if the session could not be saved. - # - # source://rack//lib/rack/session/abstract/id.rb#510 - def write_session(req, sid, session, options); end - - class << self - # @private - # - # source://rack//lib/rack/session/abstract/id.rb#488 - def inherited(klass); end - end -end - -# ID sets up a basic framework for implementing an id based sessioning -# service. Cookies sent to the client for maintaining sessions will only -# contain an id reference. Only #find_session, #write_session and -# #delete_session are required to be overwritten. -# -# All parameters are optional. -# * :key determines the name of the cookie, by default it is -# 'rack.session' -# * :path, :domain, :expire_after, :secure, and :httponly set the related -# cookie options as by Rack::Response#set_cookie -# * :skip will not a set a cookie in the response nor update the session state -# * :defer will not set a cookie in the response but still update the session -# state if it is used with a backend -# * :renew (implementation dependent) will prompt the generation of a new -# session id, and migration of data to be referenced at the new id. If -# :defer is set, it will be overridden and the cookie will be set. -# * :sidbits sets the number of bits in length that a generated session -# id will be. -# -# These options can be set on a per request basis, at the location of -# env['rack.session.options']. Additionally the id of the -# session can be found within the options hash at the key :id. It is -# highly not recommended to change its value. -# -# Is Rack::Utils::Context compatible. -# -# Not included by default; you must require 'rack/session/abstract/id' -# to use. -# -# source://rack//lib/rack/session/abstract/id.rb#233 -class Rack::Session::Abstract::Persisted - # @return [Persisted] a new instance of Persisted - # - # source://rack//lib/rack/session/abstract/id.rb#250 - def initialize(app, options = T.unsafe(nil)); end - - # source://rack//lib/rack/session/abstract/id.rb#259 - def call(env); end - - # Acquires the session from the environment and the session id from - # the session options and passes them to #write_session. If successful - # and the :defer option is not true, a cookie will be added to the - # response with the session's id. - # - # source://rack//lib/rack/session/abstract/id.rb#373 - def commit_session(req, res); end - - # source://rack//lib/rack/session/abstract/id.rb#263 - def context(env, app = T.unsafe(nil)); end - - # Returns the value of attribute default_options. - # - # source://rack//lib/rack/session/abstract/id.rb#248 - def default_options; end - - # Returns the value of attribute key. - # - # source://rack//lib/rack/session/abstract/id.rb#248 - def key; end - - # Returns the value of attribute sid_secure. - # - # source://rack//lib/rack/session/abstract/id.rb#248 - def sid_secure; end - - private - - # Session should be committed if it was loaded, any of specific options like :renew, :drop - # or :expire_after was given and the security permissions match. Skips if skip is given. - # - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#342 - def commit_session?(req, session, options); end - - # source://rack//lib/rack/session/abstract/id.rb#408 - def cookie_value(data); end - - # Returns the current session id from the SessionHash. - # - # source://rack//lib/rack/session/abstract/id.rb#328 - def current_session_id(req); end - - # All thread safety and session destroy procedures should occur here. - # Should return a new session id or nil if options[:drop] - # - # source://rack//lib/rack/session/abstract/id.rb#448 - def delete_session(req, sid, options); end - - # Extract session id from request object. - # - # source://rack//lib/rack/session/abstract/id.rb#320 - def extract_session_id(request); end - - # All thread safety and session retrieval procedures should occur here. - # Should return [session_id, session]. - # If nil is provided as the session id, generation of a new valid id - # should occur within. - # - # source://rack//lib/rack/session/abstract/id.rb#433 - def find_session(env, sid); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#359 - def force_options?(options); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#355 - def forced_session_update?(session, options); end - - # Generate a new session id using Ruby #rand. The size of the - # session id is controlled by the :sidbits option. - # Monkey patch this to use custom methods for session id generation. - # - # source://rack//lib/rack/session/abstract/id.rb#288 - def generate_sid(secure = T.unsafe(nil)); end - - # source://rack//lib/rack/session/abstract/id.rb#278 - def initialize_sid; end - - # Extracts the session id from provided cookies and passes it and the - # environment to #find_session. - # - # source://rack//lib/rack/session/abstract/id.rb#312 - def load_session(req); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#351 - def loaded_session?(session); end - - # source://rack//lib/rack/session/abstract/id.rb#274 - def make_request(env); end - - # Sets the lazy session at 'rack.session' and places options and session - # metadata into 'rack.session.options'. - # - # source://rack//lib/rack/session/abstract/id.rb#301 - def prepare_session(req); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#363 - def security_matches?(request, options); end - - # Allow subclasses to prepare_session for different Session classes - # - # source://rack//lib/rack/session/abstract/id.rb#424 - def session_class; end - - # Check if the session exists or not. - # - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#334 - def session_exists?(req); end - - # Sets the cookie back to the client with session id. We skip the cookie - # setting if the value didn't change (sid is the same) or expires was given. - # - # source://rack//lib/rack/session/abstract/id.rb#415 - def set_cookie(request, res, cookie); end - - # All thread safety and session storage procedures should occur here. - # Must return the session id if the session was saved successfully, or - # false if the session could not be saved. - # - # source://rack//lib/rack/session/abstract/id.rb#441 - def write_session(req, sid, session, options); end -end - -# source://rack//lib/rack/session/abstract/id.rb#234 -Rack::Session::Abstract::Persisted::DEFAULT_OPTIONS = T.let(T.unsafe(nil), Hash) - -# source://rack//lib/rack/session/abstract/id.rb#453 -class Rack::Session::Abstract::PersistedSecure < ::Rack::Session::Abstract::Persisted - # source://rack//lib/rack/session/abstract/id.rb#471 - def extract_session_id(*_arg0); end - - # source://rack//lib/rack/session/abstract/id.rb#465 - def generate_sid(*_arg0); end - - private - - # source://rack//lib/rack/session/abstract/id.rb#482 - def cookie_value(data); end - - # source://rack//lib/rack/session/abstract/id.rb#478 - def session_class; end -end - -# source://rack//lib/rack/session/abstract/id.rb#454 -class Rack::Session::Abstract::PersistedSecure::SecureSessionHash < ::Rack::Session::Abstract::SessionHash - # source://rack//lib/rack/session/abstract/id.rb#455 - def [](key); end -end - -# SessionHash is responsible to lazily load the session from store. -# -# source://rack//lib/rack/session/abstract/id.rb#44 -class Rack::Session::Abstract::SessionHash - include ::Enumerable - - # @return [SessionHash] a new instance of SessionHash - # - # source://rack//lib/rack/session/abstract/id.rb#62 - def initialize(store, req); end - - # source://rack//lib/rack/session/abstract/id.rb#82 - def [](key); end - - # source://rack//lib/rack/session/abstract/id.rb#108 - def []=(key, value); end - - # source://rack//lib/rack/session/abstract/id.rb#114 - def clear; end - - # source://rack//lib/rack/session/abstract/id.rb#140 - def delete(key); end - - # source://rack//lib/rack/session/abstract/id.rb#119 - def destroy; end - - # source://rack//lib/rack/session/abstract/id.rb#87 - def dig(key, *keys); end - - # source://rack//lib/rack/session/abstract/id.rb#77 - def each(&block); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#163 - def empty?; end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#153 - def exists?; end - - # source://rack//lib/rack/session/abstract/id.rb#92 - def fetch(key, default = T.unsafe(nil), &block); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#101 - def has_key?(key); end - - # source://rack//lib/rack/session/abstract/id.rb#68 - def id; end - - # Sets the attribute id - # - # @param value the value to set the attribute id to. - # - # source://rack//lib/rack/session/abstract/id.rb#46 - def id=(_arg0); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#101 - def include?(key); end - - # source://rack//lib/rack/session/abstract/id.rb#145 - def inspect; end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#101 - def key?(key); end - - # source://rack//lib/rack/session/abstract/id.rb#168 - def keys; end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#159 - def loaded?; end - - # source://rack//lib/rack/session/abstract/id.rb#129 - def merge!(hash); end - - # source://rack//lib/rack/session/abstract/id.rb#73 - def options; end - - # source://rack//lib/rack/session/abstract/id.rb#135 - def replace(hash); end - - # source://rack//lib/rack/session/abstract/id.rb#108 - def store(key, value); end - - # source://rack//lib/rack/session/abstract/id.rb#124 - def to_hash; end - - # source://rack//lib/rack/session/abstract/id.rb#129 - def update(hash); end - - # source://rack//lib/rack/session/abstract/id.rb#173 - def values; end - - private - - # source://rack//lib/rack/session/abstract/id.rb#188 - def load!; end - - # source://rack//lib/rack/session/abstract/id.rb#180 - def load_for_read!; end - - # source://rack//lib/rack/session/abstract/id.rb#184 - def load_for_write!; end - - # source://rack//lib/rack/session/abstract/id.rb#194 - def stringify_keys(other); end - - class << self - # source://rack//lib/rack/session/abstract/id.rb#50 - def find(req); end - - # source://rack//lib/rack/session/abstract/id.rb#54 - def set(req, session); end - - # source://rack//lib/rack/session/abstract/id.rb#58 - def set_options(req, options); end - end -end - -# source://rack//lib/rack/session/abstract/id.rb#48 -Rack::Session::Abstract::SessionHash::Unspecified = T.let(T.unsafe(nil), Object) - -# Rack::Session::Cookie provides simple cookie based session management. -# By default, the session is a Ruby Hash stored as base64 encoded marshalled -# data set to :key (default: rack.session). The object that encodes the -# session data is configurable and must respond to +encode+ and +decode+. -# Both methods must take a string and return a string. -# -# When the secret key is set, cookie data is checked for data integrity. -# The old secret key is also accepted and allows graceful secret rotation. -# -# Example: -# -# use Rack::Session::Cookie, :key => 'rack.session', -# :domain => 'foo.com', -# :path => '/', -# :expire_after => 2592000, -# :secret => 'change_me', -# :old_secret => 'also_change_me' -# -# All parameters are optional. -# -# -# Rack::Session::Cookie.new(application, { -# :coder => Rack::Session::Cookie::Identity.new -# }) -# -# -# Rack::Session::Cookie.new(application, { -# :coder => Class.new { -# def encode(str); str.reverse; end -# def decode(str); str.reverse; end -# }.new -# }) -# -# source://rack//lib/rack/session/cookie.rb#49 -class Rack::Session::Cookie < ::Rack::Session::Abstract::PersistedSecure - # @return [Cookie] a new instance of Cookie - # - # source://rack//lib/rack/session/cookie.rb#107 - def initialize(app, options = T.unsafe(nil)); end - - # Returns the value of attribute coder. - # - # source://rack//lib/rack/session/cookie.rb#105 - def coder; end - - private - - # source://rack//lib/rack/session/cookie.rb#180 - def delete_session(req, session_id, options); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/cookie.rb#185 - def digest_match?(data, digest); end - - # source://rack//lib/rack/session/cookie.rb#132 - def extract_session_id(request); end - - # source://rack//lib/rack/session/cookie.rb#126 - def find_session(req, sid); end - - # source://rack//lib/rack/session/cookie.rb#192 - def generate_hmac(data, secret); end - - # source://rack//lib/rack/session/cookie.rb#149 - def persistent_session_id!(data, sid = T.unsafe(nil)); end - - # @return [Boolean] - # - # source://rack//lib/rack/session/cookie.rb#196 - def secure?(options); end - - # source://rack//lib/rack/session/cookie.rb#136 - def unpacked_cookie_data(request); end - - # source://rack//lib/rack/session/cookie.rb#164 - def write_session(req, session_id, session, options); end -end - -# Encode session cookies as Base64 -# -# source://rack//lib/rack/session/cookie.rb#51 -class Rack::Session::Cookie::Base64 - # source://rack//lib/rack/session/cookie.rb#56 - def decode(str); end - - # source://rack//lib/rack/session/cookie.rb#52 - def encode(str); end -end - -# N.B. Unlike other encoding methods, the contained objects must be a -# valid JSON composite type, either a Hash or an Array. -# -# source://rack//lib/rack/session/cookie.rb#74 -class Rack::Session::Cookie::Base64::JSON < ::Rack::Session::Cookie::Base64 - # source://rack//lib/rack/session/cookie.rb#79 - def decode(str); end - - # source://rack//lib/rack/session/cookie.rb#75 - def encode(obj); end -end - -# Encode session cookies as Marshaled Base64 data -# -# source://rack//lib/rack/session/cookie.rb#61 -class Rack::Session::Cookie::Base64::Marshal < ::Rack::Session::Cookie::Base64 - # source://rack//lib/rack/session/cookie.rb#66 - def decode(str); end - - # source://rack//lib/rack/session/cookie.rb#62 - def encode(str); end -end - -# source://rack//lib/rack/session/cookie.rb#85 -class Rack::Session::Cookie::Base64::ZipJSON < ::Rack::Session::Cookie::Base64 - # source://rack//lib/rack/session/cookie.rb#90 - def decode(str); end - - # source://rack//lib/rack/session/cookie.rb#86 - def encode(obj); end -end - -# Use no encoding for session cookies -# -# source://rack//lib/rack/session/cookie.rb#100 -class Rack::Session::Cookie::Identity - # source://rack//lib/rack/session/cookie.rb#102 - def decode(str); end - - # source://rack//lib/rack/session/cookie.rb#101 - def encode(str); end -end - -# source://rack//lib/rack/session/cookie.rb#155 -class Rack::Session::Cookie::SessionId - # @return [SessionId] a new instance of SessionId - # - # source://rack//lib/rack/session/cookie.rb#158 - def initialize(session_id, cookie_value); end - - # Returns the value of attribute cookie_value. - # - # source://rack//lib/rack/session/cookie.rb#156 - def cookie_value; end -end - -# Rack::Session::Pool provides simple cookie based session management. -# Session data is stored in a hash held by @pool. -# In the context of a multithreaded environment, sessions being -# committed to the pool is done in a merging manner. -# -# The :drop option is available in rack.session.options if you wish to -# explicitly remove the session from the session cache. -# -# Example: -# myapp = MyRackApp.new -# sessioned = Rack::Session::Pool.new(myapp, -# :domain => 'foo.com', -# :expire_after => 2592000 -# ) -# Rack::Handler::WEBrick.run sessioned -# -# source://rack//lib/rack/session/pool.rb#29 -class Rack::Session::Pool < ::Rack::Session::Abstract::PersistedSecure - # @return [Pool] a new instance of Pool - # - # source://rack//lib/rack/session/pool.rb#33 - def initialize(app, options = T.unsafe(nil)); end - - # source://rack//lib/rack/session/pool.rb#63 - def delete_session(req, session_id, options); end - - # source://rack//lib/rack/session/pool.rb#46 - def find_session(req, sid); end - - # source://rack//lib/rack/session/pool.rb#39 - def generate_sid; end - - # Returns the value of attribute mutex. - # - # source://rack//lib/rack/session/pool.rb#30 - def mutex; end - - # Returns the value of attribute pool. - # - # source://rack//lib/rack/session/pool.rb#30 - def pool; end - - # source://rack//lib/rack/session/pool.rb#71 - def with_lock(req); end - - # source://rack//lib/rack/session/pool.rb#56 - def write_session(req, session_id, new_session, options); end - - private - - # source://rack//lib/rack/session/pool.rb#80 - def get_session_with_fallback(sid); end -end - -# source://rack//lib/rack/session/pool.rb#31 -Rack::Session::Pool::DEFAULT_OPTIONS = T.let(T.unsafe(nil), Hash) - -# source://rack//lib/rack/session/abstract/id.rb#15 -class Rack::Session::SessionId - # @return [SessionId] a new instance of SessionId - # - # source://rack//lib/rack/session/abstract/id.rb#20 - def initialize(public_id); end - - # Returns the value of attribute public_id. - # - # source://rack//lib/rack/session/abstract/id.rb#18 - def cookie_value; end - - # @return [Boolean] - # - # source://rack//lib/rack/session/abstract/id.rb#31 - def empty?; end - - # source://rack//lib/rack/session/abstract/id.rb#32 - def inspect; end - - # source://rack//lib/rack/session/abstract/id.rb#24 - def private_id; end - - # Returns the value of attribute public_id. - # - # source://rack//lib/rack/session/abstract/id.rb#18 - def public_id; end - - # Returns the value of attribute public_id. - # - # source://rack//lib/rack/session/abstract/id.rb#18 - def to_s; end - - private - - # source://rack//lib/rack/session/abstract/id.rb#36 - def hash_sid(sid); end -end - -# source://rack//lib/rack/session/abstract/id.rb#16 -Rack::Session::SessionId::ID_VERSION = T.let(T.unsafe(nil), Integer) - -# Rack::ShowExceptions catches all exceptions raised from the app it -# wraps. It shows a useful backtrace with the sourcefile and -# clickable context, the whole Rack environment and the request -# data. -# -# Be careful when you use this on public-facing sites as it could -# reveal information helpful to attackers. -# -# source://rack//lib/rack/show_exceptions.rb#15 -class Rack::ShowExceptions - # @return [ShowExceptions] a new instance of ShowExceptions - # - # source://rack//lib/rack/show_exceptions.rb#18 - def initialize(app); end - - # source://rack//lib/rack/show_exceptions.rb#22 - def call(env); end - - # source://rack//lib/rack/show_exceptions.rb#57 - def dump_exception(exception); end - - # source://rack//lib/rack/show_exceptions.rb#103 - def h(obj); end - - # @return [Boolean] - # - # source://rack//lib/rack/show_exceptions.rb#48 - def prefers_plaintext?(env); end - - # source://rack//lib/rack/show_exceptions.rb#63 - def pretty(env, exception); end - - # source://rack//lib/rack/show_exceptions.rb#99 - def template; end - - private - - # @return [Boolean] - # - # source://rack//lib/rack/show_exceptions.rb#52 - def accepts_html?(env); end -end - -# source://rack//lib/rack/show_exceptions.rb#16 -Rack::ShowExceptions::CONTEXT = T.let(T.unsafe(nil), Integer) - -# source://rack//lib/rack/show_exceptions.rb#118 -Rack::ShowExceptions::TEMPLATE = T.let(T.unsafe(nil), ERB) - -# Rack::ShowStatus catches all empty responses and replaces them -# with a site explaining the error. -# -# Additional details can be put into rack.showstatus.detail -# and will be shown as HTML. If such details exist, the error page -# is always rendered, even if the reply was not empty. -# -# source://rack//lib/rack/show_status.rb#13 -class Rack::ShowStatus - # @return [ShowStatus] a new instance of ShowStatus - # - # source://rack//lib/rack/show_status.rb#14 - def initialize(app); end - - # source://rack//lib/rack/show_status.rb#19 - def call(env); end - - # source://rack//lib/rack/show_status.rb#44 - def h(obj); end -end - -# source://rack//lib/rack/show_status.rb#59 -Rack::ShowStatus::TEMPLATE = T.let(T.unsafe(nil), String) - -# The Rack::Static middleware intercepts requests for static files -# (javascript files, images, stylesheets, etc) based on the url prefixes or -# route mappings passed in the options, and serves them using a Rack::Files -# object. This allows a Rack stack to serve both static and dynamic content. -# -# Examples: -# -# Serve all requests beginning with /media from the "media" folder located -# in the current directory (ie media/*): -# -# use Rack::Static, :urls => ["/media"] -# -# Same as previous, but instead of returning 404 for missing files under -# /media, call the next middleware: -# -# use Rack::Static, :urls => ["/media"], :cascade => true -# -# Serve all requests beginning with /css or /images from the folder "public" -# in the current directory (ie public/css/* and public/images/*): -# -# use Rack::Static, :urls => ["/css", "/images"], :root => "public" -# -# Serve all requests to / with "index.html" from the folder "public" in the -# current directory (ie public/index.html): -# -# use Rack::Static, :urls => {"/" => 'index.html'}, :root => 'public' -# -# Serve all requests normally from the folder "public" in the current -# directory but uses index.html as default route for "/" -# -# use Rack::Static, :urls => [""], :root => 'public', :index => -# 'index.html' -# -# Set custom HTTP Headers for based on rules: -# -# use Rack::Static, :root => 'public', -# :header_rules => [ -# [rule, {header_field => content, header_field => content}], -# [rule, {header_field => content}] -# ] -# -# Rules for selecting files: -# -# 1) All files -# Provide the :all symbol -# :all => Matches every file -# -# 2) Folders -# Provide the folder path as a string -# '/folder' or '/folder/subfolder' => Matches files in a certain folder -# -# 3) File Extensions -# Provide the file extensions as an array -# ['css', 'js'] or %w(css js) => Matches files ending in .css or .js -# -# 4) Regular Expressions / Regexp -# Provide a regular expression -# %r{\.(?:css|js)\z} => Matches files ending in .css or .js -# /\.(?:eot|ttf|otf|woff2|woff|svg)\z/ => Matches files ending in -# the most common web font formats (.eot, .ttf, .otf, .woff2, .woff, .svg) -# Note: This Regexp is available as a shortcut, using the :fonts rule -# -# 5) Font Shortcut -# Provide the :fonts symbol -# :fonts => Uses the Regexp rule stated right above to match all common web font endings -# -# Rule Ordering: -# Rules are applied in the order that they are provided. -# List rather general rules above special ones. -# -# Complete example use case including HTTP header rules: -# -# use Rack::Static, :root => 'public', -# :header_rules => [ -# # Cache all static files in public caches (e.g. Rack::Cache) -# # as well as in the browser -# [:all, {'Cache-Control' => 'public, max-age=31536000'}], -# -# # Provide web fonts with cross-origin access-control-headers -# # Firefox requires this when serving assets using a Content Delivery Network -# [:fonts, {'Access-Control-Allow-Origin' => '*'}] -# ] -# -# source://rack//lib/rack/static.rb#88 -class Rack::Static - # @return [Static] a new instance of Static - # - # source://rack//lib/rack/static.rb#91 - def initialize(app, options = T.unsafe(nil)); end - - # @return [Boolean] - # - # source://rack//lib/rack/static.rb#107 - def add_index_root?(path); end - - # Convert HTTP header rules to HTTP headers - # - # source://rack//lib/rack/static.rb#166 - def applicable_rules(path); end - - # source://rack//lib/rack/static.rb#123 - def call(env); end - - # source://rack//lib/rack/static.rb#119 - def can_serve(path); end - - # source://rack//lib/rack/static.rb#111 - def overwrite_file_path(path); end - - # source://rack//lib/rack/static.rb#115 - def route_file(path); end -end - -# source://rack//lib/rack.rb#48 -Rack::TRACE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack.rb#34 -Rack::TRANSFER_ENCODING = T.let(T.unsafe(nil), String) - -# Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart) -# Ideas/strategy based on posts by Eric Wong and Charles Oliver Nutter -# https://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ -# -# source://rack//lib/rack/tempfile_reaper.rb#8 -class Rack::TempfileReaper - # @return [TempfileReaper] a new instance of TempfileReaper - # - # source://rack//lib/rack/tempfile_reaper.rb#9 - def initialize(app); end - - # source://rack//lib/rack/tempfile_reaper.rb#13 - def call(env); end -end - -# source://rack//lib/rack.rb#47 -Rack::UNLINK = T.let(T.unsafe(nil), String) - -# Rack::URLMap takes a hash mapping urls or paths to apps, and -# dispatches accordingly. Support for HTTP/1.1 host names exists if -# the URLs start with http:// or https://. -# -# URLMap modifies the SCRIPT_NAME and PATH_INFO such that the part -# relevant for dispatch is in the SCRIPT_NAME, and the rest in the -# PATH_INFO. This should be taken care of when you need to -# reconstruct the URL in order to create links. -# -# URLMap dispatches in such a way that the longest paths are tried -# first, since they are most specific. -# -# source://rack//lib/rack/urlmap.rb#18 -class Rack::URLMap - # @return [URLMap] a new instance of URLMap - # - # source://rack//lib/rack/urlmap.rb#19 - def initialize(map = T.unsafe(nil)); end - - # source://rack//lib/rack/urlmap.rb#46 - def call(env); end - - # source://rack//lib/rack/urlmap.rb#23 - def remap(map); end - - private - - # @return [Boolean] - # - # source://rack//lib/rack/urlmap.rb#85 - def casecmp?(v1, v2); end -end - -# Rack::Utils contains a grab-bag of useful methods for writing web -# applications adopted from all kinds of Ruby libraries. -# -# source://rack//lib/rack/utils.rb#16 -module Rack::Utils - private - - # source://rack//lib/rack/utils.rb#237 - def add_cookie_to_header(header, key, value); end - - # Adds a cookie that will *remove* a cookie from the client. Hence the - # strange method name. - # - # source://rack//lib/rack/utils.rb#320 - def add_remove_cookie_to_header(header, key, value = T.unsafe(nil)); end - - # Return best accept value to use, based on the algorithm - # in RFC 2616 Section 14. If there are multiple best - # matches (same specificity and quality), the value returned - # is arbitrary. - # - # source://rack//lib/rack/utils.rb#159 - def best_q_match(q_value_header, available_mimes); end - - # source://rack//lib/rack/utils.rb#126 - def build_nested_query(value, prefix = T.unsafe(nil)); end - - # source://rack//lib/rack/utils.rb#116 - def build_query(params); end - - # Parses the "Range:" header, if present, into an array of Range objects. - # Returns nil if the header is missing or syntactically invalid. - # Returns an empty array if none of the ranges are satisfiable. - # - # source://rack//lib/rack/utils.rb#352 - def byte_ranges(env, size); end - - # source://rack//lib/rack/utils.rb#606 - def clean_path_info(path_info); end - - # :nocov: - # - # source://rack//lib/rack/utils.rb#97 - def clock_time; end - - # source://rack//lib/rack/utils.rb#313 - def delete_cookie_header!(header, key, value = T.unsafe(nil)); end - - # URI escapes. (CGI style space to +) - # - # source://rack//lib/rack/utils.rb#38 - def escape(s); end - - # Escape ampersands, brackets and quotes to their HTML/XML entities. - # - # source://rack//lib/rack/utils.rb#184 - def escape_html(string); end - - # Like URI escaping, but with %20 instead of +. Strictly speaking this is - # true URI escaping. - # - # source://rack//lib/rack/utils.rb#44 - def escape_path(s); end - - # source://rack//lib/rack/utils.rb#357 - def get_byte_ranges(http_range, size); end - - # source://rack//lib/rack/utils.rb#283 - def make_delete_cookie_header(header, key, value); end - - # source://rack//lib/rack/utils.rb#220 - def parse_cookies(env); end - - # source://rack//lib/rack/utils.rb#224 - def parse_cookies_header(header); end - - # source://rack//lib/rack/utils.rb#112 - def parse_nested_query(qs, d = T.unsafe(nil)); end - - # source://rack//lib/rack/utils.rb#108 - def parse_query(qs, d = T.unsafe(nil), &unescaper); end - - # source://rack//lib/rack/utils.rb#144 - def q_values(q_value_header); end - - # Modified version of stdlib time.rb Time#rfc2822 to use '%d-%b-%Y' instead - # of '% %b %Y'. - # It assumes that the time is in GMT to comply to the RFC 2109. - # - # NOTE: I'm not sure the RFC says it requires GMT, but is ambiguous enough - # that I'm certain someone implemented only that option. - # Do not use %a and %b from Time.strptime, it would use localized names for - # weekday and month. - # - # source://rack//lib/rack/utils.rb#343 - def rfc2109(time); end - - # source://rack//lib/rack/utils.rb#330 - def rfc2822(time); end - - # Constant time string comparison. - # - # NOTE: the values compared should be of fixed length, such as strings - # that have already been processed by HMAC. This should not be used - # on variable length plaintext strings because it could leak length info - # via timing attacks. - # - # source://rack//lib/rack/utils.rb#392 - def secure_compare(a, b); end - - # source://rack//lib/rack/utils.rb#188 - def select_best_encoding(available_encodings, accept_encoding); end - - # source://rack//lib/rack/utils.rb#278 - def set_cookie_header!(header, key, value); end - - # source://rack//lib/rack/utils.rb#596 - def status_code(status); end - - # Unescapes a URI escaped string with +encoding+. +encoding+ will be the - # target encoding of the string returned, and it defaults to UTF-8 - # - # source://rack//lib/rack/utils.rb#56 - def unescape(s, encoding = T.unsafe(nil)); end - - # Unescapes the **path** component of a URI. See Rack::Utils.unescape for - # unescaping query parameters or form components. - # - # source://rack//lib/rack/utils.rb#50 - def unescape_path(s); end - - # source://rack//lib/rack/utils.rb#623 - def valid_path?(path); end - - class << self - # source://rack//lib/rack/utils.rb#237 - def add_cookie_to_header(header, key, value); end - - # Adds a cookie that will *remove* a cookie from the client. Hence the - # strange method name. - # - # source://rack//lib/rack/utils.rb#320 - def add_remove_cookie_to_header(header, key, value = T.unsafe(nil)); end - - # Return best accept value to use, based on the algorithm - # in RFC 2616 Section 14. If there are multiple best - # matches (same specificity and quality), the value returned - # is arbitrary. - # - # source://rack//lib/rack/utils.rb#159 - def best_q_match(q_value_header, available_mimes); end - - # source://rack//lib/rack/utils.rb#126 - def build_nested_query(value, prefix = T.unsafe(nil)); end - - # source://rack//lib/rack/utils.rb#116 - def build_query(params); end - - # Parses the "Range:" header, if present, into an array of Range objects. - # Returns nil if the header is missing or syntactically invalid. - # Returns an empty array if none of the ranges are satisfiable. - # - # source://rack//lib/rack/utils.rb#352 - def byte_ranges(env, size); end - - # source://rack//lib/rack/utils.rb#606 - def clean_path_info(path_info); end - - # source://rack//lib/rack/utils.rb#97 - def clock_time; end - - # Returns the value of attribute default_query_parser. - # - # source://rack//lib/rack/utils.rb#29 - def default_query_parser; end - - # Sets the attribute default_query_parser - # - # @param value the value to set the attribute default_query_parser to. - # - # source://rack//lib/rack/utils.rb#29 - def default_query_parser=(_arg0); end - - # source://rack//lib/rack/utils.rb#313 - def delete_cookie_header!(header, key, value = T.unsafe(nil)); end - - # URI escapes. (CGI style space to +) - # - # source://rack//lib/rack/utils.rb#38 - def escape(s); end - - # Escape ampersands, brackets and quotes to their HTML/XML entities. - # - # source://rack//lib/rack/utils.rb#184 - def escape_html(string); end - - # Like URI escaping, but with %20 instead of +. Strictly speaking this is - # true URI escaping. - # - # source://rack//lib/rack/utils.rb#44 - def escape_path(s); end - - # source://rack//lib/rack/utils.rb#357 - def get_byte_ranges(http_range, size); end - - # source://rack//lib/rack/utils.rb#88 - def key_space_limit; end - - # source://rack//lib/rack/utils.rb#92 - def key_space_limit=(v); end - - # source://rack//lib/rack/utils.rb#283 - def make_delete_cookie_header(header, key, value); end - - # Returns the value of attribute multipart_file_limit. - # - # source://rack//lib/rack/utils.rb#63 - def multipart_file_limit; end - - # Sets the attribute multipart_file_limit - # - # @param value the value to set the attribute multipart_file_limit to. - # - # source://rack//lib/rack/utils.rb#63 - def multipart_file_limit=(_arg0); end - - # Returns the value of attribute multipart_file_limit. - # multipart_part_limit is the original name of multipart_file_limit, but - # the limit only counts parts with filenames. - # - # source://rack//lib/rack/utils.rb#63 - def multipart_part_limit; end - - # Sets the attribute multipart_file_limit - # - # @param value the value to set the attribute multipart_file_limit to. - # - # source://rack//lib/rack/utils.rb#63 - def multipart_part_limit=(_arg0); end - - # Returns the value of attribute multipart_total_part_limit. - # - # source://rack//lib/rack/utils.rb#61 - def multipart_total_part_limit; end - - # Sets the attribute multipart_total_part_limit - # - # @param value the value to set the attribute multipart_total_part_limit to. - # - # source://rack//lib/rack/utils.rb#61 - def multipart_total_part_limit=(_arg0); end - - # source://rack//lib/rack/utils.rb#80 - def param_depth_limit; end - - # source://rack//lib/rack/utils.rb#84 - def param_depth_limit=(v); end - - # source://rack//lib/rack/utils.rb#220 - def parse_cookies(env); end - - # source://rack//lib/rack/utils.rb#224 - def parse_cookies_header(header); end - - # source://rack//lib/rack/utils.rb#112 - def parse_nested_query(qs, d = T.unsafe(nil)); end - - # source://rack//lib/rack/utils.rb#108 - def parse_query(qs, d = T.unsafe(nil), &unescaper); end - - # source://rack//lib/rack/utils.rb#144 - def q_values(q_value_header); end - - # Modified version of stdlib time.rb Time#rfc2822 to use '%d-%b-%Y' instead - # of '% %b %Y'. - # It assumes that the time is in GMT to comply to the RFC 2109. - # - # NOTE: I'm not sure the RFC says it requires GMT, but is ambiguous enough - # that I'm certain someone implemented only that option. - # Do not use %a and %b from Time.strptime, it would use localized names for - # weekday and month. - # - # source://rack//lib/rack/utils.rb#343 - def rfc2109(time); end - - # source://rack//lib/rack/utils.rb#330 - def rfc2822(time); end - - # Constant time string comparison. - # - # NOTE: the values compared should be of fixed length, such as strings - # that have already been processed by HMAC. This should not be used - # on variable length plaintext strings because it could leak length info - # via timing attacks. - # - # source://rack//lib/rack/utils.rb#392 - def secure_compare(a, b); end - - # source://rack//lib/rack/utils.rb#188 - def select_best_encoding(available_encodings, accept_encoding); end - - # source://rack//lib/rack/utils.rb#278 - def set_cookie_header!(header, key, value); end - - # source://rack//lib/rack/utils.rb#596 - def status_code(status); end - - # Unescapes a URI escaped string with +encoding+. +encoding+ will be the - # target encoding of the string returned, and it defaults to UTF-8 - # - # source://rack//lib/rack/utils.rb#56 - def unescape(s, encoding = T.unsafe(nil)); end - - # Unescapes the **path** component of a URI. See Rack::Utils.unescape for - # unescaping query parameters or form components. - # - # source://rack//lib/rack/utils.rb#50 - def unescape_path(s); end - - # @return [Boolean] - # - # source://rack//lib/rack/utils.rb#623 - def valid_path?(path); end - end -end - -# source://rack//lib/rack/utils.rb#22 -Rack::Utils::COMMON_SEP = T.let(T.unsafe(nil), Hash) - -# Context allows the use of a compatible middleware at different points -# in a request handling stack. A compatible middleware must define -# #context which should take the arguments env and app. The first of which -# would be the request environment. The second of which would be the rack -# application that the request would be forwarded to. -# -# source://rack//lib/rack/utils.rb#407 -class Rack::Utils::Context - # @return [Context] a new instance of Context - # - # source://rack//lib/rack/utils.rb#410 - def initialize(app_f, app_r); end - - # Returns the value of attribute app. - # - # source://rack//lib/rack/utils.rb#408 - def app; end - - # source://rack//lib/rack/utils.rb#415 - def call(env); end - - # source://rack//lib/rack/utils.rb#423 - def context(env, app = T.unsafe(nil)); end - - # Returns the value of attribute for. - # - # source://rack//lib/rack/utils.rb#408 - def for; end - - # source://rack//lib/rack/utils.rb#419 - def recontext(app); end -end - -# source://rack//lib/rack/utils.rb#21 -Rack::Utils::DEFAULT_SEP = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/utils.rb#172 -Rack::Utils::ESCAPE_HTML = T.let(T.unsafe(nil), Hash) - -# source://rack//lib/rack/utils.rb#181 -Rack::Utils::ESCAPE_HTML_PATTERN = T.let(T.unsafe(nil), Regexp) - -# Every standard HTTP code mapped to the appropriate message. -# Generated with: -# curl -s https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv | \ -# ruby -ne 'm = /^(\d{3}),(?!Unassigned|\(Unused\))([^,]+)/.match($_) and \ -# puts "#{m[1]} => \x27#{m[2].strip}\x27,"' -# -# source://rack//lib/rack/utils.rb#523 -Rack::Utils::HTTP_STATUS_CODES = T.let(T.unsafe(nil), Hash) - -# A case-insensitive Hash that preserves the original case of a -# header when set. -# -# @api private -# -# source://rack//lib/rack/utils.rb#432 -class Rack::Utils::HeaderHash < ::Hash - # @api private - # @return [HeaderHash] a new instance of HeaderHash - # - # source://rack//lib/rack/utils.rb#441 - def initialize(hash = T.unsafe(nil)); end - - # @api private - # - # source://rack//lib/rack/utils.rb#471 - def [](k); end - - # @api private - # - # source://rack//lib/rack/utils.rb#475 - def []=(k, v); end - - # on clear, we need to clear @names hash - # - # @api private - # - # source://rack//lib/rack/utils.rb#454 - def clear; end - - # @api private - # - # source://rack//lib/rack/utils.rb#482 - def delete(k); end - - # @api private - # - # source://rack//lib/rack/utils.rb#459 - def each; end - - # @api private - # @return [Boolean] - # - # source://rack//lib/rack/utils.rb#488 - def has_key?(k); end - - # @api private - # @return [Boolean] - # - # source://rack//lib/rack/utils.rb#488 - def include?(k); end - - # @api private - # @return [Boolean] - # - # source://rack//lib/rack/utils.rb#488 - def key?(k); end - - # @api private - # @return [Boolean] - # - # source://rack//lib/rack/utils.rb#488 - def member?(k); end - - # @api private - # - # source://rack//lib/rack/utils.rb#501 - def merge(other); end - - # @api private - # - # source://rack//lib/rack/utils.rb#496 - def merge!(other); end - - # @api private - # - # source://rack//lib/rack/utils.rb#506 - def replace(other); end - - # @api private - # - # source://rack//lib/rack/utils.rb#465 - def to_hash; end - - protected - - # @api private - # - # source://rack//lib/rack/utils.rb#513 - def names; end - - private - - # on dup/clone, we need to duplicate @names hash - # - # @api private - # - # source://rack//lib/rack/utils.rb#448 - def initialize_copy(other); end - - class << self - # @api private - # - # source://rack//lib/rack/utils.rb#433 - def [](headers); end - end -end - -# source://rack//lib/rack/utils.rb#20 -Rack::Utils::InvalidParameterError = Rack::QueryParser::InvalidParameterError - -# source://rack//lib/rack/utils.rb#23 -Rack::Utils::KeySpaceConstrainedParams = Rack::QueryParser::Params - -# source://rack//lib/rack/utils.rb#621 -Rack::Utils::NULL_BYTE = T.let(T.unsafe(nil), String) - -# source://rack//lib/rack/utils.rb#604 -Rack::Utils::PATH_SEPS = T.let(T.unsafe(nil), Regexp) - -# source://rack//lib/rack/utils.rb#19 -Rack::Utils::ParameterTypeError = Rack::QueryParser::ParameterTypeError - -# source://rack//lib/rack/utils.rb#25 -Rack::Utils::RFC2822_DAY_NAME = T.let(T.unsafe(nil), Array) - -# source://rack//lib/rack/utils.rb#26 -Rack::Utils::RFC2822_MONTH_NAME = T.let(T.unsafe(nil), Array) - -# Responses with HTTP status codes that should not have an entity body -# -# source://rack//lib/rack/utils.rb#590 -Rack::Utils::STATUS_WITH_NO_ENTITY_BODY = T.let(T.unsafe(nil), Hash) - -# source://rack//lib/rack/utils.rb#592 -Rack::Utils::SYMBOL_TO_STATUS_CODE = T.let(T.unsafe(nil), Hash) - -# The Rack protocol version number implemented. -# -# source://rack//lib/rack/version.rb#16 -Rack::VERSION = T.let(T.unsafe(nil), Array) diff --git a/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi b/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi deleted file mode 100644 index 5510de9c2..000000000 --- a/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `rails-dom-testing` gem. -# Please instead update this file by running `bin/tapioca gem rails-dom-testing`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/rails-html-sanitizer@1.6.0.rbi b/sorbet/rbi/gems/rails-html-sanitizer@1.6.0.rbi deleted file mode 100644 index 75b177163..000000000 --- a/sorbet/rbi/gems/rails-html-sanitizer@1.6.0.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `rails-html-sanitizer` gem. -# Please instead update this file by running `bin/tapioca gem rails-html-sanitizer`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/railties@7.0.5.rbi b/sorbet/rbi/gems/railties@7.0.5.rbi deleted file mode 100644 index 5ccc04d4b..000000000 --- a/sorbet/rbi/gems/railties@7.0.5.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `railties` gem. -# Please instead update this file by running `bin/tapioca gem railties`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/rbi@0.0.16.rbi b/sorbet/rbi/gems/rbi@0.0.17.rbi similarity index 74% rename from sorbet/rbi/gems/rbi@0.0.16.rbi rename to sorbet/rbi/gems/rbi@0.0.17.rbi index ec4c7b201..5b17afade 100644 --- a/sorbet/rbi/gems/rbi@0.0.16.rbi +++ b/sorbet/rbi/gems/rbi@0.0.17.rbi @@ -4,60 +4,55 @@ # This is an autogenerated file for types exported from the `rbi` gem. # Please instead update this file by running `bin/tapioca gem rbi`. -# source://rbi//lib/rbi.rb#7 +# source://rbi//lib/rbi/loc.rb#4 module RBI; end # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/parser.rb#129 +# source://rbi//lib/rbi/parser.rb#133 class RBI::ASTVisitor abstract! # @abstract # - # source://rbi//lib/rbi/parser.rb#141 + # source://rbi//lib/rbi/parser.rb#145 sig { abstract.params(node: T.nilable(::AST::Node)).void } def visit(node); end - # source://rbi//lib/rbi/parser.rb#136 + # source://rbi//lib/rbi/parser.rb#140 sig { params(nodes: T::Array[::AST::Node]).void } def visit_all(nodes); end private - # source://rbi//lib/rbi/parser.rb#151 + # source://rbi//lib/rbi/parser.rb#155 sig { params(node: ::AST::Node).returns(::String) } def parse_expr(node); end - # source://rbi//lib/rbi/parser.rb#146 + # source://rbi//lib/rbi/parser.rb#150 sig { params(node: ::AST::Node).returns(::String) } def parse_name(node); end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end -# source://rbi//lib/rbi/model.rb#960 +# source://rbi//lib/rbi/model.rb#968 class RBI::Arg < ::RBI::Node - # source://rbi//lib/rbi/model.rb#972 + # source://rbi//lib/rbi/model.rb#980 sig { params(value: ::String, loc: T.nilable(::RBI::Loc)).void } def initialize(value, loc: T.unsafe(nil)); end - # source://rbi//lib/rbi/model.rb#978 + # source://rbi//lib/rbi/model.rb#986 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#611 + # source://rbi//lib/rbi/printer.rb#613 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#983 + # source://rbi//lib/rbi/model.rb#991 sig { returns(::String) } def to_s; end - # source://rbi//lib/rbi/model.rb#964 + # source://rbi//lib/rbi/model.rb#972 sig { returns(::String) } def value; end end @@ -66,13 +61,13 @@ end # # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#341 +# source://rbi//lib/rbi/model.rb#349 class RBI::Attr < ::RBI::NodeWithComments include ::RBI::Indexable abstract! - # source://rbi//lib/rbi/model.rb#366 + # source://rbi//lib/rbi/model.rb#374 sig do params( name: ::Symbol, @@ -85,63 +80,58 @@ class RBI::Attr < ::RBI::NodeWithComments end def initialize(name, names, visibility: T.unsafe(nil), sigs: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#346 + # source://rbi//lib/rbi/printer.rb#348 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#406 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#412 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end # @abstract # - # source://rbi//lib/rbi/model.rb#374 + # source://rbi//lib/rbi/model.rb#382 sig { abstract.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/index.rb#109 + # source://rbi//lib/rbi/index.rb#113 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#413 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#420 sig { override.params(other: ::RBI::Node).void } def merge_with(other); end - # source://rbi//lib/rbi/model.rb#348 + # source://rbi//lib/rbi/model.rb#356 sig { returns(T::Array[::Symbol]) } def names; end # @return [Array] # - # source://rbi//lib/rbi/model.rb#348 + # source://rbi//lib/rbi/model.rb#356 def names=(_arg0); end - # source://rbi//lib/rbi/printer.rb#373 + # source://rbi//lib/rbi/printer.rb#375 sig { override.returns(T::Boolean) } def oneline?; end - # source://rbi//lib/rbi/model.rb#354 + # source://rbi//lib/rbi/model.rb#362 sig { returns(T::Array[::RBI::Sig]) } def sigs; end - # source://rbi//lib/rbi/model.rb#351 + # source://rbi//lib/rbi/model.rb#359 sig { returns(::RBI::Visibility) } def visibility; end # @return [Visibility] # - # source://rbi//lib/rbi/model.rb#351 + # source://rbi//lib/rbi/model.rb#359 def visibility=(_arg0); end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end -# source://rbi//lib/rbi/model.rb#377 +# source://rbi//lib/rbi/model.rb#385 class RBI::AttrAccessor < ::RBI::Attr - # source://rbi//lib/rbi/model.rb#391 + # source://rbi//lib/rbi/model.rb#399 sig do params( name: ::Symbol, @@ -155,22 +145,22 @@ class RBI::AttrAccessor < ::RBI::Attr end def initialize(name, *names, visibility: T.unsafe(nil), sigs: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#444 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#452 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#397 + # source://rbi//lib/rbi/model.rb#405 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/model.rb#403 + # source://rbi//lib/rbi/model.rb#411 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#409 +# source://rbi//lib/rbi/model.rb#417 class RBI::AttrReader < ::RBI::Attr - # source://rbi//lib/rbi/model.rb#423 + # source://rbi//lib/rbi/model.rb#431 sig do params( name: ::Symbol, @@ -184,22 +174,22 @@ class RBI::AttrReader < ::RBI::Attr end def initialize(name, *names, visibility: T.unsafe(nil), sigs: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#426 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#434 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#429 + # source://rbi//lib/rbi/model.rb#437 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/model.rb#435 + # source://rbi//lib/rbi/model.rb#443 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#441 +# source://rbi//lib/rbi/model.rb#449 class RBI::AttrWriter < ::RBI::Attr - # source://rbi//lib/rbi/model.rb#455 + # source://rbi//lib/rbi/model.rb#463 sig do params( name: ::Symbol, @@ -213,35 +203,35 @@ class RBI::AttrWriter < ::RBI::Attr end def initialize(name, *names, visibility: T.unsafe(nil), sigs: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#435 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#443 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#461 + # source://rbi//lib/rbi/model.rb#469 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/model.rb#467 + # source://rbi//lib/rbi/model.rb#475 sig { override.returns(::String) } def to_s; end end # An arbitrary blank line that can be added both in trees and comments # -# source://rbi//lib/rbi/model.rb#70 +# source://rbi//lib/rbi/model.rb#74 class RBI::BlankLine < ::RBI::Comment - # source://rbi//lib/rbi/model.rb#74 + # source://rbi//lib/rbi/model.rb#78 sig { params(loc: T.nilable(::RBI::Loc)).void } def initialize(loc: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#215 + # source://rbi//lib/rbi/printer.rb#217 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end end -# source://rbi//lib/rbi/model.rb#733 +# source://rbi//lib/rbi/model.rb#741 class RBI::BlockParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#744 + # source://rbi//lib/rbi/model.rb#752 sig do params( name: ::String, @@ -252,26 +242,26 @@ class RBI::BlockParam < ::RBI::Param end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#755 + # source://rbi//lib/rbi/model.rb#763 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#541 + # source://rbi//lib/rbi/printer.rb#543 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#546 + # source://rbi//lib/rbi/printer.rb#548 sig { override.params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#750 + # source://rbi//lib/rbi/model.rb#758 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#213 +# source://rbi//lib/rbi/model.rb#218 class RBI::Class < ::RBI::Scope - # source://rbi//lib/rbi/model.rb#231 + # source://rbi//lib/rbi/model.rb#236 sig do params( name: ::String, @@ -283,58 +273,58 @@ class RBI::Class < ::RBI::Scope end def initialize(name, superclass_name: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#370 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#376 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#239 + # source://rbi//lib/rbi/model.rb#244 sig { override.returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/model.rb#217 + # source://rbi//lib/rbi/model.rb#222 sig { returns(::String) } def name; end # @return [String] # - # source://rbi//lib/rbi/model.rb#217 + # source://rbi//lib/rbi/model.rb#222 def name=(_arg0); end - # source://rbi//lib/rbi/printer.rb#282 + # source://rbi//lib/rbi/printer.rb#284 sig { override.params(v: ::RBI::Printer).void } def print_header(v); end - # source://rbi//lib/rbi/model.rb#220 + # source://rbi//lib/rbi/model.rb#225 sig { returns(T.nilable(::String)) } def superclass_name; end # @return [String, nil] # - # source://rbi//lib/rbi/model.rb#220 + # source://rbi//lib/rbi/model.rb#225 def superclass_name=(_arg0); end end -# source://rbi//lib/rbi/model.rb#50 +# source://rbi//lib/rbi/model.rb#53 class RBI::Comment < ::RBI::Node - # source://rbi//lib/rbi/model.rb#57 + # source://rbi//lib/rbi/model.rb#60 sig { params(text: ::String, loc: T.nilable(::RBI::Loc)).void } def initialize(text, loc: T.unsafe(nil)); end - # source://rbi//lib/rbi/model.rb#63 + # source://rbi//lib/rbi/model.rb#66 sig { params(other: ::Object).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#195 + # source://rbi//lib/rbi/printer.rb#197 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#54 + # source://rbi//lib/rbi/model.rb#57 sig { returns(::String) } def text; end # @return [String] # - # source://rbi//lib/rbi/model.rb#54 + # source://rbi//lib/rbi/model.rb#57 def text=(_arg0); end end @@ -353,33 +343,33 @@ end # end # ~~~ # -# source://rbi//lib/rbi/rewriters/merge_trees.rb#578 +# source://rbi//lib/rbi/rewriters/merge_trees.rb#589 class RBI::ConflictTree < ::RBI::Tree - # source://rbi//lib/rbi/rewriters/merge_trees.rb#585 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#596 sig { params(left_name: ::String, right_name: ::String).void } def initialize(left_name: T.unsafe(nil), right_name: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#596 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#607 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#582 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#593 sig { returns(::RBI::Tree) } def left; end # @return [Tree] # - # source://rbi//lib/rbi/rewriters/merge_trees.rb#582 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#593 def right; end end # Consts # -# source://rbi//lib/rbi/model.rb#305 +# source://rbi//lib/rbi/model.rb#312 class RBI::Const < ::RBI::NodeWithComments include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#320 + # source://rbi//lib/rbi/model.rb#327 sig do params( name: ::String, @@ -391,70 +381,67 @@ class RBI::Const < ::RBI::NodeWithComments end def initialize(name, value, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/printer.rb#333 + # source://rbi//lib/rbi/printer.rb#335 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#397 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#403 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#328 + # source://rbi//lib/rbi/model.rb#335 sig { returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/index.rb#99 + # source://rbi//lib/rbi/index.rb#103 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#309 + # source://rbi//lib/rbi/model.rb#316 sig { returns(::String) } def name; end - # source://rbi//lib/rbi/model.rb#334 + # source://rbi//lib/rbi/model.rb#342 sig { override.returns(::String) } def to_s; end # @return [String] # - # source://rbi//lib/rbi/model.rb#309 + # source://rbi//lib/rbi/model.rb#316 def value; end end -# source://rbi//lib/rbi/parser.rb#600 +# source://rbi//lib/rbi/parser.rb#627 class RBI::ConstBuilder < ::RBI::ASTVisitor - # source://rbi//lib/rbi/parser.rb#615 + # source://rbi//lib/rbi/parser.rb#634 sig { void } def initialize; end - # source://rbi//lib/rbi/parser.rb#612 + # source://rbi//lib/rbi/parser.rb#631 sig { returns(T::Array[::String]) } def names; end # @return [Array] # - # source://rbi//lib/rbi/parser.rb#612 + # source://rbi//lib/rbi/parser.rb#631 def names=(_arg0); end - # source://rbi//lib/rbi/parser.rb#621 + # source://rbi//lib/rbi/parser.rb#653 sig { override.params(node: T.nilable(::AST::Node)).void } def visit(node); end class << self - # source://rbi//lib/rbi/parser.rb#604 + # source://rbi//lib/rbi/parser.rb#643 sig { params(node: T.nilable(::AST::Node)).returns(T.nilable(::String)) } def visit(node); end end end -# source://rbi//lib/rbi.rb#8 -class RBI::Error < ::StandardError; end - -# source://rbi//lib/rbi/model.rb#808 +# source://rbi//lib/rbi/model.rb#816 class RBI::Extend < ::RBI::Mixin include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#820 + # source://rbi//lib/rbi/model.rb#828 sig do params( name: ::String, @@ -466,22 +453,22 @@ class RBI::Extend < ::RBI::Mixin end def initialize(name, *names, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#492 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#502 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/index.rb#139 + # source://rbi//lib/rbi/index.rb#143 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#826 + # source://rbi//lib/rbi/model.rb#834 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#133 +# source://rbi//lib/rbi/model.rb#137 class RBI::File - # source://rbi//lib/rbi/model.rb#152 + # source://rbi//lib/rbi/model.rb#156 sig do params( strictness: T.nilable(::String), @@ -491,28 +478,28 @@ class RBI::File end def initialize(strictness: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#160 + # source://rbi//lib/rbi/model.rb#164 sig { params(node: ::RBI::Node).void } def <<(node); end - # source://rbi//lib/rbi/printer.rb#104 + # source://rbi//lib/rbi/printer.rb#105 sig { params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#143 + # source://rbi//lib/rbi/model.rb#147 sig { returns(T::Array[::RBI::Comment]) } def comments; end # @return [Array] # - # source://rbi//lib/rbi/model.rb#143 + # source://rbi//lib/rbi/model.rb#147 def comments=(_arg0); end - # source://rbi//lib/rbi/model.rb#165 + # source://rbi//lib/rbi/model.rb#169 sig { returns(T::Boolean) } def empty?; end - # source://rbi//lib/rbi/printer.rb#128 + # source://rbi//lib/rbi/printer.rb#129 sig do params( out: T.any(::IO, ::StringIO), @@ -523,32 +510,32 @@ class RBI::File end def print(out: T.unsafe(nil), indent: T.unsafe(nil), print_locs: T.unsafe(nil), max_line_length: T.unsafe(nil)); end - # source://rbi//lib/rbi/model.rb#137 + # source://rbi//lib/rbi/model.rb#141 sig { returns(::RBI::Tree) } def root; end # @return [Tree] # - # source://rbi//lib/rbi/model.rb#137 + # source://rbi//lib/rbi/model.rb#141 def root=(_arg0); end - # source://rbi//lib/rbi/model.rb#140 + # source://rbi//lib/rbi/model.rb#144 sig { returns(T.nilable(::String)) } def strictness; end # @return [String, nil] # - # source://rbi//lib/rbi/model.rb#140 + # source://rbi//lib/rbi/model.rb#144 def strictness=(_arg0); end - # source://rbi//lib/rbi/printer.rb#134 + # source://rbi//lib/rbi/printer.rb#135 sig { params(indent: ::Integer, print_locs: T::Boolean, max_line_length: T.nilable(::Integer)).returns(::String) } def string(indent: T.unsafe(nil), print_locs: T.unsafe(nil), max_line_length: T.unsafe(nil)); end end # source://rbi//lib/rbi/formatter.rb#5 class RBI::Formatter - # source://rbi//lib/rbi/formatter.rb#24 + # source://rbi//lib/rbi/formatter.rb#36 sig do params( add_sig_templates: T::Boolean, @@ -561,79 +548,46 @@ class RBI::Formatter end def initialize(add_sig_templates: T.unsafe(nil), group_nodes: T.unsafe(nil), max_line_length: T.unsafe(nil), nest_singleton_methods: T.unsafe(nil), nest_non_public_methods: T.unsafe(nil), sort_nodes: T.unsafe(nil)); end - # source://rbi//lib/rbi/formatter.rb#9 - sig { returns(T::Boolean) } - def add_sig_templates; end + # source://rbi//lib/rbi/formatter.rb#15 + sig { params(add_sig_templates: T::Boolean).returns(T::Boolean) } + def add_sig_templates=(add_sig_templates); end - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def add_sig_templates=(_arg0); end - - # source://rbi//lib/rbi/formatter.rb#53 + # source://rbi//lib/rbi/formatter.rb#59 sig { params(file: ::RBI::File).void } def format_file(file); end - # source://rbi//lib/rbi/formatter.rb#58 + # source://rbi//lib/rbi/formatter.rb#64 sig { params(tree: ::RBI::Tree).void } def format_tree(tree); end - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def group_nodes; end - - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def group_nodes=(_arg0); end + # source://rbi//lib/rbi/formatter.rb#18 + sig { params(group_nodes: T::Boolean).returns(T::Boolean) } + def group_nodes=(group_nodes); end - # source://rbi//lib/rbi/formatter.rb#12 + # source://rbi//lib/rbi/formatter.rb#24 sig { returns(T.nilable(::Integer)) } def max_line_length; end # @return [Integer, nil] # - # source://rbi//lib/rbi/formatter.rb#12 + # source://rbi//lib/rbi/formatter.rb#24 def max_line_length=(_arg0); end - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def nest_non_public_methods; end + # source://rbi//lib/rbi/formatter.rb#21 + sig { params(nest_non_public_methods: T::Boolean).returns(T::Boolean) } + def nest_non_public_methods=(nest_non_public_methods); end - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def nest_non_public_methods=(_arg0); end - - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def nest_singleton_methods; end - - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def nest_singleton_methods=(_arg0); end + # source://rbi//lib/rbi/formatter.rb#12 + sig { params(nest_singleton_methods: T::Boolean).returns(T::Boolean) } + def nest_singleton_methods=(nest_singleton_methods); end - # source://rbi//lib/rbi/formatter.rb#41 + # source://rbi//lib/rbi/formatter.rb#53 sig { params(file: ::RBI::File).returns(::String) } def print_file(file); end - # source://rbi//lib/rbi/formatter.rb#47 - sig { params(tree: ::RBI::Tree).returns(::String) } - def print_tree(tree); end - - # @return [Boolean] - # # source://rbi//lib/rbi/formatter.rb#9 - def sort_nodes; end - - # @return [Boolean] - # - # source://rbi//lib/rbi/formatter.rb#9 - def sort_nodes=(_arg0); end + sig { params(sort_nodes: T::Boolean).returns(T::Boolean) } + def sort_nodes=(sort_nodes); end end # source://rbi//lib/rbi/rewriters/group_nodes.rb#88 @@ -642,7 +596,7 @@ class RBI::Group < ::RBI::Tree sig { params(kind: ::RBI::Group::Kind).void } def initialize(kind); end - # source://rbi//lib/rbi/printer.rb#836 + # source://rbi//lib/rbi/printer.rb#838 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end @@ -672,11 +626,11 @@ end # Sorbet's misc. # -# source://rbi//lib/rbi/model.rb#1285 +# source://rbi//lib/rbi/model.rb#1294 class RBI::Helper < ::RBI::NodeWithComments include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#1299 + # source://rbi//lib/rbi/model.rb#1308 sig do params( name: ::String, @@ -687,32 +641,32 @@ class RBI::Helper < ::RBI::NodeWithComments end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/printer.rb#823 + # source://rbi//lib/rbi/printer.rb#825 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#510 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#520 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/index.rb#169 + # source://rbi//lib/rbi/index.rb#173 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#1289 + # source://rbi//lib/rbi/model.rb#1298 sig { returns(::String) } def name; end - # source://rbi//lib/rbi/model.rb#1306 + # source://rbi//lib/rbi/model.rb#1315 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#785 +# source://rbi//lib/rbi/model.rb#793 class RBI::Include < ::RBI::Mixin include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#797 + # source://rbi//lib/rbi/model.rb#805 sig do params( name: ::String, @@ -724,49 +678,49 @@ class RBI::Include < ::RBI::Mixin end def initialize(name, *names, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#483 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#493 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/index.rb#129 + # source://rbi//lib/rbi/index.rb#133 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#803 + # source://rbi//lib/rbi/model.rb#811 sig { override.returns(::String) } def to_s; end end # source://rbi//lib/rbi/index.rb#5 class RBI::Index < ::RBI::Visitor - # source://rbi//lib/rbi/index.rb#17 + # source://rbi//lib/rbi/index.rb#21 sig { void } def initialize; end - # source://rbi//lib/rbi/index.rb#28 + # source://rbi//lib/rbi/index.rb#32 sig { params(id: ::String).returns(T::Array[::RBI::Node]) } def [](id); end - # source://rbi//lib/rbi/index.rb#33 + # source://rbi//lib/rbi/index.rb#37 sig { params(nodes: ::RBI::Node).void } def index(*nodes); end - # source://rbi//lib/rbi/index.rb#23 + # source://rbi//lib/rbi/index.rb#27 sig { returns(T::Array[::String]) } def keys; end - # source://rbi//lib/rbi/index.rb#38 + # source://rbi//lib/rbi/index.rb#42 sig { override.params(node: T.nilable(::RBI::Node)).void } def visit(node); end private - # source://rbi//lib/rbi/index.rb#55 + # source://rbi//lib/rbi/index.rb#59 sig { params(node: T.all(::RBI::Indexable, ::RBI::Node)).void } def index_node(node); end class << self - # source://rbi//lib/rbi/index.rb#10 + # source://rbi//lib/rbi/index.rb#13 sig { params(node: ::RBI::Node).returns(::RBI::Index) } def index(*node); end end @@ -776,7 +730,7 @@ end # # @abstract Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/index.rb#70 +# source://rbi//lib/rbi/index.rb#74 module RBI::Indexable interface! @@ -787,37 +741,37 @@ module RBI::Indexable # # @abstract # - # source://rbi//lib/rbi/index.rb#81 + # source://rbi//lib/rbi/index.rb#85 sig { abstract.returns(T::Array[::String]) } def index_ids; end end -# source://rbi//lib/rbi/model.rb#988 +# source://rbi//lib/rbi/model.rb#996 class RBI::KwArg < ::RBI::Arg - # source://rbi//lib/rbi/model.rb#1001 + # source://rbi//lib/rbi/model.rb#1009 sig { params(keyword: ::String, value: ::String, loc: T.nilable(::RBI::Loc)).void } def initialize(keyword, value, loc: T.unsafe(nil)); end - # source://rbi//lib/rbi/model.rb#1007 + # source://rbi//lib/rbi/model.rb#1015 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#620 + # source://rbi//lib/rbi/printer.rb#622 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#992 + # source://rbi//lib/rbi/model.rb#1000 sig { returns(::String) } def keyword; end - # source://rbi//lib/rbi/model.rb#1012 + # source://rbi//lib/rbi/model.rb#1020 sig { returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#674 +# source://rbi//lib/rbi/model.rb#682 class RBI::KwOptParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#689 + # source://rbi//lib/rbi/model.rb#697 sig do params( name: ::String, @@ -829,30 +783,30 @@ class RBI::KwOptParam < ::RBI::Param end def initialize(name, value, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#701 + # source://rbi//lib/rbi/model.rb#709 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#511 + # source://rbi//lib/rbi/printer.rb#513 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#516 + # source://rbi//lib/rbi/printer.rb#518 sig { override.params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#696 + # source://rbi//lib/rbi/model.rb#704 sig { override.returns(::String) } def to_s; end - # source://rbi//lib/rbi/model.rb#678 + # source://rbi//lib/rbi/model.rb#686 sig { returns(::String) } def value; end end -# source://rbi//lib/rbi/model.rb#647 +# source://rbi//lib/rbi/model.rb#655 class RBI::KwParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#658 + # source://rbi//lib/rbi/model.rb#666 sig do params( name: ::String, @@ -863,26 +817,26 @@ class RBI::KwParam < ::RBI::Param end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#669 + # source://rbi//lib/rbi/model.rb#677 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#496 + # source://rbi//lib/rbi/printer.rb#498 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#501 + # source://rbi//lib/rbi/printer.rb#503 sig { override.params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#664 + # source://rbi//lib/rbi/model.rb#672 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#706 +# source://rbi//lib/rbi/model.rb#714 class RBI::KwRestParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#717 + # source://rbi//lib/rbi/model.rb#725 sig do params( name: ::String, @@ -893,19 +847,19 @@ class RBI::KwRestParam < ::RBI::Param end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#728 + # source://rbi//lib/rbi/model.rb#736 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#526 + # source://rbi//lib/rbi/printer.rb#528 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#531 + # source://rbi//lib/rbi/printer.rb#533 sig { override.params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#723 + # source://rbi//lib/rbi/model.rb#731 sig { override.returns(::String) } def to_s; end end @@ -956,7 +910,7 @@ class RBI::Loc def to_s; end class << self - # source://rbi//lib/rbi/parser.rb#707 + # source://rbi//lib/rbi/parser.rb#748 sig { params(file: ::String, ast_loc: T.any(::Parser::Source::Map, ::Parser::Source::Range)).returns(::RBI::Loc) } def from_ast_loc(file, ast_loc); end end @@ -964,9 +918,9 @@ end # A tree that _might_ contain conflicts # -# source://rbi//lib/rbi/rewriters/merge_trees.rb#324 +# source://rbi//lib/rbi/rewriters/merge_trees.rb#330 class RBI::MergeTree < ::RBI::Tree - # source://rbi//lib/rbi/rewriters/merge_trees.rb#338 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#344 sig do params( loc: T.nilable(::RBI::Loc), @@ -977,18 +931,18 @@ class RBI::MergeTree < ::RBI::Tree end def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil), conflicts: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#328 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#334 sig { returns(T::Array[::RBI::Rewriters::Merge::Conflict]) } def conflicts; end end # Methods and args # -# source://rbi//lib/rbi/model.rb#475 +# source://rbi//lib/rbi/model.rb#483 class RBI::Method < ::RBI::NodeWithComments include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#505 + # source://rbi//lib/rbi/model.rb#513 sig do params( name: ::String, @@ -1003,88 +957,88 @@ class RBI::Method < ::RBI::NodeWithComments end def initialize(name, params: T.unsafe(nil), is_singleton: T.unsafe(nil), visibility: T.unsafe(nil), sigs: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#525 + # source://rbi//lib/rbi/model.rb#533 sig { params(param: ::RBI::Param).void } def <<(param); end - # source://rbi//lib/rbi/printer.rb#382 + # source://rbi//lib/rbi/printer.rb#384 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#453 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#461 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#530 + # source://rbi//lib/rbi/model.rb#538 sig { returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/index.rb#119 + # source://rbi//lib/rbi/index.rb#123 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/printer.rb#435 + # source://rbi//lib/rbi/printer.rb#437 sig { returns(T::Boolean) } def inline_params?; end - # source://rbi//lib/rbi/model.rb#485 + # source://rbi//lib/rbi/model.rb#493 sig { returns(T::Boolean) } def is_singleton; end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#485 + # source://rbi//lib/rbi/model.rb#493 def is_singleton=(_arg0); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#461 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#470 sig { override.params(other: ::RBI::Node).void } def merge_with(other); end - # source://rbi//lib/rbi/model.rb#479 + # source://rbi//lib/rbi/model.rb#487 sig { returns(::String) } def name; end # @return [String] # - # source://rbi//lib/rbi/model.rb#479 + # source://rbi//lib/rbi/model.rb#487 def name=(_arg0); end - # source://rbi//lib/rbi/printer.rb#430 + # source://rbi//lib/rbi/printer.rb#432 sig { override.returns(T::Boolean) } def oneline?; end - # source://rbi//lib/rbi/model.rb#482 + # source://rbi//lib/rbi/model.rb#490 sig { returns(T::Array[::RBI::Param]) } def params; end - # source://rbi//lib/rbi/model.rb#491 + # source://rbi//lib/rbi/model.rb#499 sig { returns(T::Array[::RBI::Sig]) } def sigs; end # @return [Array] # - # source://rbi//lib/rbi/model.rb#491 + # source://rbi//lib/rbi/model.rb#499 def sigs=(_arg0); end - # source://rbi//lib/rbi/model.rb#539 + # source://rbi//lib/rbi/model.rb#547 sig { override.returns(::String) } def to_s; end - # source://rbi//lib/rbi/model.rb#488 + # source://rbi//lib/rbi/model.rb#496 sig { returns(::RBI::Visibility) } def visibility; end # @return [Visibility] # - # source://rbi//lib/rbi/model.rb#488 + # source://rbi//lib/rbi/model.rb#496 def visibility=(_arg0); end end -# source://rbi//lib/rbi/model.rb#1345 +# source://rbi//lib/rbi/model.rb#1355 class RBI::MixesInClassMethods < ::RBI::Mixin include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#1357 + # source://rbi//lib/rbi/model.rb#1367 sig do params( name: ::String, @@ -1096,15 +1050,15 @@ class RBI::MixesInClassMethods < ::RBI::Mixin end def initialize(name, *names, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#501 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#511 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/index.rb#149 + # source://rbi//lib/rbi/index.rb#153 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#1363 + # source://rbi//lib/rbi/model.rb#1373 sig { override.returns(::String) } def to_s; end end @@ -1113,11 +1067,11 @@ end # # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#762 +# source://rbi//lib/rbi/model.rb#770 class RBI::Mixin < ::RBI::NodeWithComments abstract! - # source://rbi//lib/rbi/model.rb#779 + # source://rbi//lib/rbi/model.rb#787 sig do params( name: ::String, @@ -1128,32 +1082,27 @@ class RBI::Mixin < ::RBI::NodeWithComments end def initialize(name, names, loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#556 + # source://rbi//lib/rbi/printer.rb#558 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#474 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#484 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#769 + # source://rbi//lib/rbi/model.rb#777 sig { returns(T::Array[::String]) } def names; end # @return [Array] # - # source://rbi//lib/rbi/model.rb#769 + # source://rbi//lib/rbi/model.rb#777 def names=(_arg0); end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end -# source://rbi//lib/rbi/model.rb#186 +# source://rbi//lib/rbi/model.rb#190 class RBI::Module < ::RBI::Scope - # source://rbi//lib/rbi/model.rb#200 + # source://rbi//lib/rbi/model.rb#204 sig do params( name: ::String, @@ -1164,24 +1113,24 @@ class RBI::Module < ::RBI::Scope end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#379 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#385 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#207 + # source://rbi//lib/rbi/model.rb#211 sig { override.returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/model.rb#190 + # source://rbi//lib/rbi/model.rb#194 sig { returns(::String) } def name; end # @return [String] # - # source://rbi//lib/rbi/model.rb#190 + # source://rbi//lib/rbi/model.rb#194 def name=(_arg0); end - # source://rbi//lib/rbi/printer.rb#268 + # source://rbi//lib/rbi/printer.rb#270 sig { override.params(v: ::RBI::Printer).void } def print_header(v); end end @@ -1198,13 +1147,13 @@ class RBI::Node # @abstract # - # source://rbi//lib/rbi/printer.rb#145 + # source://rbi//lib/rbi/printer.rb#146 sig { abstract.params(v: ::RBI::Printer).void } def accept_printer(v); end # Can `self` and `_other` be merged into a single definition? # - # source://rbi//lib/rbi/rewriters/merge_trees.rb#283 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#287 sig { params(_other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(_other); end @@ -1227,19 +1176,19 @@ class RBI::Node # Merge `self` and `other` into a single definition # - # source://rbi//lib/rbi/rewriters/merge_trees.rb#289 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#293 sig { params(other: ::RBI::Node).void } def merge_with(other); end - # source://rbi//lib/rbi/printer.rb#177 + # source://rbi//lib/rbi/printer.rb#179 sig { returns(T::Boolean) } def oneline?; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#292 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#296 sig { returns(T.nilable(::RBI::ConflictTree)) } def parent_conflict_tree; end - # source://rbi//lib/rbi/model.rb#43 + # source://rbi//lib/rbi/model.rb#46 sig { returns(T.nilable(::RBI::Scope)) } def parent_scope; end @@ -1252,7 +1201,7 @@ class RBI::Node # source://rbi//lib/rbi/model.rb#12 def parent_tree=(_arg0); end - # source://rbi//lib/rbi/printer.rb#155 + # source://rbi//lib/rbi/printer.rb#156 sig do params( out: T.any(::IO, ::StringIO), @@ -1263,64 +1212,54 @@ class RBI::Node end def print(out: T.unsafe(nil), indent: T.unsafe(nil), print_locs: T.unsafe(nil), max_line_length: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#168 + # source://rbi//lib/rbi/printer.rb#169 sig { params(v: ::RBI::Printer).void } def print_blank_line_before(v); end - # source://rbi//lib/rbi/model.rb#32 + # source://rbi//lib/rbi/model.rb#33 sig { params(node: ::RBI::Node).void } def replace(node); end - # source://rbi//lib/rbi/printer.rb#161 + # source://rbi//lib/rbi/printer.rb#162 sig { params(indent: ::Integer, print_locs: T::Boolean, max_line_length: T.nilable(::Integer)).returns(::String) } def string(indent: T.unsafe(nil), print_locs: T.unsafe(nil), max_line_length: T.unsafe(nil)); end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#79 +# source://rbi//lib/rbi/model.rb#83 class RBI::NodeWithComments < ::RBI::Node abstract! - # source://rbi//lib/rbi/model.rb#89 + # source://rbi//lib/rbi/model.rb#93 sig { params(loc: T.nilable(::RBI::Loc), comments: T::Array[::RBI::Comment]).void } def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/model.rb#95 + # source://rbi//lib/rbi/model.rb#99 sig { returns(T::Array[::String]) } def annotations; end - # source://rbi//lib/rbi/model.rb#86 + # source://rbi//lib/rbi/model.rb#90 sig { returns(T::Array[::RBI::Comment]) } def comments; end # @return [Array] # - # source://rbi//lib/rbi/model.rb#86 + # source://rbi//lib/rbi/model.rb#90 def comments=(_arg0); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#306 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#311 sig { override.params(other: ::RBI::Node).void } def merge_with(other); end - # source://rbi//lib/rbi/printer.rb#186 + # source://rbi//lib/rbi/printer.rb#188 sig { override.returns(T::Boolean) } def oneline?; end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end -# source://rbi//lib/rbi/model.rb#593 +# source://rbi//lib/rbi/model.rb#601 class RBI::OptParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#608 + # source://rbi//lib/rbi/model.rb#616 sig do params( name: ::String, @@ -1332,57 +1271,52 @@ class RBI::OptParam < ::RBI::Param end def initialize(name, value, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#615 + # source://rbi//lib/rbi/model.rb#623 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#466 + # source://rbi//lib/rbi/printer.rb#468 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#471 + # source://rbi//lib/rbi/printer.rb#473 sig { override.params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#597 + # source://rbi//lib/rbi/model.rb#605 sig { returns(::String) } def value; end end # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#544 +# source://rbi//lib/rbi/model.rb#552 class RBI::Param < ::RBI::NodeWithComments abstract! - # source://rbi//lib/rbi/model.rb#560 + # source://rbi//lib/rbi/model.rb#568 sig { params(name: ::String, loc: T.nilable(::RBI::Loc), comments: T::Array[::RBI::Comment]).void } def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#444 + # source://rbi//lib/rbi/printer.rb#446 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#457 + # source://rbi//lib/rbi/printer.rb#459 sig { returns(T::Array[::String]) } def comments_lines; end - # source://rbi//lib/rbi/model.rb#551 + # source://rbi//lib/rbi/model.rb#559 sig { returns(::String) } def name; end - # source://rbi//lib/rbi/printer.rb#449 + # source://rbi//lib/rbi/printer.rb#451 sig { params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#566 + # source://rbi//lib/rbi/model.rb#574 sig { override.returns(::String) } def to_s; end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end # source://rbi//lib/rbi/parser.rb#7 @@ -1402,34 +1336,34 @@ class RBI::Parser sig { void } def initialize; end - # source://rbi//lib/rbi/parser.rb#97 + # source://rbi//lib/rbi/parser.rb#101 sig { params(path: ::String).returns(::RBI::Tree) } def parse_file(path); end - # source://rbi//lib/rbi/parser.rb#86 + # source://rbi//lib/rbi/parser.rb#96 sig { params(string: ::String).returns(::RBI::Tree) } def parse_string(string); end private - # source://rbi//lib/rbi/parser.rb#104 + # source://rbi//lib/rbi/parser.rb#108 sig { params(content: ::String, file: ::String).returns(::RBI::Tree) } def parse(content, file:); end class << self - # source://rbi//lib/rbi/parser.rb#75 + # source://rbi//lib/rbi/parser.rb#78 sig { params(path: ::String).returns(::RBI::Tree) } def parse_file(path); end - # source://rbi//lib/rbi/parser.rb#80 + # source://rbi//lib/rbi/parser.rb#83 sig { params(paths: T::Array[::String]).returns(T::Array[::RBI::Tree]) } def parse_files(paths); end - # source://rbi//lib/rbi/parser.rb#70 + # source://rbi//lib/rbi/parser.rb#73 sig { params(string: ::String).returns(::RBI::Tree) } def parse_string(string); end - # source://rbi//lib/rbi/parser.rb#91 + # source://rbi//lib/rbi/parser.rb#89 sig { params(strings: T::Array[::String]).returns(T::Array[::RBI::Tree]) } def parse_strings(strings); end end @@ -1517,7 +1451,7 @@ class RBI::Printer < ::RBI::Visitor sig { override.params(node: T.nilable(::RBI::Node)).void } def visit(node); end - # source://rbi//lib/rbi/printer.rb#89 + # source://rbi//lib/rbi/printer.rb#90 sig { override.params(nodes: T::Array[::RBI::Node]).void } def visit_all(nodes); end @@ -1526,9 +1460,9 @@ class RBI::Printer < ::RBI::Visitor def visit_file(file); end end -# source://rbi//lib/rbi/model.rb#901 +# source://rbi//lib/rbi/model.rb#909 class RBI::Private < ::RBI::Visibility - # source://rbi//lib/rbi/model.rb#911 + # source://rbi//lib/rbi/model.rb#919 sig do params( loc: T.nilable(::RBI::Loc), @@ -1539,9 +1473,9 @@ class RBI::Private < ::RBI::Visibility def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#885 +# source://rbi//lib/rbi/model.rb#893 class RBI::Protected < ::RBI::Visibility - # source://rbi//lib/rbi/model.rb#895 + # source://rbi//lib/rbi/model.rb#903 sig do params( loc: T.nilable(::RBI::Loc), @@ -1552,9 +1486,9 @@ class RBI::Protected < ::RBI::Visibility def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#869 +# source://rbi//lib/rbi/model.rb#877 class RBI::Public < ::RBI::Visibility - # source://rbi//lib/rbi/model.rb#879 + # source://rbi//lib/rbi/model.rb#887 sig do params( loc: T.nilable(::RBI::Loc), @@ -1565,9 +1499,9 @@ class RBI::Public < ::RBI::Visibility def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#571 +# source://rbi//lib/rbi/model.rb#579 class RBI::ReqParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#582 + # source://rbi//lib/rbi/model.rb#590 sig do params( name: ::String, @@ -1578,39 +1512,39 @@ class RBI::ReqParam < ::RBI::Param end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#588 + # source://rbi//lib/rbi/model.rb#596 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end end -# source://rbi//lib/rbi/model.rb#1368 +# source://rbi//lib/rbi/model.rb#1378 class RBI::RequiresAncestor < ::RBI::NodeWithComments include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#1381 + # source://rbi//lib/rbi/model.rb#1391 sig { params(name: ::String, loc: T.nilable(::RBI::Loc), comments: T::Array[::RBI::Comment]).void } def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#868 + # source://rbi//lib/rbi/printer.rb#870 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/index.rb#159 + # source://rbi//lib/rbi/index.rb#163 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#1372 + # source://rbi//lib/rbi/model.rb#1382 sig { returns(::String) } def name; end - # source://rbi//lib/rbi/model.rb#1387 + # source://rbi//lib/rbi/model.rb#1397 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#620 +# source://rbi//lib/rbi/model.rb#628 class RBI::RestParam < ::RBI::Param - # source://rbi//lib/rbi/model.rb#631 + # source://rbi//lib/rbi/model.rb#639 sig do params( name: ::String, @@ -1621,19 +1555,19 @@ class RBI::RestParam < ::RBI::Param end def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#642 + # source://rbi//lib/rbi/model.rb#650 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#481 + # source://rbi//lib/rbi/printer.rb#483 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#486 + # source://rbi//lib/rbi/printer.rb#488 sig { override.params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end - # source://rbi//lib/rbi/model.rb#637 + # source://rbi//lib/rbi/model.rb#645 sig { override.returns(::String) } def to_s; end end @@ -1682,7 +1616,7 @@ class RBI::Rewriters::Annotate < ::RBI::Visitor sig { params(node: ::RBI::NodeWithComments).void } def annotate_node(node); end - # source://rbi//lib/rbi/rewriters/annotate.rb#37 + # source://rbi//lib/rbi/rewriters/annotate.rb#38 sig { params(node: ::RBI::Node).returns(T::Boolean) } def root?(node); end end @@ -1747,20 +1681,20 @@ end # # source://rbi//lib/rbi/rewriters/merge_trees.rb#39 class RBI::Rewriters::Merge - # source://rbi//lib/rbi/rewriters/merge_trees.rb#66 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#70 sig { params(left_name: ::String, right_name: ::String, keep: ::RBI::Rewriters::Merge::Keep).void } def initialize(left_name: T.unsafe(nil), right_name: T.unsafe(nil), keep: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#75 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#79 sig { params(tree: ::RBI::Tree).void } def merge(tree); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#63 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#67 sig { returns(::RBI::MergeTree) } def tree; end class << self - # source://rbi//lib/rbi/rewriters/merge_trees.rb#51 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#54 sig do params( left: ::RBI::Tree, @@ -1776,19 +1710,19 @@ end # Used for logging / error displaying purpose # -# source://rbi//lib/rbi/rewriters/merge_trees.rb#82 +# source://rbi//lib/rbi/rewriters/merge_trees.rb#86 class RBI::Rewriters::Merge::Conflict < ::T::Struct const :left, ::RBI::Node const :right, ::RBI::Node const :left_name, ::String const :right_name, ::String - # source://rbi//lib/rbi/rewriters/merge_trees.rb#91 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#95 sig { returns(::String) } def to_s; end class << self - # source://sorbet-runtime/0.5.10875/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.10978/lib/types/struct.rb#13 def inherited(s); end end end @@ -1824,19 +1758,19 @@ end # end # ~~~ # -# source://rbi//lib/rbi/rewriters/merge_trees.rb#241 +# source://rbi//lib/rbi/rewriters/merge_trees.rb#245 class RBI::Rewriters::Merge::ConflictTreeMerger < ::RBI::Visitor - # source://rbi//lib/rbi/rewriters/merge_trees.rb#243 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#247 sig { override.params(node: T.nilable(::RBI::Node)).void } def visit(node); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#248 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#252 sig { override.params(nodes: T::Array[::RBI::Node]).void } def visit_all(nodes); end private - # source://rbi//lib/rbi/rewriters/merge_trees.rb#269 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#273 sig { params(left: ::RBI::Tree, right: ::RBI::Tree).void } def merge_conflict_trees(left, right); end end @@ -1850,9 +1784,9 @@ class RBI::Rewriters::Merge::Keep < ::T::Enum end end -# source://rbi//lib/rbi/rewriters/merge_trees.rb#96 +# source://rbi//lib/rbi/rewriters/merge_trees.rb#100 class RBI::Rewriters::Merge::TreeMerger < ::RBI::Visitor - # source://rbi//lib/rbi/rewriters/merge_trees.rb#103 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#107 sig do params( output: ::RBI::Tree, @@ -1863,33 +1797,33 @@ class RBI::Rewriters::Merge::TreeMerger < ::RBI::Visitor end def initialize(output, left_name: T.unsafe(nil), right_name: T.unsafe(nil), keep: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#100 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#104 sig { returns(T::Array[::RBI::Rewriters::Merge::Conflict]) } def conflicts; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#115 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#119 sig { override.params(node: T.nilable(::RBI::Node)).void } def visit(node); end private - # source://rbi//lib/rbi/rewriters/merge_trees.rb#164 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#168 sig { returns(::RBI::Tree) } def current_scope; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#181 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#185 sig { params(left: ::RBI::Scope, right: ::RBI::Scope).void } def make_conflict_scope(left, right); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#188 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#192 sig { params(left: ::RBI::Node, right: ::RBI::Node).void } def make_conflict_tree(left, right); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#169 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#173 sig { params(node: ::RBI::Node).returns(T.nilable(::RBI::Node)) } def previous_definition(node); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#200 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#204 sig { params(left: ::RBI::Scope, right: ::RBI::Scope).returns(::RBI::Scope) } def replace_scope_header(left, right); end end @@ -1953,38 +1887,38 @@ end # # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#48 class RBI::Rewriters::RemoveKnownDefinitions < ::RBI::Visitor - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#67 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#55 sig { params(index: ::RBI::Index).void } def initialize(index); end - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#64 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#52 sig { returns(T::Array[::RBI::Rewriters::RemoveKnownDefinitions::Operation]) } def operations; end - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#79 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#83 sig { override.params(node: T.nilable(::RBI::Node)).void } def visit(node); end - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#74 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#78 sig { params(nodes: T::Array[::RBI::Node]).void } def visit_all(nodes); end private - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#107 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#111 sig { params(node: ::RBI::Node, previous: ::RBI::Node).returns(T::Boolean) } def can_delete_node?(node, previous); end - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#125 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#129 sig { params(node: ::RBI::Node, previous: ::RBI::Node).void } def delete_node(node, previous); end - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#98 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#102 sig { params(node: ::RBI::Indexable).returns(T.nilable(::RBI::Node)) } def previous_definition_for(node); end class << self - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#57 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#70 sig do params( tree: ::RBI::Tree, @@ -1995,17 +1929,17 @@ class RBI::Rewriters::RemoveKnownDefinitions < ::RBI::Visitor end end -# source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#130 +# source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#134 class RBI::Rewriters::RemoveKnownDefinitions::Operation < ::T::Struct const :deleted_node, ::RBI::Node const :duplicate_of, ::RBI::Node - # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#137 + # source://rbi//lib/rbi/rewriters/remove_known_definitions.rb#141 sig { returns(::String) } def to_s; end class << self - # source://sorbet-runtime/0.5.10875/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.10978/lib/types/struct.rb#13 def inherited(s); end end end @@ -2018,19 +1952,19 @@ class RBI::Rewriters::SortNodes < ::RBI::Visitor private - # source://rbi//lib/rbi/rewriters/sort_nodes.rb#61 + # source://rbi//lib/rbi/rewriters/sort_nodes.rb#73 sig { params(kind: ::RBI::Group::Kind).returns(::Integer) } def group_rank(kind); end - # source://rbi//lib/rbi/rewriters/sort_nodes.rb#82 + # source://rbi//lib/rbi/rewriters/sort_nodes.rb#94 sig { params(node: ::RBI::Node).returns(T.nilable(::String)) } def node_name(node); end - # source://rbi//lib/rbi/rewriters/sort_nodes.rb#33 + # source://rbi//lib/rbi/rewriters/sort_nodes.rb#45 sig { params(node: ::RBI::Node).returns(::Integer) } def node_rank(node); end - # source://rbi//lib/rbi/rewriters/sort_nodes.rb#94 + # source://rbi//lib/rbi/rewriters/sort_nodes.rb#106 sig { params(node: ::RBI::Node).void } def sort_node_names!(node); end end @@ -2039,50 +1973,45 @@ end # # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#172 +# source://rbi//lib/rbi/model.rb#176 class RBI::Scope < ::RBI::Tree include ::RBI::Indexable abstract! - # source://rbi//lib/rbi/printer.rb#240 + # source://rbi//lib/rbi/printer.rb#242 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end # Duplicate `self` scope without its body # - # source://rbi//lib/rbi/rewriters/merge_trees.rb#350 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#356 sig { returns(T.self_type) } def dup_empty; end # @abstract # - # source://rbi//lib/rbi/model.rb#178 + # source://rbi//lib/rbi/model.rb#182 sig { abstract.returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/index.rb#89 + # source://rbi//lib/rbi/index.rb#93 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/printer.rb#254 + # source://rbi//lib/rbi/printer.rb#256 sig { params(v: ::RBI::Printer).void } def print_body(v); end # @abstract # - # source://rbi//lib/rbi/printer.rb#251 + # source://rbi//lib/rbi/printer.rb#253 sig { abstract.params(v: ::RBI::Printer).void } def print_header(v); end - # source://rbi//lib/rbi/model.rb#181 + # source://rbi//lib/rbi/model.rb#185 sig { override.returns(::String) } def to_s; end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end # A conflict between two scope headers @@ -2098,37 +2027,37 @@ end # end # ~~~ # -# source://rbi//lib/rbi/rewriters/merge_trees.rb#617 +# source://rbi//lib/rbi/rewriters/merge_trees.rb#628 class RBI::ScopeConflict < ::RBI::Tree - # source://rbi//lib/rbi/rewriters/merge_trees.rb#631 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#642 sig { params(left: ::RBI::Scope, right: ::RBI::Scope, left_name: ::String, right_name: ::String).void } def initialize(left:, right:, left_name: T.unsafe(nil), right_name: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#640 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#651 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#621 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#632 sig { returns(::RBI::Scope) } def left; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#656 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#667 sig { override.returns(T::Boolean) } def oneline?; end # @return [Scope] # - # source://rbi//lib/rbi/rewriters/merge_trees.rb#621 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#632 def right; end end # Sends # -# source://rbi//lib/rbi/model.rb#919 +# source://rbi//lib/rbi/model.rb#927 class RBI::Send < ::RBI::NodeWithComments include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#937 + # source://rbi//lib/rbi/model.rb#945 sig do params( method: ::String, @@ -2140,44 +2069,44 @@ class RBI::Send < ::RBI::NodeWithComments end def initialize(method, args = T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#945 + # source://rbi//lib/rbi/model.rb#953 sig { params(arg: ::RBI::Arg).void } def <<(arg); end - # source://rbi//lib/rbi/model.rb#950 + # source://rbi//lib/rbi/model.rb#958 sig { params(other: T.nilable(::Object)).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#590 + # source://rbi//lib/rbi/printer.rb#592 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#926 + # source://rbi//lib/rbi/model.rb#934 sig { returns(T::Array[::RBI::Arg]) } def args; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#519 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#529 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/index.rb#179 + # source://rbi//lib/rbi/index.rb#193 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#923 + # source://rbi//lib/rbi/model.rb#931 sig { returns(::String) } def method; end - # source://rbi//lib/rbi/model.rb#955 + # source://rbi//lib/rbi/model.rb#963 sig { returns(::String) } def to_s; end end # Sorbet's sigs # -# source://rbi//lib/rbi/model.rb#1019 +# source://rbi//lib/rbi/model.rb#1027 class RBI::Sig < ::RBI::Node - # source://rbi//lib/rbi/model.rb#1051 + # source://rbi//lib/rbi/model.rb#1059 sig do params( params: T::Array[::RBI::SigParam], @@ -2194,139 +2123,134 @@ class RBI::Sig < ::RBI::Node end def initialize(params: T.unsafe(nil), return_type: T.unsafe(nil), is_abstract: T.unsafe(nil), is_override: T.unsafe(nil), is_overridable: T.unsafe(nil), is_final: T.unsafe(nil), type_params: T.unsafe(nil), checked: T.unsafe(nil), loc: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#1076 + # source://rbi//lib/rbi/model.rb#1084 sig { params(param: ::RBI::SigParam).void } def <<(param); end - # source://rbi//lib/rbi/model.rb#1081 + # source://rbi//lib/rbi/model.rb#1089 sig { params(other: ::Object).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#631 + # source://rbi//lib/rbi/printer.rb#633 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#1035 + # source://rbi//lib/rbi/model.rb#1043 sig { returns(T.nilable(::Symbol)) } def checked; end # @return [Symbol, nil] # - # source://rbi//lib/rbi/model.rb#1035 + # source://rbi//lib/rbi/model.rb#1043 def checked=(_arg0); end - # source://rbi//lib/rbi/printer.rb#654 + # source://rbi//lib/rbi/printer.rb#656 sig { returns(T::Boolean) } def inline_params?; end - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 sig { returns(T::Boolean) } def is_abstract; end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_abstract=(_arg0); end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_final; end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_final=(_arg0); end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_overridable; end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_overridable=(_arg0); end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_override; end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#1029 + # source://rbi//lib/rbi/model.rb#1037 def is_override=(_arg0); end - # source://rbi//lib/rbi/printer.rb#649 + # source://rbi//lib/rbi/printer.rb#651 sig { override.returns(T::Boolean) } def oneline?; end - # source://rbi//lib/rbi/model.rb#1023 + # source://rbi//lib/rbi/model.rb#1031 sig { returns(T::Array[::RBI::SigParam]) } def params; end - # source://rbi//lib/rbi/model.rb#1026 + # source://rbi//lib/rbi/model.rb#1034 sig { returns(T.nilable(::String)) } def return_type; end # @return [String, nil] # - # source://rbi//lib/rbi/model.rb#1026 + # source://rbi//lib/rbi/model.rb#1034 def return_type=(_arg0); end - # source://rbi//lib/rbi/model.rb#1032 + # source://rbi//lib/rbi/model.rb#1040 sig { returns(T::Array[::String]) } def type_params; end private - # source://rbi//lib/rbi/printer.rb#696 + # source://rbi//lib/rbi/printer.rb#698 sig { params(v: ::RBI::Printer).void } def print_as_block(v); end - # source://rbi//lib/rbi/printer.rb#672 + # source://rbi//lib/rbi/printer.rb#674 sig { params(v: ::RBI::Printer).void } def print_as_line(v); end - # source://rbi//lib/rbi/printer.rb#661 + # source://rbi//lib/rbi/printer.rb#663 sig { returns(T::Array[::String]) } def sig_modifiers; end end -# source://rbi//lib/rbi/parser.rb#635 +# source://rbi//lib/rbi/parser.rb#668 class RBI::SigBuilder < ::RBI::ASTVisitor - # source://rbi//lib/rbi/parser.rb#649 + # source://rbi//lib/rbi/parser.rb#675 sig { void } def initialize; end - # source://rbi//lib/rbi/parser.rb#646 + # source://rbi//lib/rbi/parser.rb#672 sig { returns(::RBI::Sig) } def current; end - # @return [Sig] - # - # source://rbi//lib/rbi/parser.rb#646 - def current=(_arg0); end - - # source://rbi//lib/rbi/parser.rb#655 + # source://rbi//lib/rbi/parser.rb#692 sig { override.params(node: T.nilable(::AST::Node)).void } def visit(node); end - # source://rbi//lib/rbi/parser.rb#664 + # source://rbi//lib/rbi/parser.rb#702 sig { params(node: ::AST::Node).void } def visit_send(node); end class << self - # source://rbi//lib/rbi/parser.rb#639 + # source://rbi//lib/rbi/parser.rb#684 sig { params(node: ::AST::Node).returns(::RBI::Sig) } def build(node); end end end -# source://rbi//lib/rbi/model.rb#1089 +# source://rbi//lib/rbi/model.rb#1098 class RBI::SigParam < ::RBI::NodeWithComments - # source://rbi//lib/rbi/model.rb#1104 + # source://rbi//lib/rbi/model.rb#1113 sig do params( name: ::String, @@ -2338,35 +2262,35 @@ class RBI::SigParam < ::RBI::NodeWithComments end def initialize(name, type, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#1112 + # source://rbi//lib/rbi/model.rb#1121 sig { params(other: ::Object).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#749 + # source://rbi//lib/rbi/printer.rb#751 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#762 + # source://rbi//lib/rbi/printer.rb#764 sig { returns(T::Array[::String]) } def comments_lines; end - # source://rbi//lib/rbi/model.rb#1093 + # source://rbi//lib/rbi/model.rb#1102 sig { returns(::String) } def name; end - # source://rbi//lib/rbi/printer.rb#754 + # source://rbi//lib/rbi/printer.rb#756 sig { params(v: ::RBI::Printer, last: T::Boolean).void } def print_comment_leading_space(v, last:); end # @return [String] # - # source://rbi//lib/rbi/model.rb#1093 + # source://rbi//lib/rbi/model.rb#1102 def type; end end -# source://rbi//lib/rbi/model.rb#245 +# source://rbi//lib/rbi/model.rb#251 class RBI::SingletonClass < ::RBI::Scope - # source://rbi//lib/rbi/model.rb#255 + # source://rbi//lib/rbi/model.rb#261 sig do params( loc: T.nilable(::RBI::Loc), @@ -2376,18 +2300,18 @@ class RBI::SingletonClass < ::RBI::Scope end def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#261 + # source://rbi//lib/rbi/model.rb#267 sig { override.returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/printer.rb#319 + # source://rbi//lib/rbi/printer.rb#321 sig { override.params(v: ::RBI::Printer).void } def print_header(v); end end -# source://rbi//lib/rbi/model.rb#266 +# source://rbi//lib/rbi/model.rb#272 class RBI::Struct < ::RBI::Scope - # source://rbi//lib/rbi/model.rb#288 + # source://rbi//lib/rbi/model.rb#294 sig do params( name: ::String, @@ -2400,51 +2324,51 @@ class RBI::Struct < ::RBI::Scope end def initialize(name, members: T.unsafe(nil), keyword_init: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#388 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#394 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#297 + # source://rbi//lib/rbi/model.rb#303 sig { override.returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/model.rb#276 + # source://rbi//lib/rbi/model.rb#282 sig { returns(T::Boolean) } def keyword_init; end # @return [Boolean] # - # source://rbi//lib/rbi/model.rb#276 + # source://rbi//lib/rbi/model.rb#282 def keyword_init=(_arg0); end - # source://rbi//lib/rbi/model.rb#273 + # source://rbi//lib/rbi/model.rb#279 sig { returns(T::Array[::Symbol]) } def members; end # @return [Array] # - # source://rbi//lib/rbi/model.rb#273 + # source://rbi//lib/rbi/model.rb#279 def members=(_arg0); end - # source://rbi//lib/rbi/model.rb#270 + # source://rbi//lib/rbi/model.rb#276 sig { returns(::String) } def name; end # @return [String] # - # source://rbi//lib/rbi/model.rb#270 + # source://rbi//lib/rbi/model.rb#276 def name=(_arg0); end - # source://rbi//lib/rbi/printer.rb#298 + # source://rbi//lib/rbi/printer.rb#300 sig { override.params(v: ::RBI::Printer).void } def print_header(v); end end # Sorbet's T::Enum # -# source://rbi//lib/rbi/model.rb#1230 +# source://rbi//lib/rbi/model.rb#1239 class RBI::TEnum < ::RBI::Class - # source://rbi//lib/rbi/model.rb#1241 + # source://rbi//lib/rbi/model.rb#1250 sig do params( name: ::String, @@ -2456,11 +2380,11 @@ class RBI::TEnum < ::RBI::Class def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#1247 +# source://rbi//lib/rbi/model.rb#1256 class RBI::TEnumBlock < ::RBI::NodeWithComments include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#1261 + # source://rbi//lib/rbi/model.rb#1270 sig do params( names: T::Array[::String], @@ -2471,40 +2395,40 @@ class RBI::TEnumBlock < ::RBI::NodeWithComments end def initialize(names = T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#1273 + # source://rbi//lib/rbi/model.rb#1282 sig { params(name: ::String).void } def <<(name); end - # source://rbi//lib/rbi/printer.rb#793 + # source://rbi//lib/rbi/printer.rb#795 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#1268 + # source://rbi//lib/rbi/model.rb#1277 sig { returns(T::Boolean) } def empty?; end - # source://rbi//lib/rbi/index.rb#209 + # source://rbi//lib/rbi/index.rb#223 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#546 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#556 sig { override.params(other: ::RBI::Node).void } def merge_with(other); end - # source://rbi//lib/rbi/model.rb#1251 + # source://rbi//lib/rbi/model.rb#1260 sig { returns(T::Array[::String]) } def names; end - # source://rbi//lib/rbi/model.rb#1278 + # source://rbi//lib/rbi/model.rb#1287 sig { override.returns(::String) } def to_s; end end # Sorbet's T::Struct # -# source://rbi//lib/rbi/model.rb#1119 +# source://rbi//lib/rbi/model.rb#1128 class RBI::TStruct < ::RBI::Class - # source://rbi//lib/rbi/model.rb#1130 + # source://rbi//lib/rbi/model.rb#1139 sig do params( name: ::String, @@ -2516,11 +2440,11 @@ class RBI::TStruct < ::RBI::Class def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#1168 +# source://rbi//lib/rbi/model.rb#1177 class RBI::TStructConst < ::RBI::TStructField include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#1181 + # source://rbi//lib/rbi/model.rb#1190 sig do params( name: ::String, @@ -2533,30 +2457,30 @@ class RBI::TStructConst < ::RBI::TStructField end def initialize(name, type, default: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#537 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#547 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#1187 + # source://rbi//lib/rbi/model.rb#1196 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/index.rb#189 + # source://rbi//lib/rbi/index.rb#203 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#1193 + # source://rbi//lib/rbi/model.rb#1202 sig { override.returns(::String) } def to_s; end end # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#1136 +# source://rbi//lib/rbi/model.rb#1145 class RBI::TStructField < ::RBI::NodeWithComments abstract! - # source://rbi//lib/rbi/model.rb#1157 + # source://rbi//lib/rbi/model.rb#1166 sig do params( name: ::String, @@ -2568,59 +2492,54 @@ class RBI::TStructField < ::RBI::NodeWithComments end def initialize(name, type, default: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/printer.rb#771 + # source://rbi//lib/rbi/printer.rb#773 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#528 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#538 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#1146 + # source://rbi//lib/rbi/model.rb#1155 sig { returns(T.nilable(::String)) } def default; end # @return [String, nil] # - # source://rbi//lib/rbi/model.rb#1146 + # source://rbi//lib/rbi/model.rb#1155 def default=(_arg0); end # @abstract # - # source://rbi//lib/rbi/model.rb#1165 + # source://rbi//lib/rbi/model.rb#1174 sig { abstract.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/model.rb#1143 + # source://rbi//lib/rbi/model.rb#1152 sig { returns(::String) } def name; end # @return [String] # - # source://rbi//lib/rbi/model.rb#1143 + # source://rbi//lib/rbi/model.rb#1152 def name=(_arg0); end # @return [String] # - # source://rbi//lib/rbi/model.rb#1143 + # source://rbi//lib/rbi/model.rb#1152 def type; end # @return [String] # - # source://rbi//lib/rbi/model.rb#1143 + # source://rbi//lib/rbi/model.rb#1152 def type=(_arg0); end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end -# source://rbi//lib/rbi/model.rb#1198 +# source://rbi//lib/rbi/model.rb#1207 class RBI::TStructProp < ::RBI::TStructField include ::RBI::Indexable - # source://rbi//lib/rbi/model.rb#1211 + # source://rbi//lib/rbi/model.rb#1220 sig do params( name: ::String, @@ -2633,26 +2552,26 @@ class RBI::TStructProp < ::RBI::TStructField end def initialize(name, type, default: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#559 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#570 sig { override.params(other: ::RBI::Node).returns(T::Boolean) } def compatible_with?(other); end - # source://rbi//lib/rbi/model.rb#1217 + # source://rbi//lib/rbi/model.rb#1226 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end - # source://rbi//lib/rbi/index.rb#199 + # source://rbi//lib/rbi/index.rb#213 sig { override.returns(T::Array[::String]) } def index_ids; end - # source://rbi//lib/rbi/model.rb#1223 + # source://rbi//lib/rbi/model.rb#1232 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#102 +# source://rbi//lib/rbi/model.rb#106 class RBI::Tree < ::RBI::NodeWithComments - # source://rbi//lib/rbi/model.rb#115 + # source://rbi//lib/rbi/model.rb#119 sig do params( loc: T.nilable(::RBI::Loc), @@ -2662,11 +2581,11 @@ class RBI::Tree < ::RBI::NodeWithComments end def initialize(loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/model.rb#122 + # source://rbi//lib/rbi/model.rb#126 sig { params(node: ::RBI::Node).void } def <<(node); end - # source://rbi//lib/rbi/printer.rb#224 + # source://rbi//lib/rbi/printer.rb#226 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end @@ -2674,11 +2593,11 @@ class RBI::Tree < ::RBI::NodeWithComments sig { params(with_todo_comment: T::Boolean).void } def add_sig_templates!(with_todo_comment: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/annotate.rb#48 + # source://rbi//lib/rbi/rewriters/annotate.rb#49 sig { params(annotation: ::String, annotate_scopes: T::Boolean, annotate_properties: T::Boolean).void } def annotate!(annotation, annotate_scopes: T.unsafe(nil), annotate_properties: T.unsafe(nil)); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#38 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#38 sig do params( name: ::String, @@ -2688,19 +2607,19 @@ class RBI::Tree < ::RBI::NodeWithComments end def create_class(name, superclass_name: T.unsafe(nil), &block); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#45 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#45 sig { params(name: ::String, value: ::String).void } def create_constant(name, value:); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#55 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#55 sig { params(name: ::String).void } def create_extend(name); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#50 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#50 sig { params(name: ::String).void } def create_include(name); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#89 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#89 sig do params( name: ::String, @@ -2713,19 +2632,19 @@ class RBI::Tree < ::RBI::NodeWithComments end def create_method(name, parameters: T.unsafe(nil), return_type: T.unsafe(nil), class_method: T.unsafe(nil), visibility: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#60 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#60 sig { params(name: ::String).void } def create_mixes_in_class_methods(name); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#25 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#25 sig { params(name: ::String, block: T.nilable(T.proc.params(scope: ::RBI::Scope).void)).returns(::RBI::Scope) } def create_module(name, &block); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#9 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#9 sig { params(constant: ::Module, block: T.nilable(T.proc.params(scope: ::RBI::Scope).void)).returns(::RBI::Scope) } def create_path(constant, &block); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#74 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#74 sig do params( name: ::String, @@ -2738,11 +2657,11 @@ class RBI::Tree < ::RBI::NodeWithComments end def create_type_variable(name, type:, variance: T.unsafe(nil), fixed: T.unsafe(nil), upper: T.unsafe(nil), lower: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/deannotate.rb#40 + # source://rbi//lib/rbi/rewriters/deannotate.rb#41 sig { params(annotation: ::String).void } def deannotate!(annotation); end - # source://rbi//lib/rbi/model.rb#128 + # source://rbi//lib/rbi/model.rb#132 sig { returns(T::Boolean) } def empty?; end @@ -2750,11 +2669,11 @@ class RBI::Tree < ::RBI::NodeWithComments sig { void } def group_nodes!; end - # source://rbi//lib/rbi/index.rb#64 + # source://rbi//lib/rbi/index.rb#68 sig { returns(::RBI::Index) } def index; end - # source://rbi//lib/rbi/rewriters/merge_trees.rb#318 + # source://rbi//lib/rbi/rewriters/merge_trees.rb#324 sig do params( other: ::RBI::Tree, @@ -2765,40 +2684,40 @@ class RBI::Tree < ::RBI::NodeWithComments end def merge(other, left_name: T.unsafe(nil), right_name: T.unsafe(nil), keep: T.unsafe(nil)); end - # source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#45 + # source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#46 sig { void } def nest_non_public_methods!; end - # source://rbi//lib/rbi/rewriters/nest_singleton_methods.rb#35 + # source://rbi//lib/rbi/rewriters/nest_singleton_methods.rb#36 sig { void } def nest_singleton_methods!; end - # source://rbi//lib/rbi/model.rb#106 + # source://rbi//lib/rbi/model.rb#110 sig { returns(T::Array[::RBI::Node]) } def nodes; end - # source://rbi//lib/rbi/printer.rb#231 + # source://rbi//lib/rbi/printer.rb#233 sig { override.returns(T::Boolean) } def oneline?; end - # source://rbi//lib/rbi/rewriters/sort_nodes.rb#107 + # source://rbi//lib/rbi/rewriters/sort_nodes.rb#119 sig { void } def sort_nodes!; end private - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#116 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#116 sig { params(node: ::RBI::Node).returns(::RBI::Node) } def create_node(node); end - # source://tapioca/0.11.6/lib/tapioca/rbi_ext/model.rb#111 + # source://tapioca/0.11.8/lib/tapioca/rbi_ext/model.rb#111 sig { returns(T::Hash[::String, ::RBI::Node]) } def nodes_cache; end end -# source://rbi//lib/rbi/parser.rb#156 +# source://rbi//lib/rbi/parser.rb#160 class RBI::TreeBuilder < ::RBI::ASTVisitor - # source://rbi//lib/rbi/parser.rb#172 + # source://rbi//lib/rbi/parser.rb#176 sig do params( file: ::String, @@ -2808,112 +2727,122 @@ class RBI::TreeBuilder < ::RBI::ASTVisitor end def initialize(file:, comments: T.unsafe(nil), nodes_comments_assoc: T.unsafe(nil)); end - # source://rbi//lib/rbi/parser.rb#163 + # source://rbi//lib/rbi/parser.rb#167 sig { returns(T.nilable(::AST::Node)) } def last_node; end - # source://rbi//lib/rbi/parser.rb#187 + # source://rbi//lib/rbi/parser.rb#191 sig { void } def post_process; end - # source://rbi//lib/rbi/parser.rb#160 + # source://rbi//lib/rbi/parser.rb#164 sig { returns(::RBI::Tree) } def tree; end - # source://rbi//lib/rbi/parser.rb#193 + # source://rbi//lib/rbi/parser.rb#197 sig { override.params(node: T.nilable(::Object)).void } def visit(node); end private - # source://rbi//lib/rbi/parser.rb#546 + # source://rbi//lib/rbi/parser.rb#573 sig { void } def assoc_dangling_comments; end - # source://rbi//lib/rbi/parser.rb#527 + # source://rbi//lib/rbi/parser.rb#554 sig { returns(::RBI::Tree) } def current_scope; end - # source://rbi//lib/rbi/parser.rb#532 + # source://rbi//lib/rbi/parser.rb#559 sig { returns(T::Array[::RBI::Sig]) } def current_sigs; end - # source://rbi//lib/rbi/parser.rb#539 + # source://rbi//lib/rbi/parser.rb#566 sig { returns(T::Array[::RBI::Comment]) } def current_sigs_comments; end - # source://rbi//lib/rbi/parser.rb#516 + # source://rbi//lib/rbi/parser.rb#542 sig { params(node: ::AST::Node).returns(T::Array[::RBI::Comment]) } def node_comments(node); end - # source://rbi//lib/rbi/parser.rb#511 + # source://rbi//lib/rbi/parser.rb#537 sig { params(node: ::AST::Node).returns(::RBI::Loc) } def node_loc(node); end - # source://rbi//lib/rbi/parser.rb#402 + # source://rbi//lib/rbi/parser.rb#410 sig { params(node: ::AST::Node).returns(T.nilable(::RBI::Node)) } def parse_block(node); end - # source://rbi//lib/rbi/parser.rb#249 + # source://rbi//lib/rbi/parser.rb#254 sig { params(node: ::AST::Node).returns(::RBI::Node) } def parse_const_assign(node); end - # source://rbi//lib/rbi/parser.rb#263 + # source://rbi//lib/rbi/parser.rb#270 sig { params(node: ::AST::Node).returns(::RBI::Method) } def parse_def(node); end - # source://rbi//lib/rbi/parser.rb#486 + # source://rbi//lib/rbi/parser.rb#512 sig { params(node: ::AST::Node).returns(::RBI::TEnumBlock) } def parse_enum(node); end - # source://rbi//lib/rbi/parser.rb#290 + # source://rbi//lib/rbi/parser.rb#297 sig { params(node: ::AST::Node).returns(::RBI::Param) } def parse_param(node); end - # source://rbi//lib/rbi/parser.rb#503 + # source://rbi//lib/rbi/parser.rb#529 sig { params(node: ::AST::Node).returns(::RBI::RequiresAncestor) } def parse_requires_ancestor(node); end - # source://rbi//lib/rbi/parser.rb#229 + # source://rbi//lib/rbi/parser.rb#234 sig { params(node: ::AST::Node).returns(::RBI::Scope) } def parse_scope(node); end - # source://rbi//lib/rbi/parser.rb#318 + # source://rbi//lib/rbi/parser.rb#325 sig { params(node: ::AST::Node).returns(T.nilable(::RBI::Node)) } def parse_send(node); end - # source://rbi//lib/rbi/parser.rb#385 + # source://rbi//lib/rbi/parser.rb#393 sig { params(node: ::AST::Node).returns(T::Array[::RBI::Arg]) } def parse_send_args(node); end - # source://rbi//lib/rbi/parser.rb#479 + # source://rbi//lib/rbi/parser.rb#505 sig { params(node: ::AST::Node).returns(::RBI::Sig) } def parse_sig(node); end - # source://rbi//lib/rbi/parser.rb#424 + # source://rbi//lib/rbi/parser.rb#432 sig { params(node: ::AST::Node).returns(::RBI::Struct) } def parse_struct(node); end - # source://rbi//lib/rbi/parser.rb#463 + # source://rbi//lib/rbi/parser.rb#489 sig { params(node: ::AST::Node).returns([::String, ::String, T.nilable(::String)]) } def parse_tstruct_prop(node); end - # source://rbi//lib/rbi/parser.rb#564 + # source://rbi//lib/rbi/parser.rb#478 + sig { params(node: ::AST::Node).returns(::RBI::TypeMember) } + def parse_type_variable(node); end + + # source://rbi//lib/rbi/parser.rb#591 sig { void } def separate_header_comments; end - # source://rbi//lib/rbi/parser.rb#586 + # source://rbi//lib/rbi/parser.rb#613 sig { void } def set_root_tree_loc; end - # source://rbi//lib/rbi/parser.rb#418 + # source://rbi//lib/rbi/parser.rb#426 sig { params(node: ::AST::Node).returns(T::Boolean) } def struct_definition?(node); end + + # source://rbi//lib/rbi/parser.rb#471 + sig { params(node: ::AST::Node).returns(T::Boolean) } + def type_variable_definition?(node); end end -# source://rbi//lib/rbi/model.rb#1311 +# source://rbi//lib/rbi/model.rb#1320 class RBI::TypeMember < ::RBI::NodeWithComments - # source://rbi//lib/rbi/model.rb#1326 + include ::RBI::Indexable + + # source://rbi//lib/rbi/model.rb#1335 sig do params( name: ::String, @@ -2925,25 +2854,29 @@ class RBI::TypeMember < ::RBI::NodeWithComments end def initialize(name, value, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end - # source://rbi//lib/rbi/printer.rb#810 + # source://rbi//lib/rbi/printer.rb#812 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#1334 + # source://rbi//lib/rbi/model.rb#1343 sig { returns(::String) } def fully_qualified_name; end - # source://rbi//lib/rbi/model.rb#1315 + # source://rbi//lib/rbi/index.rb#183 + sig { override.returns(T::Array[::String]) } + def index_ids; end + + # source://rbi//lib/rbi/model.rb#1324 sig { returns(::String) } def name; end - # source://rbi//lib/rbi/model.rb#1340 + # source://rbi//lib/rbi/model.rb#1350 sig { override.returns(::String) } def to_s; end # @return [String] # - # source://rbi//lib/rbi/model.rb#1315 + # source://rbi//lib/rbi/model.rb#1324 def value; end end @@ -2969,59 +2902,54 @@ RBI::VERSION = T.let(T.unsafe(nil), String) # # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#833 +# source://rbi//lib/rbi/model.rb#841 class RBI::Visibility < ::RBI::NodeWithComments abstract! - # source://rbi//lib/rbi/model.rb#843 + # source://rbi//lib/rbi/model.rb#851 sig { params(visibility: ::Symbol, loc: T.nilable(::RBI::Loc), comments: T::Array[::RBI::Comment]).void } def initialize(visibility, loc: T.unsafe(nil), comments: T.unsafe(nil)); end - # source://rbi//lib/rbi/model.rb#849 + # source://rbi//lib/rbi/model.rb#857 sig { params(other: ::RBI::Visibility).returns(T::Boolean) } def ==(other); end - # source://rbi//lib/rbi/printer.rb#577 + # source://rbi//lib/rbi/printer.rb#579 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/model.rb#864 + # source://rbi//lib/rbi/model.rb#872 sig { returns(T::Boolean) } def private?; end - # source://rbi//lib/rbi/model.rb#859 + # source://rbi//lib/rbi/model.rb#867 sig { returns(T::Boolean) } def protected?; end - # source://rbi//lib/rbi/model.rb#854 + # source://rbi//lib/rbi/model.rb#862 sig { returns(T::Boolean) } def public?; end - # source://rbi//lib/rbi/model.rb#840 + # source://rbi//lib/rbi/model.rb#848 sig { returns(::Symbol) } def visibility; end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end -# source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#51 +# source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#52 class RBI::VisibilityGroup < ::RBI::Tree - # source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#58 + # source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#59 sig { params(visibility: ::RBI::Visibility).void } def initialize(visibility); end - # source://rbi//lib/rbi/printer.rb#846 + # source://rbi//lib/rbi/printer.rb#848 sig { override.params(v: ::RBI::Printer).void } def accept_printer(v); end - # source://rbi//lib/rbi/printer.rb#859 + # source://rbi//lib/rbi/printer.rb#861 sig { override.returns(T::Boolean) } def oneline?; end - # source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#55 + # source://rbi//lib/rbi/rewriters/nest_non_public_methods.rb#56 sig { returns(::RBI::Visibility) } def visibility; end end @@ -3041,9 +2969,4 @@ class RBI::Visitor # source://rbi//lib/rbi/visitor.rb#15 sig { params(nodes: T::Array[::RBI::Node]).void } def visit_all(nodes); end - - class << self - # source://sorbet-runtime/0.5.10875/lib/types/private/abstract/declare.rb#37 - def new(*args, **_arg1, &blk); end - end end diff --git a/sorbet/rbi/gems/tzinfo@2.0.6.rbi b/sorbet/rbi/gems/tzinfo@2.0.6.rbi deleted file mode 100644 index 349290815..000000000 --- a/sorbet/rbi/gems/tzinfo@2.0.6.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `tzinfo` gem. -# Please instead update this file by running `bin/tapioca gem tzinfo`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/gems/zeitwerk@2.6.8.rbi b/sorbet/rbi/gems/zeitwerk@2.6.8.rbi deleted file mode 100644 index 5307e2aca..000000000 --- a/sorbet/rbi/gems/zeitwerk@2.6.8.rbi +++ /dev/null @@ -1,8 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `zeitwerk` gem. -# Please instead update this file by running `bin/tapioca gem zeitwerk`. - -# THIS IS AN EMPTY RBI FILE. -# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem diff --git a/sorbet/rbi/shims/rack.rbi b/sorbet/rbi/shims/rack.rbi new file mode 100644 index 000000000..8a56d33eb --- /dev/null +++ b/sorbet/rbi/shims/rack.rbi @@ -0,0 +1,5 @@ +# typed: true + +# We don't have Rack as a dependency, but YARD references one of its constants + +class Rack::Server; end diff --git a/sorbet/tapioca/config.yml b/sorbet/tapioca/config.yml index 886ae5870..f69d732b6 100644 --- a/sorbet/tapioca/config.yml +++ b/sorbet/tapioca/config.yml @@ -1,4 +1,6 @@ gem: + typed_overrides: + "psych": "false" # Add your `gem` command parameters here: # # exclude: From ef46ff6ac647e34052c528458e9ca2917ec8f0f2 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Thu, 24 Aug 2023 17:00:57 -0400 Subject: [PATCH 08/20] Allow definition and workspace symbol to return default gem symbols (#925) --- lib/ruby_lsp/requests/definition.rb | 9 +++++-- lib/ruby_lsp/requests/workspace_symbol.rb | 9 +++++-- test/requests/definition_expectations_test.rb | 26 +++++++++++++++++++ test/requests/workspace_symbol_test.rb | 7 +++++ 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/lib/ruby_lsp/requests/definition.rb b/lib/ruby_lsp/requests/definition.rb index a7675cffe..f2147c33a 100644 --- a/lib/ruby_lsp/requests/definition.rb +++ b/lib/ruby_lsp/requests/definition.rb @@ -117,10 +117,15 @@ def find_in_index(value) # If the project has Sorbet, then we only want to handle go to definition for constants defined in gems, as an # additional behavior on top of jumping to RBIs. Sorbet can already handle go to definition for all constants # in the project, even if the files are typed false - next if DependencyDetector::HAS_TYPECHECKER && bundle_path && !entry.file_path.start_with?(bundle_path) + file_path = entry.file_path + if DependencyDetector::HAS_TYPECHECKER && bundle_path && !file_path.start_with?(bundle_path) && + !file_path.start_with?(RbConfig::CONFIG["rubylibdir"]) + + next + end Interface::Location.new( - uri: URI::Generic.from_path(path: entry.file_path).to_s, + uri: URI::Generic.from_path(path: file_path).to_s, range: Interface::Range.new( start: Interface::Position.new(line: location.start_line - 1, character: location.start_column), end: Interface::Position.new(line: location.end_line - 1, character: location.end_column), diff --git a/lib/ruby_lsp/requests/workspace_symbol.rb b/lib/ruby_lsp/requests/workspace_symbol.rb index 63833c5ad..8b3822a3f 100644 --- a/lib/ruby_lsp/requests/workspace_symbol.rb +++ b/lib/ruby_lsp/requests/workspace_symbol.rb @@ -38,7 +38,12 @@ def run @index.fuzzy_search(@query).filter_map do |entry| # If the project is using Sorbet, we let Sorbet handle symbols defined inside the project itself and RBIs, but # we still return entries defined in gems to allow developers to jump directly to the source - next if DependencyDetector::HAS_TYPECHECKER && bundle_path && !entry.file_path.start_with?(bundle_path) + file_path = entry.file_path + if DependencyDetector::HAS_TYPECHECKER && bundle_path && !file_path.start_with?(bundle_path) && + !file_path.start_with?(RbConfig::CONFIG["rubylibdir"]) + + next + end kind = kind_for_entry(entry) loc = entry.location @@ -53,7 +58,7 @@ def run container_name: T.must(container).join("::"), kind: kind, location: Interface::Location.new( - uri: URI::Generic.from_path(path: entry.file_path).to_s, + uri: URI::Generic.from_path(path: file_path).to_s, range: Interface::Range.new( start: Interface::Position.new(line: loc.start_line - 1, character: loc.start_column), end: Interface::Position.new(line: loc.end_line - 1, character: loc.end_column), diff --git a/test/requests/definition_expectations_test.rb b/test/requests/definition_expectations_test.rb index 87fd5e540..970dcb9cc 100644 --- a/test/requests/definition_expectations_test.rb +++ b/test/requests/definition_expectations_test.rb @@ -49,4 +49,30 @@ def run_expectations(source) ensure T.must(message_queue).close end + + def test_jumping_to_default_gems + message_queue = Thread::Queue.new + position = { character: 0, line: 0 } + + path = "#{RbConfig::CONFIG["rubylibdir"]}/pathname.rb" + uri = URI::Generic.from_path(path: path) + + store = RubyLsp::Store.new + store.experimental_features = true + store.set(uri: URI("file:///folder/fake.rb"), source: <<~RUBY, version: 1) + Pathname + RUBY + + executor = RubyLsp::Executor.new(store, message_queue) + executor.instance_variable_get(:@index).index_single(T.must(uri.to_standardized_path)) + + response = executor.execute({ + method: "textDocument/definition", + params: { textDocument: { uri: "file:///folder/fake.rb" }, position: position }, + }).response + + refute_empty(response) + ensure + T.must(message_queue).close + end end diff --git a/test/requests/workspace_symbol_test.rb b/test/requests/workspace_symbol_test.rb index 1cdd595e1..90e9c312b 100644 --- a/test/requests/workspace_symbol_test.rb +++ b/test/requests/workspace_symbol_test.rb @@ -84,4 +84,11 @@ class Bar; end assert_equal(RubyLsp::Constant::SymbolKind::CLASS, T.must(result).kind) assert_equal("Foo", T.must(result).container_name) end + + def test_finds_default_gem_symbols + @index.index_single("#{RbConfig::CONFIG["rubylibdir"]}/pathname.rb") + + result = RubyLsp::Requests::WorkspaceSymbol.new("Pathname", @index).run + refute_empty(result) + end end From bbc51b8a6a79702728ca2841b8800c292bb718f7 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Fri, 25 Aug 2023 13:40:27 -0400 Subject: [PATCH 09/20] Push hover separator before extension results (#929) --- lib/ruby_lsp/requests/hover.rb | 2 +- test/requests/hover_expectations_test.rb | 25 ++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/ruby_lsp/requests/hover.rb b/lib/ruby_lsp/requests/hover.rb index 70359396a..d3d6e3a41 100644 --- a/lib/ruby_lsp/requests/hover.rb +++ b/lib/ruby_lsp/requests/hover.rb @@ -61,7 +61,7 @@ def merge_response!(other) if @response.nil? @response = other.response else - @response.contents.value << other_response.contents.value << "\n\n" + @response.contents.value << "\n\n" << other_response.contents.value end self diff --git a/test/requests/hover_expectations_test.rb b/test/requests/hover_expectations_test.rb index 4c78c5f9a..6aba22f8f 100644 --- a/test/requests/hover_expectations_test.rb +++ b/test/requests/hover_expectations_test.rb @@ -33,24 +33,33 @@ def run_expectations(source) end def test_hover_extensions + RubyLsp::DependencyDetector.const_set(:HAS_TYPECHECKER, false) message_queue = Thread::Queue.new create_hover_extension store = RubyLsp::Store.new - store.set(uri: URI("file:///fake.rb"), source: <<~RUBY, version: 1) + source = <<~RUBY + # Hello class Post - belongs_to :user end + + Post RUBY + uri = URI::Generic.from_path(path: "/fake.rb") + store.set(uri: uri, source: source, version: 1) + + executor = RubyLsp::Executor.new(store, message_queue) + executor.instance_variable_get(:@index).index_single(uri.to_standardized_path, source) - response = RubyLsp::Executor.new(store, message_queue).execute({ + response = executor.execute({ method: "textDocument/hover", - params: { textDocument: { uri: "file:///fake.rb" }, position: { line: 1, character: 2 } }, + params: { textDocument: { uri: "file:///fake.rb" }, position: { line: 4, character: 0 } }, }).response - assert_match("Method from middleware: belongs_to", response.contents.value) + assert_match("Hello\n\nHello from middleware: Post", response.contents.value) ensure RubyLsp::Extension.extensions.clear + RubyLsp::DependencyDetector.const_set(:HAS_TYPECHECKER, true) T.must(message_queue).close end @@ -70,14 +79,14 @@ def create_hover_listener(emitter, message_queue) def initialize(emitter, message_queue) super - emitter.register(self, :on_command) + emitter.register(self, :on_const) end - def on_command(node) + def on_const(node) T.bind(self, RubyLsp::Listener[T.untyped]) contents = RubyLsp::Interface::MarkupContent.new( kind: "markdown", - value: "Method from middleware: #{node.message.value}", + value: "Hello from middleware: #{node.value}", ) @response = RubyLsp::Interface::Hover.new(range: range_from_syntax_tree_node(node), contents: contents) end From 1781af7604813df1db38ba642fb0f4d16c39ec13 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Fri, 25 Aug 2023 13:42:26 -0400 Subject: [PATCH 10/20] Bump version to v0.9.0 --- Gemfile.lock | 2 +- VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 38b38eeda..2f40cff9c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - ruby-lsp (0.8.1) + ruby-lsp (0.9.0) language_server-protocol (~> 3.17.0) sorbet-runtime syntax_tree (>= 6.1.1, < 7) diff --git a/VERSION b/VERSION index 6f4eebdf6..ac39a106c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.1 +0.9.0 From b1fb949efda6ec449c23487ccbb8c4336fad4a88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 09:39:16 -0400 Subject: [PATCH 11/20] Bump sorbet-static-and-runtime from 0.5.10978 to 0.5.10987 (#934) Bumps [sorbet-static-and-runtime](https://github.com/sorbet/sorbet) from 0.5.10978 to 0.5.10987. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet-static-and-runtime dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2f40cff9c..11b777771 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -78,22 +78,22 @@ GEM rubocop (>= 0.90.0) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) - sorbet (0.5.10978) - sorbet-static (= 0.5.10978) - sorbet-runtime (0.5.10978) - sorbet-static (0.5.10978-universal-darwin-14) - sorbet-static (0.5.10978-universal-darwin-15) - sorbet-static (0.5.10978-universal-darwin-16) - sorbet-static (0.5.10978-universal-darwin-17) - sorbet-static (0.5.10978-universal-darwin-18) - sorbet-static (0.5.10978-universal-darwin-19) - sorbet-static (0.5.10978-universal-darwin-20) - sorbet-static (0.5.10978-universal-darwin-21) - sorbet-static (0.5.10978-universal-darwin-22) - sorbet-static (0.5.10978-x86_64-linux) - sorbet-static-and-runtime (0.5.10978) - sorbet (= 0.5.10978) - sorbet-runtime (= 0.5.10978) + sorbet (0.5.10987) + sorbet-static (= 0.5.10987) + sorbet-runtime (0.5.10987) + sorbet-static (0.5.10987-universal-darwin-14) + sorbet-static (0.5.10987-universal-darwin-15) + sorbet-static (0.5.10987-universal-darwin-16) + sorbet-static (0.5.10987-universal-darwin-17) + sorbet-static (0.5.10987-universal-darwin-18) + sorbet-static (0.5.10987-universal-darwin-19) + sorbet-static (0.5.10987-universal-darwin-20) + sorbet-static (0.5.10987-universal-darwin-21) + sorbet-static (0.5.10987-universal-darwin-22) + sorbet-static (0.5.10987-x86_64-linux) + sorbet-static-and-runtime (0.5.10987) + sorbet (= 0.5.10987) + sorbet-runtime (= 0.5.10987) spoom (1.2.2) erubi (>= 1.10.0) sorbet (>= 0.5.10187) From f9cf9afc7622a370e8a3c836aa90a01ce25d315e Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Mon, 28 Aug 2023 09:40:59 -0400 Subject: [PATCH 12/20] Use bundle check and only update every 4 hours (#933) --- lib/ruby_lsp/setup_bundler.rb | 18 +++++++++-- test/setup_bundler_test.rb | 60 ++++++++++++++++++++++++++++++----- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/lib/ruby_lsp/setup_bundler.rb b/lib/ruby_lsp/setup_bundler.rb index e2dcafe87..544e156e2 100644 --- a/lib/ruby_lsp/setup_bundler.rb +++ b/lib/ruby_lsp/setup_bundler.rb @@ -6,6 +6,7 @@ require "fileutils" require "pathname" require "digest" +require "time" # This file is a script that will configure a custom bundle for the Ruby LSP. The custom bundle allows developers to use # the Ruby LSP without including the gem in their application's Gemfile while at the same time giving us access to the @@ -17,6 +18,8 @@ class SetupBundler class BundleNotLocked < StandardError; end + FOUR_HOURS = T.let(4 * 60 * 60, Integer) + sig { params(project_path: String, branch: T.nilable(String)).void } def initialize(project_path, branch: nil) @project_path = project_path @@ -27,6 +30,7 @@ def initialize(project_path, branch: nil) @custom_gemfile = T.let(@custom_dir + "Gemfile", Pathname) @custom_lockfile = T.let(@custom_dir + "Gemfile.lock", Pathname) @lockfile_hash_path = T.let(@custom_dir + "main_lockfile_hash", Pathname) + @last_updated_path = T.let(@custom_dir + "last_updated", Pathname) # Regular bundle paths @gemfile = T.let( @@ -173,15 +177,16 @@ def run_bundle_install(bundle_gemfile = @gemfile) # custom `.ruby-lsp/Gemfile.lock` already exists and includes both gems command = +"" - if (@dependencies["ruby-lsp"] && @dependencies["debug"]) || - custom_bundle_dependencies["ruby-lsp"].nil? || custom_bundle_dependencies["debug"].nil? + if should_bundle_install? # Install gems using the custom bundle - command << "bundle install " + command << "bundle check || bundle install " else # If ruby-lsp or debug are not in the Gemfile, try to update them to the latest version command << "bundle update " command << "ruby-lsp " unless @dependencies["ruby-lsp"] command << "debug " unless @dependencies["debug"] + + @last_updated_path.write(Time.now.iso8601) end # Redirect stdout to stderr to prevent going into an infinite loop. The extension might confuse stdout output with @@ -193,5 +198,12 @@ def run_bundle_install(bundle_gemfile = @gemfile) system(env, command) [bundle_gemfile.to_s, expanded_path] end + + sig { returns(T::Boolean) } + def should_bundle_install? + (!@dependencies["ruby-lsp"].nil? && !@dependencies["debug"].nil?) || + custom_bundle_dependencies["ruby-lsp"].nil? || custom_bundle_dependencies["debug"].nil? || + (@last_updated_path.exist? && Time.parse(@last_updated_path.read) > (Time.now - FOUR_HOURS)) + end end end diff --git a/test/setup_bundler_test.rb b/test/setup_bundler_test.rb index 64019f14f..a20a93449 100644 --- a/test/setup_bundler_test.rb +++ b/test/setup_bundler_test.rb @@ -6,14 +6,14 @@ class SetupBundlerTest < Minitest::Test def test_does_nothing_if_both_ruby_lsp_and_debug_are_in_the_bundle - Object.any_instance.expects(:system).with(bundle_env, "bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env, "bundle check || bundle install 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({ "ruby-lsp" => true, "debug" => true }) run_script refute_path_exists(".ruby-lsp") end def test_removes_ruby_lsp_folder_if_both_gems_were_added_to_the_bundle - Object.any_instance.expects(:system).with(bundle_env, "bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env, "bundle check || bundle install 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({ "ruby-lsp" => true, "debug" => true }) FileUtils.mkdir(".ruby-lsp") run_script @@ -23,7 +23,7 @@ def test_removes_ruby_lsp_folder_if_both_gems_were_added_to_the_bundle end def test_creates_custom_bundle - Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle check || bundle install 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({}).at_least_once run_script @@ -75,7 +75,10 @@ def test_changing_lockfile_causes_custom_bundle_to_be_rebuilt # ruby-lsp is a part of the custom lockfile and would try to run `bundle update ruby-lsp`, which would fail. If # we evaluate lazily, then we only find dependencies after the lockfile was copied, and then run bundle install # instead, which re-locks and adds the ruby-lsp - Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle install 1>&2") + Object.any_instance.expects(:system).with( + bundle_env(".ruby-lsp/Gemfile"), + "bundle check || bundle install 1>&2", + ) Bundler.with_unbundled_env do run_script end @@ -120,9 +123,44 @@ def test_does_not_copy_gemfile_lock_when_not_modified end end + def test_does_only_updates_every_4_hours + Dir.mktmpdir do |dir| + Dir.chdir(dir) do + File.write(File.join(dir, "Gemfile"), <<~GEMFILE) + source "https://rubygems.org" + gem "rdoc" + GEMFILE + + capture_subprocess_io do + Bundler.with_unbundled_env do + # Run bundle install to generate the lockfile + system("bundle install") + + # Run the script once to generate a custom bundle + run_script + end + end + + File.write(File.join(dir, ".ruby-lsp", "last_updated"), (Time.now - 30 * 60).iso8601) + + capture_subprocess_io do + Object.any_instance.expects(:system).with( + bundle_env(".ruby-lsp/Gemfile"), + "bundle check || bundle install 1>&2", + ) + + Bundler.with_unbundled_env do + # Run the script again without having the lockfile modified + run_script + end + end + end + end + end + def test_uses_absolute_bundle_path_for_bundle_install Bundler.settings.set_global("path", "vendor/bundle") - Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle check || bundle install 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({}).at_least_once run_script(expected_path: File.expand_path("vendor/bundle", Dir.pwd)) ensure @@ -136,7 +174,10 @@ def test_creates_custom_bundle_if_no_gemfile Dir.mktmpdir do |dir| Dir.chdir(dir) do bundle_gemfile = Pathname.new(".ruby-lsp").expand_path(Dir.pwd) + "Gemfile" - Object.any_instance.expects(:system).with(bundle_env(bundle_gemfile.to_s), "bundle install 1>&2") + Object.any_instance.expects(:system).with( + bundle_env(bundle_gemfile.to_s), + "bundle check || bundle install 1>&2", + ) Bundler.with_unbundled_env do run_script @@ -198,7 +239,7 @@ def test_does_nothing_if_both_ruby_lsp_and_debug_are_gemspec_dependencies FileUtils.touch(File.join(dir, "Gemfile.lock")) Bundler.with_unbundled_env do - Object.any_instance.expects(:system).with(bundle_env, "bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env, "bundle check || bundle install 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({}) run_script end @@ -212,7 +253,10 @@ def test_creates_custom_bundle_with_specified_branch Dir.mktmpdir do |dir| Dir.chdir(dir) do bundle_gemfile = Pathname.new(".ruby-lsp").expand_path(Dir.pwd) + "Gemfile" - Object.any_instance.expects(:system).with(bundle_env(bundle_gemfile.to_s), "bundle install 1>&2") + Object.any_instance.expects(:system).with( + bundle_env(bundle_gemfile.to_s), + "bundle check || bundle install 1>&2", + ) Bundler.with_unbundled_env do run_script(branch: "test-branch") From 15003cd46316a7d0e5227d42a8e3d34a3cd9b390 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Mon, 28 Aug 2023 09:41:57 -0400 Subject: [PATCH 13/20] Recover from indexing errors (#931) --- lib/ruby_lsp/executor.rb | 34 ++++++++++++++++++++++++++-------- test/executor_test.rb | 13 +++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/lib/ruby_lsp/executor.rb b/lib/ruby_lsp/executor.rb index b3528b820..fe80a4021 100644 --- a/lib/ruby_lsp/executor.rb +++ b/lib/ruby_lsp/executor.rb @@ -58,14 +58,7 @@ def run(request) warn(errored_extensions.map(&:backtraces).join("\n\n")) end - if @store.experimental_features - # The begin progress invocation happens during `initialize`, so that the notification is sent before we are - # stuck indexing files - RubyIndexer.configuration.load_config - @index.index_all - end_progress("indexing-progress") - end - + perform_initial_indexing check_formatter_is_available warn("Ruby LSP is ready") @@ -209,6 +202,31 @@ def did_change_watched_files(changes) VOID end + sig { void } + def perform_initial_indexing + return unless @store.experimental_features + + # The begin progress invocation happens during `initialize`, so that the notification is sent before we are + # stuck indexing files + RubyIndexer.configuration.load_config + + begin + @index.index_all + rescue StandardError => error + @message_queue << Notification.new( + message: "window/showMessage", + params: Interface::ShowMessageParams.new( + type: Constant::MessageType::ERROR, + message: "Error while indexing: #{error.message}", + ), + ) + end + + # Always end the progress notification even if indexing failed or else it never goes away and the user has no way + # of dismissing it + end_progress("indexing-progress") + end + sig { params(query: T.nilable(String)).returns(T::Array[Interface::WorkspaceSymbol]) } def workspace_symbol(query) Requests::WorkspaceSymbol.new(query, @index).run diff --git a/test/executor_test.rb b/test/executor_test.rb index 52312e1a8..550595de0 100644 --- a/test/executor_test.rb +++ b/test/executor_test.rb @@ -115,6 +115,19 @@ def test_initialized_populates_index refute_empty(index.instance_variable_get(:@entries)) end + def test_initialized_recovers_from_indexing_failures + @store.experimental_features = true + RubyIndexer::Index.any_instance.expects(:index_all).once.raises(StandardError, "boom!") + + @executor.execute({ method: "initialized", params: {} }) + notification = T.must(@message_queue.pop) + assert_equal("window/showMessage", notification.message) + assert_equal( + "Error while indexing: boom!", + T.cast(notification.params, RubyLsp::Interface::ShowMessageParams).message, + ) + end + def test_rubocop_errors_push_window_notification @executor.expects(:formatting).raises(StandardError, "boom").once From 157637f496babedd87251aeaad9de5cb694d3950 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 13:42:04 +0000 Subject: [PATCH 14/20] Bump rubocop from 1.56.0 to 1.56.1 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.56.0 to 1.56.1. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.56.0...v1.56.1) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 11b777771..d5a0fbcf4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -54,7 +54,7 @@ GEM reline (0.3.5) io-console (~> 0.5) rexml (3.2.6) - rubocop (1.56.0) + rubocop (1.56.1) base64 (~> 0.1.1) json (~> 2.3) language_server-protocol (>= 3.17.0) From 7afda7e2f6acb8885a40a5c73f1d1925d9c25cbc Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Mon, 28 Aug 2023 13:43:42 -0400 Subject: [PATCH 15/20] Only index gem require paths (#930) * Only index gem require paths Some gems ship their test folders in the release and that can sometimes cause problems. We only care about files that are intended to be required * Prevent `index_single` from failing if path is a directory --- lib/ruby_indexer/lib/ruby_indexer/configuration.rb | 10 +++++----- lib/ruby_indexer/lib/ruby_indexer/index.rb | 2 ++ lib/ruby_indexer/test/configuration_test.rb | 14 ++++++++++++++ lib/ruby_indexer/test/index_test.rb | 7 +++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/ruby_indexer/lib/ruby_indexer/configuration.rb b/lib/ruby_indexer/lib/ruby_indexer/configuration.rb index 866dc0e5e..7e102e3ca 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/configuration.rb @@ -111,17 +111,17 @@ def files_to_index end # Add the locked gems to the list of files to be indexed - locked_gems&.each do |spec| - next if excluded_gems.include?(spec.name) + locked_gems&.each do |lazy_spec| + next if excluded_gems.include?(lazy_spec.name) - full_gem_path = Gem::Specification.find_by_name(spec.name).full_gem_path + spec = Gem::Specification.find_by_name(lazy_spec.name) # When working on a gem, it will be included in the locked_gems list. Since these are the project's own files, # we have already included and handled exclude patterns for it and should not re-include or it'll lead to # duplicates or accidentally ignoring exclude patterns - next if full_gem_path == Dir.pwd + next if spec.full_gem_path == Dir.pwd - files_to_index.concat(Dir.glob("#{full_gem_path}/**/*.rb")) + files_to_index.concat(Dir.glob("#{spec.full_gem_path}/{#{spec.require_paths.join(",")}}/**/*.rb")) rescue Gem::MissingSpecError # If a gem is scoped only to some specific platform, then its dependencies may not be installed either, but they # are still listed in locked_gems. We can't index them because they are not installed for the platform, so we diff --git a/lib/ruby_indexer/lib/ruby_indexer/index.rb b/lib/ruby_indexer/lib/ruby_indexer/index.rb index c51a021aa..a61fecff3 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/index.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/index.rb @@ -95,6 +95,8 @@ def index_single(path, source = nil) content = source || File.read(path) visitor = IndexVisitor.new(self, YARP.parse(content), path) visitor.run + rescue Errno::EISDIR + # If `path` is a directory, just ignore it and continue indexing end class Entry diff --git a/lib/ruby_indexer/test/configuration_test.rb b/lib/ruby_indexer/test/configuration_test.rb index 2406fcc5f..1aba2dd70 100644 --- a/lib/ruby_indexer/test/configuration_test.rb +++ b/lib/ruby_indexer/test/configuration_test.rb @@ -18,6 +18,20 @@ def test_load_configuration_executes_configure_block assert(files_to_index.none? { |path| path == __FILE__ }) end + def test_files_to_index_only_includes_gem_require_paths + @config.load_config + files_to_index = @config.files_to_index + + Bundler.locked_gems.specs.each do |lazy_spec| + next if lazy_spec.name == "ruby-lsp" + + spec = Gem::Specification.find_by_name(lazy_spec.name) + assert(files_to_index.none? { |path| path.start_with?("#{spec.full_gem_path}/test/") }) + rescue Gem::MissingSpecError + # Transitive dependencies might be missing when running tests on Windows + end + end + def test_files_to_index_does_not_include_default_gem_path_when_in_bundle @config.load_config files_to_index = @config.files_to_index diff --git a/lib/ruby_indexer/test/index_test.rb b/lib/ruby_indexer/test/index_test.rb index 484690d73..bcc3c067c 100644 --- a/lib/ruby_indexer/test/index_test.rb +++ b/lib/ruby_indexer/test/index_test.rb @@ -118,5 +118,12 @@ class Something assert_equal(4, result.length) assert_equal(["Foo::Baz", "Foo::Bar", "Foo", "Foo::Baz::Something"], result.map(&:name)) end + + def test_index_single_ignores_directories + FileUtils.mkdir("lib/this_is_a_dir.rb") + @index.index_single("lib/this_is_a_dir.rb") + ensure + FileUtils.rm_r("lib/this_is_a_dir.rb") + end end end From f5a4ff39122b180eb76568605fb4db17e3de926b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 13:51:22 -0400 Subject: [PATCH 16/20] Update yarp requirement from ~> 0.8.0 to >= 0.8, < 0.10 (#936) * Update yarp requirement from ~> 0.8.0 to >= 0.8, < 0.10 Updates the requirements on [yarp](https://github.com/ruby/yarp) to permit the latest version. - [Release notes](https://github.com/ruby/yarp/releases) - [Changelog](https://github.com/ruby/yarp/blob/main/CHANGELOG.md) - [Commits](https://github.com/ruby/yarp/compare/v0.8.0...v0.9.0) --- updated-dependencies: - dependency-name: yarp dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Update YARP RBI * Update for YARP v0.9.0 --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andy Waite --- Gemfile.lock | 4 +- lib/ruby_indexer/lib/ruby_indexer/visitor.rb | 23 +- lib/ruby_indexer/test/constant_test.rb | 10 +- ruby-lsp.gemspec | 2 +- .../gems/{yarp@0.8.0.rbi => yarp@0.9.0.rbi} | 9435 +++++++++++------ 5 files changed, 6245 insertions(+), 3229 deletions(-) rename sorbet/rbi/gems/{yarp@0.8.0.rbi => yarp@0.9.0.rbi} (59%) diff --git a/Gemfile.lock b/Gemfile.lock index d5a0fbcf4..a42aebc18 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,7 +5,7 @@ PATH language_server-protocol (~> 3.17.0) sorbet-runtime syntax_tree (>= 6.1.1, < 7) - yarp (~> 0.8.0) + yarp (>= 0.8, < 0.10) GEM remote: https://rubygems.org/ @@ -121,7 +121,7 @@ GEM yard-sorbet (0.8.1) sorbet-runtime (>= 0.5) yard (>= 0.9) - yarp (0.8.0) + yarp (0.9.0) PLATFORMS arm64-darwin diff --git a/lib/ruby_indexer/lib/ruby_indexer/visitor.rb b/lib/ruby_indexer/lib/ruby_indexer/visitor.rb index 8deada046..2ce988005 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/visitor.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/visitor.rb @@ -35,17 +35,10 @@ def visit(node) add_index_entry(node, Index::Entry::Class) when YARP::ModuleNode add_index_entry(node, Index::Entry::Module) - when YARP::ConstantWriteNode + when YARP::ConstantWriteNode, YARP::ConstantOrWriteNode add_constant(node) - when YARP::ConstantPathWriteNode + when YARP::ConstantPathWriteNode, YARP::ConstantPathOrWriteNode add_constant_with_path(node) - when YARP::OrWriteNode - case node.target - when YARP::ConstantWriteNode - add_constant(node.target) - when YARP::ConstantPathWriteNode - add_constant_with_path(node.target) - end end end @@ -57,13 +50,21 @@ def visit_all(nodes) private - sig { params(node: YARP::ConstantWriteNode).void } + sig do + params( + node: T.any(YARP::ConstantWriteNode, YARP::ConstantOrWriteNode), + ).void + end def add_constant(node) comments = collect_comments(node) @index << Index::Entry::Constant.new(fully_qualify_name(node.name), @file_path, node.location, comments) end - sig { params(node: YARP::ConstantPathWriteNode).void } + sig do + params( + node: T.any(YARP::ConstantPathWriteNode, YARP::ConstantPathOrWriteNode), + ).void + end def add_constant_with_path(node) # ignore variable constants like `var::FOO` or `self.class::FOO` return unless node.target.parent.nil? || node.target.parent.is_a?(YARP::ConstantReadNode) diff --git a/lib/ruby_indexer/test/constant_test.rb b/lib/ruby_indexer/test/constant_test.rb index c7fd7ba8b..62632a911 100644 --- a/lib/ruby_indexer/test/constant_test.rb +++ b/lib/ruby_indexer/test/constant_test.rb @@ -27,8 +27,8 @@ class ::Bar end RUBY - assert_entry("FOO", Index::Entry::Constant, "/fake/path/foo.rb:0-0:0-2") - assert_entry("Bar::FOO", Index::Entry::Constant, "/fake/path/foo.rb:3-2:3-4") + assert_entry("FOO", Index::Entry::Constant, "/fake/path/foo.rb:0-0:0-8") + assert_entry("Bar::FOO", Index::Entry::Constant, "/fake/path/foo.rb:3-2:3-10") end def test_constant_path_writes @@ -61,9 +61,9 @@ class A A::BAZ ||= 1 RUBY - assert_entry("A::FOO", Index::Entry::Constant, "/fake/path/foo.rb:1-2:1-4") - assert_entry("BAR", Index::Entry::Constant, "/fake/path/foo.rb:2-2:2-6") - assert_entry("A::BAZ", Index::Entry::Constant, "/fake/path/foo.rb:5-0:5-5") + assert_entry("A::FOO", Index::Entry::Constant, "/fake/path/foo.rb:1-2:1-10") + assert_entry("BAR", Index::Entry::Constant, "/fake/path/foo.rb:2-2:2-12") + assert_entry("A::BAZ", Index::Entry::Constant, "/fake/path/foo.rb:5-0:5-11") end def test_comments_for_constants diff --git a/ruby-lsp.gemspec b/ruby-lsp.gemspec index c1ae55085..cef5f4a2a 100644 --- a/ruby-lsp.gemspec +++ b/ruby-lsp.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |s| s.add_dependency("language_server-protocol", "~> 3.17.0") s.add_dependency("sorbet-runtime") s.add_dependency("syntax_tree", ">= 6.1.1", "< 7") - s.add_dependency("yarp", "~> 0.8.0") + s.add_dependency("yarp", ">= 0.8", "< 0.10") s.required_ruby_version = ">= 3.0" end diff --git a/sorbet/rbi/gems/yarp@0.8.0.rbi b/sorbet/rbi/gems/yarp@0.9.0.rbi similarity index 59% rename from sorbet/rbi/gems/yarp@0.8.0.rbi rename to sorbet/rbi/gems/yarp@0.9.0.rbi index 891222e89..a711b4265 100644 --- a/sorbet/rbi/gems/yarp@0.8.0.rbi +++ b/sorbet/rbi/gems/yarp@0.9.0.rbi @@ -4,7 +4,7 @@ # This is an autogenerated file for types exported from the `yarp` gem. # Please instead update this file by running `bin/tapioca gem yarp`. -# This file is generated by the bin/template script and should not be +# This file is generated by the templates/template.rb script and should not be # modified manually. See templates/lib/yarp/node.rb.erb # if you are looking to modify the template # @@ -24,7 +24,7 @@ module YARP # The only difference is that since we don't keep track of lexer state in the # same way, it's going to always return the NONE state. # - # source://yarp//lib/yarp/lex_compat.rb#736 + # source://yarp//lib/yarp/lex_compat.rb#804 def lex_compat(source, filepath = T.unsafe(nil)); end # Mirror the YARP.lex_file API by using the serialization API. @@ -34,12 +34,12 @@ module YARP # returns the same tokens. Raises SyntaxError if the syntax in source is # invalid. # - # source://yarp//lib/yarp/lex_compat.rb#743 + # source://yarp//lib/yarp/lex_compat.rb#811 def lex_ripper(source); end # Load the serialized AST using the source as a reference into a tree. # - # source://yarp//lib/yarp.rb#317 + # source://yarp//lib/yarp.rb#361 def load(source, serialized); end # Mirror the YARP.parse API by using the serialization API. @@ -49,6 +49,12 @@ module YARP # native strings instead of Ruby strings because it allows us to use mmap when # it is available. def parse_file(_arg0); end + + # Mirror the YARP.parse_lex API by using the serialization API. + def parse_lex(*_arg0); end + + # Mirror the YARP.parse_lex_file API by using the serialization API. + def parse_lex_file(_arg0); end end end @@ -57,7 +63,7 @@ end # alias foo bar # ^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#13 +# source://yarp//lib/yarp/node.rb#14 class YARP::AliasNode < ::YARP::Node # def initialize: (new_name: Node, old_name: Node, keyword_loc: Location, location: Location) -> void # @@ -76,6 +82,11 @@ class YARP::AliasNode < ::YARP::Node # source://yarp//lib/yarp/node.rb#37 def child_nodes; end + # def copy: (**params) -> AliasNode + # + # source://yarp//lib/yarp/node.rb#42 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # @@ -84,12 +95,12 @@ class YARP::AliasNode < ::YARP::Node # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#45 + # source://yarp//lib/yarp/node.rb#55 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#50 + # source://yarp//lib/yarp/node.rb#60 def keyword; end # attr_reader keyword_loc: Location @@ -113,54 +124,59 @@ end # foo => bar | baz # ^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#59 +# source://yarp//lib/yarp/node.rb#70 class YARP::AlternationPatternNode < ::YARP::Node # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void # # @return [AlternationPatternNode] a new instance of AlternationPatternNode # - # source://yarp//lib/yarp/node.rb#70 + # source://yarp//lib/yarp/node.rb#80 def initialize(left, right, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#78 + # source://yarp//lib/yarp/node.rb#88 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#83 + # source://yarp//lib/yarp/node.rb#93 def child_nodes; end + # def copy: (**params) -> AlternationPatternNode + # + # source://yarp//lib/yarp/node.rb#98 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#83 + # source://yarp//lib/yarp/node.rb#93 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#91 + # source://yarp//lib/yarp/node.rb#111 def deconstruct_keys(keys); end # attr_reader left: Node # - # source://yarp//lib/yarp/node.rb#61 + # source://yarp//lib/yarp/node.rb#71 def left; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#96 + # source://yarp//lib/yarp/node.rb#116 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#67 + # source://yarp//lib/yarp/node.rb#77 def operator_loc; end # attr_reader right: Node # - # source://yarp//lib/yarp/node.rb#64 + # source://yarp//lib/yarp/node.rb#74 def right; end end @@ -169,151 +185,105 @@ end # left and right # ^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#105 +# source://yarp//lib/yarp/node.rb#126 class YARP::AndNode < ::YARP::Node # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void # # @return [AndNode] a new instance of AndNode # - # source://yarp//lib/yarp/node.rb#116 + # source://yarp//lib/yarp/node.rb#136 def initialize(left, right, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#124 + # source://yarp//lib/yarp/node.rb#144 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#129 + # source://yarp//lib/yarp/node.rb#149 def child_nodes; end + # def copy: (**params) -> AndNode + # + # source://yarp//lib/yarp/node.rb#154 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#129 + # source://yarp//lib/yarp/node.rb#149 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#137 + # source://yarp//lib/yarp/node.rb#167 def deconstruct_keys(keys); end # attr_reader left: Node # - # source://yarp//lib/yarp/node.rb#107 + # source://yarp//lib/yarp/node.rb#127 def left; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#142 + # source://yarp//lib/yarp/node.rb#172 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#113 + # source://yarp//lib/yarp/node.rb#133 def operator_loc; end # attr_reader right: Node # - # source://yarp//lib/yarp/node.rb#110 + # source://yarp//lib/yarp/node.rb#130 def right; end end -# Represents the use of the `&&=` operator. -# -# target &&= value -# ^^^^^^^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#151 -class YARP::AndWriteNode < ::YARP::Node - # def initialize: (target: Node, value: Node, operator_loc: Location, location: Location) -> void - # - # @return [AndWriteNode] a new instance of AndWriteNode - # - # source://yarp//lib/yarp/node.rb#162 - def initialize(target, value, operator_loc, location); end - - # def accept: (visitor: Visitor) -> void - # - # source://yarp//lib/yarp/node.rb#170 - def accept(visitor); end - - # def child_nodes: () -> Array[nil | Node] - # - # source://yarp//lib/yarp/node.rb#175 - def child_nodes; end - - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] - # - # source://yarp//lib/yarp/node.rb#175 - def deconstruct; end - - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] - # - # source://yarp//lib/yarp/node.rb#183 - def deconstruct_keys(keys); end - - # def operator: () -> String - # - # source://yarp//lib/yarp/node.rb#188 - def operator; end - - # attr_reader operator_loc: Location - # - # source://yarp//lib/yarp/node.rb#159 - def operator_loc; end - - # attr_reader target: Node - # - # source://yarp//lib/yarp/node.rb#153 - def target; end - - # attr_reader value: Node - # - # source://yarp//lib/yarp/node.rb#156 - def value; end -end - # Represents a set of arguments to a method or a keyword. # # return foo, bar, baz # ^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#197 +# source://yarp//lib/yarp/node.rb#182 class YARP::ArgumentsNode < ::YARP::Node # def initialize: (arguments: Array[Node], location: Location) -> void # # @return [ArgumentsNode] a new instance of ArgumentsNode # - # source://yarp//lib/yarp/node.rb#202 + # source://yarp//lib/yarp/node.rb#186 def initialize(arguments, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#208 + # source://yarp//lib/yarp/node.rb#192 def accept(visitor); end # attr_reader arguments: Array[Node] # - # source://yarp//lib/yarp/node.rb#199 + # source://yarp//lib/yarp/node.rb#183 def arguments; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#213 + # source://yarp//lib/yarp/node.rb#197 def child_nodes; end + # def copy: (**params) -> ArgumentsNode + # + # source://yarp//lib/yarp/node.rb#202 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#213 + # source://yarp//lib/yarp/node.rb#197 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#221 + # source://yarp//lib/yarp/node.rb#213 def deconstruct_keys(keys); end end @@ -323,59 +293,64 @@ end # [1, 2, 3] # ^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#231 +# source://yarp//lib/yarp/node.rb#224 class YARP::ArrayNode < ::YARP::Node # def initialize: (elements: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void # # @return [ArrayNode] a new instance of ArrayNode # - # source://yarp//lib/yarp/node.rb#242 + # source://yarp//lib/yarp/node.rb#234 def initialize(elements, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#250 + # source://yarp//lib/yarp/node.rb#242 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#255 + # source://yarp//lib/yarp/node.rb#247 def child_nodes; end # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#273 + # source://yarp//lib/yarp/node.rb#275 def closing; end # attr_reader closing_loc: Location? # - # source://yarp//lib/yarp/node.rb#239 + # source://yarp//lib/yarp/node.rb#231 def closing_loc; end + # def copy: (**params) -> ArrayNode + # + # source://yarp//lib/yarp/node.rb#252 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#255 + # source://yarp//lib/yarp/node.rb#247 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#263 + # source://yarp//lib/yarp/node.rb#265 def deconstruct_keys(keys); end # attr_reader elements: Array[Node] # - # source://yarp//lib/yarp/node.rb#233 + # source://yarp//lib/yarp/node.rb#225 def elements; end # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#268 + # source://yarp//lib/yarp/node.rb#270 def opening; end # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#236 + # source://yarp//lib/yarp/node.rb#228 def opening_loc; end end @@ -396,74 +371,79 @@ end # foo in Bar[1, 2, 3] # ^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#294 +# source://yarp//lib/yarp/node.rb#297 class YARP::ArrayPatternNode < ::YARP::Node # def initialize: (constant: Node?, requireds: Array[Node], rest: Node?, posts: Array[Node], opening_loc: Location?, closing_loc: Location?, location: Location) -> void # # @return [ArrayPatternNode] a new instance of ArrayPatternNode # - # source://yarp//lib/yarp/node.rb#314 + # source://yarp//lib/yarp/node.rb#316 def initialize(constant, requireds, rest, posts, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#325 + # source://yarp//lib/yarp/node.rb#327 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#330 + # source://yarp//lib/yarp/node.rb#332 def child_nodes; end # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#348 + # source://yarp//lib/yarp/node.rb#363 def closing; end # attr_reader closing_loc: Location? # - # source://yarp//lib/yarp/node.rb#311 + # source://yarp//lib/yarp/node.rb#313 def closing_loc; end # attr_reader constant: Node? # - # source://yarp//lib/yarp/node.rb#296 + # source://yarp//lib/yarp/node.rb#298 def constant; end + # def copy: (**params) -> ArrayPatternNode + # + # source://yarp//lib/yarp/node.rb#337 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#330 + # source://yarp//lib/yarp/node.rb#332 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#338 + # source://yarp//lib/yarp/node.rb#353 def deconstruct_keys(keys); end # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#343 + # source://yarp//lib/yarp/node.rb#358 def opening; end # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#308 + # source://yarp//lib/yarp/node.rb#310 def opening_loc; end # attr_reader posts: Array[Node] # - # source://yarp//lib/yarp/node.rb#305 + # source://yarp//lib/yarp/node.rb#307 def posts; end # attr_reader requireds: Array[Node] # - # source://yarp//lib/yarp/node.rb#299 + # source://yarp//lib/yarp/node.rb#301 def requireds; end # attr_reader rest: Node? # - # source://yarp//lib/yarp/node.rb#302 + # source://yarp//lib/yarp/node.rb#304 def rest; end end @@ -472,54 +452,59 @@ end # { a => b } # ^^^^^^ # -# source://yarp//lib/yarp/node.rb#357 +# source://yarp//lib/yarp/node.rb#373 class YARP::AssocNode < ::YARP::Node # def initialize: (key: Node, value: Node?, operator_loc: Location?, location: Location) -> void # # @return [AssocNode] a new instance of AssocNode # - # source://yarp//lib/yarp/node.rb#368 + # source://yarp//lib/yarp/node.rb#383 def initialize(key, value, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#376 + # source://yarp//lib/yarp/node.rb#391 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#381 + # source://yarp//lib/yarp/node.rb#396 def child_nodes; end + # def copy: (**params) -> AssocNode + # + # source://yarp//lib/yarp/node.rb#401 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#381 + # source://yarp//lib/yarp/node.rb#396 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#389 + # source://yarp//lib/yarp/node.rb#414 def deconstruct_keys(keys); end # attr_reader key: Node # - # source://yarp//lib/yarp/node.rb#359 + # source://yarp//lib/yarp/node.rb#374 def key; end # def operator: () -> String? # - # source://yarp//lib/yarp/node.rb#394 + # source://yarp//lib/yarp/node.rb#419 def operator; end # attr_reader operator_loc: Location? # - # source://yarp//lib/yarp/node.rb#365 + # source://yarp//lib/yarp/node.rb#380 def operator_loc; end # attr_reader value: Node? # - # source://yarp//lib/yarp/node.rb#362 + # source://yarp//lib/yarp/node.rb#377 def value; end end @@ -528,49 +513,54 @@ end # { **foo } # ^^^^^ # -# source://yarp//lib/yarp/node.rb#403 +# source://yarp//lib/yarp/node.rb#429 class YARP::AssocSplatNode < ::YARP::Node # def initialize: (value: Node?, operator_loc: Location, location: Location) -> void # # @return [AssocSplatNode] a new instance of AssocSplatNode # - # source://yarp//lib/yarp/node.rb#411 + # source://yarp//lib/yarp/node.rb#436 def initialize(value, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#418 + # source://yarp//lib/yarp/node.rb#443 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#423 + # source://yarp//lib/yarp/node.rb#448 def child_nodes; end + # def copy: (**params) -> AssocSplatNode + # + # source://yarp//lib/yarp/node.rb#453 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#423 + # source://yarp//lib/yarp/node.rb#448 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#431 + # source://yarp//lib/yarp/node.rb#465 def deconstruct_keys(keys); end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#436 + # source://yarp//lib/yarp/node.rb#470 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#408 + # source://yarp//lib/yarp/node.rb#433 def operator_loc; end # attr_reader value: Node? # - # source://yarp//lib/yarp/node.rb#405 + # source://yarp//lib/yarp/node.rb#430 def value; end end @@ -581,34 +571,39 @@ YARP::BACKEND = T.let(T.unsafe(nil), Symbol) # $' # ^^ # -# source://yarp//lib/yarp/node.rb#445 +# source://yarp//lib/yarp/node.rb#480 class YARP::BackReferenceReadNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [BackReferenceReadNode] a new instance of BackReferenceReadNode # - # source://yarp//lib/yarp/node.rb#447 + # source://yarp//lib/yarp/node.rb#481 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#452 + # source://yarp//lib/yarp/node.rb#486 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#457 + # source://yarp//lib/yarp/node.rb#491 def child_nodes; end + # def copy: (**params) -> BackReferenceReadNode + # + # source://yarp//lib/yarp/node.rb#496 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#457 + # source://yarp//lib/yarp/node.rb#491 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#465 + # source://yarp//lib/yarp/node.rb#506 def deconstruct_keys(keys); end end @@ -617,15 +612,15 @@ end # implement each one that they need. For a default implementation that # continues walking the tree, see the Visitor class. # -# source://yarp//lib/yarp.rb#158 +# source://yarp//lib/yarp.rb#178 class YARP::BasicVisitor - # source://yarp//lib/yarp.rb#159 + # source://yarp//lib/yarp.rb#179 def visit(node); end - # source://yarp//lib/yarp.rb#163 + # source://yarp//lib/yarp.rb#183 def visit_all(nodes); end - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_child_nodes(node); end end @@ -636,77 +631,82 @@ end # end # ^^^^^ # -# source://yarp//lib/yarp/node.rb#476 +# source://yarp//lib/yarp/node.rb#518 class YARP::BeginNode < ::YARP::Node - # def initialize: (begin_keyword_loc: Location?, statements: Node?, rescue_clause: Node?, else_clause: Node?, ensure_clause: Node?, end_keyword_loc: Location?, location: Location) -> void + # def initialize: (begin_keyword_loc: Location?, statements: StatementsNode?, rescue_clause: RescueNode?, else_clause: ElseNode?, ensure_clause: EnsureNode?, end_keyword_loc: Location?, location: Location) -> void # # @return [BeginNode] a new instance of BeginNode # - # source://yarp//lib/yarp/node.rb#496 + # source://yarp//lib/yarp/node.rb#537 def initialize(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#507 + # source://yarp//lib/yarp/node.rb#548 def accept(visitor); end # def begin_keyword: () -> String? # - # source://yarp//lib/yarp/node.rb#529 + # source://yarp//lib/yarp/node.rb#583 def begin_keyword; end # attr_reader begin_keyword_loc: Location? # - # source://yarp//lib/yarp/node.rb#478 + # source://yarp//lib/yarp/node.rb#519 def begin_keyword_loc; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#516 + # source://yarp//lib/yarp/node.rb#557 def child_nodes; end + # def copy: (**params) -> BeginNode + # + # source://yarp//lib/yarp/node.rb#562 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#516 + # source://yarp//lib/yarp/node.rb#557 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#524 + # source://yarp//lib/yarp/node.rb#578 def deconstruct_keys(keys); end - # attr_reader else_clause: Node? + # attr_reader else_clause: ElseNode? # - # source://yarp//lib/yarp/node.rb#487 + # source://yarp//lib/yarp/node.rb#528 def else_clause; end # def end_keyword: () -> String? # - # source://yarp//lib/yarp/node.rb#534 + # source://yarp//lib/yarp/node.rb#588 def end_keyword; end # attr_reader end_keyword_loc: Location? # - # source://yarp//lib/yarp/node.rb#493 + # source://yarp//lib/yarp/node.rb#534 def end_keyword_loc; end - # attr_reader ensure_clause: Node? + # attr_reader ensure_clause: EnsureNode? # - # source://yarp//lib/yarp/node.rb#490 + # source://yarp//lib/yarp/node.rb#531 def ensure_clause; end - # attr_reader rescue_clause: Node? + # attr_reader rescue_clause: RescueNode? # - # source://yarp//lib/yarp/node.rb#484 + # source://yarp//lib/yarp/node.rb#525 def rescue_clause; end - # source://yarp//lib/yarp/node.rb#511 + # source://yarp//lib/yarp/node.rb#552 def set_newline_flag(newline_marked); end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#481 + # source://yarp//lib/yarp/node.rb#522 def statements; end end @@ -715,49 +715,54 @@ end # bar(&args) # ^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#543 +# source://yarp//lib/yarp/node.rb#598 class YARP::BlockArgumentNode < ::YARP::Node # def initialize: (expression: Node?, operator_loc: Location, location: Location) -> void # # @return [BlockArgumentNode] a new instance of BlockArgumentNode # - # source://yarp//lib/yarp/node.rb#551 + # source://yarp//lib/yarp/node.rb#605 def initialize(expression, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#558 + # source://yarp//lib/yarp/node.rb#612 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#563 + # source://yarp//lib/yarp/node.rb#617 def child_nodes; end + # def copy: (**params) -> BlockArgumentNode + # + # source://yarp//lib/yarp/node.rb#622 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#563 + # source://yarp//lib/yarp/node.rb#617 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#571 + # source://yarp//lib/yarp/node.rb#634 def deconstruct_keys(keys); end # attr_reader expression: Node? # - # source://yarp//lib/yarp/node.rb#545 + # source://yarp//lib/yarp/node.rb#599 def expression; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#576 + # source://yarp//lib/yarp/node.rb#639 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#548 + # source://yarp//lib/yarp/node.rb#602 def operator_loc; end end @@ -766,69 +771,74 @@ end # [1, 2, 3].each { |i| puts x } # ^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#585 +# source://yarp//lib/yarp/node.rb#649 class YARP::BlockNode < ::YARP::Node - # def initialize: (locals: Array[Symbol], parameters: Node?, body: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void + # def initialize: (locals: Array[Symbol], parameters: BlockParametersNode?, body: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void # # @return [BlockNode] a new instance of BlockNode # - # source://yarp//lib/yarp/node.rb#602 + # source://yarp//lib/yarp/node.rb#665 def initialize(locals, parameters, body, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#612 + # source://yarp//lib/yarp/node.rb#675 def accept(visitor); end # attr_reader body: Node? # - # source://yarp//lib/yarp/node.rb#593 + # source://yarp//lib/yarp/node.rb#656 def body; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#617 + # source://yarp//lib/yarp/node.rb#680 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#635 + # source://yarp//lib/yarp/node.rb#710 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#599 + # source://yarp//lib/yarp/node.rb#662 def closing_loc; end + # def copy: (**params) -> BlockNode + # + # source://yarp//lib/yarp/node.rb#685 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#617 + # source://yarp//lib/yarp/node.rb#680 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#625 + # source://yarp//lib/yarp/node.rb#700 def deconstruct_keys(keys); end # attr_reader locals: Array[Symbol] # - # source://yarp//lib/yarp/node.rb#587 + # source://yarp//lib/yarp/node.rb#650 def locals; end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#630 + # source://yarp//lib/yarp/node.rb#705 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#596 + # source://yarp//lib/yarp/node.rb#659 def opening_loc; end - # attr_reader parameters: Node? + # attr_reader parameters: BlockParametersNode? # - # source://yarp//lib/yarp/node.rb#590 + # source://yarp//lib/yarp/node.rb#653 def parameters; end end @@ -838,54 +848,59 @@ end # ^^ # end # -# source://yarp//lib/yarp/node.rb#645 +# source://yarp//lib/yarp/node.rb#721 class YARP::BlockParameterNode < ::YARP::Node # def initialize: (name_loc: Location?, operator_loc: Location, location: Location) -> void # # @return [BlockParameterNode] a new instance of BlockParameterNode # - # source://yarp//lib/yarp/node.rb#653 + # source://yarp//lib/yarp/node.rb#728 def initialize(name_loc, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#660 + # source://yarp//lib/yarp/node.rb#735 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#665 + # source://yarp//lib/yarp/node.rb#740 def child_nodes; end + # def copy: (**params) -> BlockParameterNode + # + # source://yarp//lib/yarp/node.rb#745 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#665 + # source://yarp//lib/yarp/node.rb#740 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#673 + # source://yarp//lib/yarp/node.rb#757 def deconstruct_keys(keys); end # def name: () -> String? # - # source://yarp//lib/yarp/node.rb#678 + # source://yarp//lib/yarp/node.rb#762 def name; end # attr_reader name_loc: Location? # - # source://yarp//lib/yarp/node.rb#647 + # source://yarp//lib/yarp/node.rb#722 def name_loc; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#683 + # source://yarp//lib/yarp/node.rb#767 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#650 + # source://yarp//lib/yarp/node.rb#725 def operator_loc; end end @@ -898,64 +913,69 @@ end # ^^^^^^^^^^^^^^^^^ # end # -# source://yarp//lib/yarp/node.rb#696 +# source://yarp//lib/yarp/node.rb#781 class YARP::BlockParametersNode < ::YARP::Node - # def initialize: (parameters: Node?, locals: Array[Location], opening_loc: Location?, closing_loc: Location?, location: Location) -> void + # def initialize: (parameters: ParametersNode?, locals: Array[Location], opening_loc: Location?, closing_loc: Location?, location: Location) -> void # # @return [BlockParametersNode] a new instance of BlockParametersNode # - # source://yarp//lib/yarp/node.rb#710 + # source://yarp//lib/yarp/node.rb#794 def initialize(parameters, locals, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#719 + # source://yarp//lib/yarp/node.rb#803 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#724 + # source://yarp//lib/yarp/node.rb#808 def child_nodes; end # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#742 + # source://yarp//lib/yarp/node.rb#837 def closing; end # attr_reader closing_loc: Location? # - # source://yarp//lib/yarp/node.rb#707 + # source://yarp//lib/yarp/node.rb#791 def closing_loc; end + # def copy: (**params) -> BlockParametersNode + # + # source://yarp//lib/yarp/node.rb#813 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#724 + # source://yarp//lib/yarp/node.rb#808 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#732 + # source://yarp//lib/yarp/node.rb#827 def deconstruct_keys(keys); end # attr_reader locals: Array[Location] # - # source://yarp//lib/yarp/node.rb#701 + # source://yarp//lib/yarp/node.rb#785 def locals; end # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#737 + # source://yarp//lib/yarp/node.rb#832 def opening; end # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#704 + # source://yarp//lib/yarp/node.rb#788 def opening_loc; end - # attr_reader parameters: Node? + # attr_reader parameters: ParametersNode? # - # source://yarp//lib/yarp/node.rb#698 + # source://yarp//lib/yarp/node.rb#782 def parameters; end end @@ -964,49 +984,54 @@ end # break foo # ^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#751 +# source://yarp//lib/yarp/node.rb#847 class YARP::BreakNode < ::YARP::Node - # def initialize: (arguments: Node?, keyword_loc: Location, location: Location) -> void + # def initialize: (arguments: ArgumentsNode?, keyword_loc: Location, location: Location) -> void # # @return [BreakNode] a new instance of BreakNode # - # source://yarp//lib/yarp/node.rb#759 + # source://yarp//lib/yarp/node.rb#854 def initialize(arguments, keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#766 + # source://yarp//lib/yarp/node.rb#861 def accept(visitor); end - # attr_reader arguments: Node? + # attr_reader arguments: ArgumentsNode? # - # source://yarp//lib/yarp/node.rb#753 + # source://yarp//lib/yarp/node.rb#848 def arguments; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#771 + # source://yarp//lib/yarp/node.rb#866 def child_nodes; end + # def copy: (**params) -> BreakNode + # + # source://yarp//lib/yarp/node.rb#871 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#771 + # source://yarp//lib/yarp/node.rb#866 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#779 + # source://yarp//lib/yarp/node.rb#883 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#784 + # source://yarp//lib/yarp/node.rb#888 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#756 + # source://yarp//lib/yarp/node.rb#851 def keyword_loc; end end @@ -1030,127 +1055,132 @@ end # foo&.bar # ^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#808 +# source://yarp//lib/yarp/node.rb#913 class YARP::CallNode < ::YARP::Node - # def initialize: (receiver: Node?, operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: Node?, closing_loc: Location?, block: Node?, flags: Integer, name: String, location: Location) -> void + # def initialize: (receiver: Node?, operator_loc: Location?, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, block: BlockNode?, flags: Integer, name: String, location: Location) -> void # # @return [CallNode] a new instance of CallNode # - # source://yarp//lib/yarp/node.rb#837 + # source://yarp//lib/yarp/node.rb#941 def initialize(receiver, operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#851 + # source://yarp//lib/yarp/node.rb#955 def accept(visitor); end - # attr_reader arguments: Node? + # attr_reader arguments: ArgumentsNode? # - # source://yarp//lib/yarp/node.rb#822 + # source://yarp//lib/yarp/node.rb#926 def arguments; end - # attr_reader block: Node? + # attr_reader block: BlockNode? # - # source://yarp//lib/yarp/node.rb#828 + # source://yarp//lib/yarp/node.rb#932 def block; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#856 + # source://yarp//lib/yarp/node.rb#960 def child_nodes; end # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#884 + # source://yarp//lib/yarp/node.rb#1004 def closing; end # attr_reader closing_loc: Location? # - # source://yarp//lib/yarp/node.rb#825 + # source://yarp//lib/yarp/node.rb#929 def closing_loc; end + # def copy: (**params) -> CallNode + # + # source://yarp//lib/yarp/node.rb#965 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#856 + # source://yarp//lib/yarp/node.rb#960 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#864 + # source://yarp//lib/yarp/node.rb#984 def deconstruct_keys(keys); end # attr_reader flags: Integer # - # source://yarp//lib/yarp/node.rb#831 + # source://yarp//lib/yarp/node.rb#935 def flags; end # def message: () -> String? # - # source://yarp//lib/yarp/node.rb#874 + # source://yarp//lib/yarp/node.rb#994 def message; end # attr_reader message_loc: Location? # - # source://yarp//lib/yarp/node.rb#816 + # source://yarp//lib/yarp/node.rb#920 def message_loc; end # attr_reader name: String # - # source://yarp//lib/yarp/node.rb#834 + # source://yarp//lib/yarp/node.rb#938 def name; end # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#879 + # source://yarp//lib/yarp/node.rb#999 def opening; end # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#819 + # source://yarp//lib/yarp/node.rb#923 def opening_loc; end # def operator: () -> String? # - # source://yarp//lib/yarp/node.rb#869 + # source://yarp//lib/yarp/node.rb#989 def operator; end # attr_reader operator_loc: Location? # - # source://yarp//lib/yarp/node.rb#813 + # source://yarp//lib/yarp/node.rb#917 def operator_loc; end # attr_reader receiver: Node? # - # source://yarp//lib/yarp/node.rb#810 + # source://yarp//lib/yarp/node.rb#914 def receiver; end # def safe_navigation?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#889 + # source://yarp//lib/yarp/node.rb#1009 def safe_navigation?; end # def variable_call?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#894 + # source://yarp//lib/yarp/node.rb#1014 def variable_call?; end end -# source://yarp//lib/yarp/node.rb#5627 +# source://yarp//lib/yarp/node.rb#7993 module YARP::CallNodeFlags; end # &. operator # -# source://yarp//lib/yarp/node.rb#5629 +# source://yarp//lib/yarp/node.rb#7995 YARP::CallNodeFlags::SAFE_NAVIGATION = T.let(T.unsafe(nil), Integer) # a call that could have been a local variable # -# source://yarp//lib/yarp/node.rb#5632 +# source://yarp//lib/yarp/node.rb#7998 YARP::CallNodeFlags::VARIABLE_CALL = T.let(T.unsafe(nil), Integer) # Represents the use of the `&&=` operator on a call. @@ -1158,54 +1188,59 @@ YARP::CallNodeFlags::VARIABLE_CALL = T.let(T.unsafe(nil), Integer) # foo.bar &&= value # ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#903 +# source://yarp//lib/yarp/node.rb#1024 class YARP::CallOperatorAndWriteNode < ::YARP::Node - # def initialize: (target: Node, operator_loc: Location, value: Node, location: Location) -> void + # def initialize: (target: CallNode, operator_loc: Location, value: Node, location: Location) -> void # # @return [CallOperatorAndWriteNode] a new instance of CallOperatorAndWriteNode # - # source://yarp//lib/yarp/node.rb#914 + # source://yarp//lib/yarp/node.rb#1034 def initialize(target, operator_loc, value, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#922 + # source://yarp//lib/yarp/node.rb#1042 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#927 + # source://yarp//lib/yarp/node.rb#1047 def child_nodes; end + # def copy: (**params) -> CallOperatorAndWriteNode + # + # source://yarp//lib/yarp/node.rb#1052 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#927 + # source://yarp//lib/yarp/node.rb#1047 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#935 + # source://yarp//lib/yarp/node.rb#1065 def deconstruct_keys(keys); end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#940 + # source://yarp//lib/yarp/node.rb#1070 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#908 + # source://yarp//lib/yarp/node.rb#1028 def operator_loc; end - # attr_reader target: Node + # attr_reader target: CallNode # - # source://yarp//lib/yarp/node.rb#905 + # source://yarp//lib/yarp/node.rb#1025 def target; end # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#911 + # source://yarp//lib/yarp/node.rb#1031 def value; end end @@ -1214,54 +1249,59 @@ end # foo.bar ||= value # ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#949 +# source://yarp//lib/yarp/node.rb#1080 class YARP::CallOperatorOrWriteNode < ::YARP::Node - # def initialize: (target: Node, value: Node, operator_loc: Location, location: Location) -> void + # def initialize: (target: CallNode, value: Node, operator_loc: Location, location: Location) -> void # # @return [CallOperatorOrWriteNode] a new instance of CallOperatorOrWriteNode # - # source://yarp//lib/yarp/node.rb#960 + # source://yarp//lib/yarp/node.rb#1090 def initialize(target, value, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#968 + # source://yarp//lib/yarp/node.rb#1098 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#973 + # source://yarp//lib/yarp/node.rb#1103 def child_nodes; end + # def copy: (**params) -> CallOperatorOrWriteNode + # + # source://yarp//lib/yarp/node.rb#1108 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#973 + # source://yarp//lib/yarp/node.rb#1103 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#981 + # source://yarp//lib/yarp/node.rb#1121 def deconstruct_keys(keys); end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#986 + # source://yarp//lib/yarp/node.rb#1126 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#957 + # source://yarp//lib/yarp/node.rb#1087 def operator_loc; end - # attr_reader target: Node + # attr_reader target: CallNode # - # source://yarp//lib/yarp/node.rb#951 + # source://yarp//lib/yarp/node.rb#1081 def target; end # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#954 + # source://yarp//lib/yarp/node.rb#1084 def value; end end @@ -1270,59 +1310,64 @@ end # foo.bar += baz # ^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#995 +# source://yarp//lib/yarp/node.rb#1136 class YARP::CallOperatorWriteNode < ::YARP::Node - # def initialize: (target: Node, operator_loc: Location, value: Node, operator_id: Symbol, location: Location) -> void + # def initialize: (target: CallNode, operator_loc: Location, value: Node, operator_id: Symbol, location: Location) -> void # # @return [CallOperatorWriteNode] a new instance of CallOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#1009 + # source://yarp//lib/yarp/node.rb#1149 def initialize(target, operator_loc, value, operator_id, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1018 + # source://yarp//lib/yarp/node.rb#1158 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1023 + # source://yarp//lib/yarp/node.rb#1163 def child_nodes; end + # def copy: (**params) -> CallOperatorWriteNode + # + # source://yarp//lib/yarp/node.rb#1168 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1023 + # source://yarp//lib/yarp/node.rb#1163 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1031 + # source://yarp//lib/yarp/node.rb#1182 def deconstruct_keys(keys); end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#1036 + # source://yarp//lib/yarp/node.rb#1187 def operator; end # attr_reader operator_id: Symbol # - # source://yarp//lib/yarp/node.rb#1006 + # source://yarp//lib/yarp/node.rb#1146 def operator_id; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1000 + # source://yarp//lib/yarp/node.rb#1140 def operator_loc; end - # attr_reader target: Node + # attr_reader target: CallNode # - # source://yarp//lib/yarp/node.rb#997 + # source://yarp//lib/yarp/node.rb#1137 def target; end # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1003 + # source://yarp//lib/yarp/node.rb#1143 def value; end end @@ -1331,54 +1376,59 @@ end # foo => [bar => baz] # ^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1045 +# source://yarp//lib/yarp/node.rb#1197 class YARP::CapturePatternNode < ::YARP::Node # def initialize: (value: Node, target: Node, operator_loc: Location, location: Location) -> void # # @return [CapturePatternNode] a new instance of CapturePatternNode # - # source://yarp//lib/yarp/node.rb#1056 + # source://yarp//lib/yarp/node.rb#1207 def initialize(value, target, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1064 + # source://yarp//lib/yarp/node.rb#1215 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1069 + # source://yarp//lib/yarp/node.rb#1220 def child_nodes; end + # def copy: (**params) -> CapturePatternNode + # + # source://yarp//lib/yarp/node.rb#1225 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1069 + # source://yarp//lib/yarp/node.rb#1220 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1077 + # source://yarp//lib/yarp/node.rb#1238 def deconstruct_keys(keys); end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#1082 + # source://yarp//lib/yarp/node.rb#1243 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1053 + # source://yarp//lib/yarp/node.rb#1204 def operator_loc; end # attr_reader target: Node # - # source://yarp//lib/yarp/node.rb#1050 + # source://yarp//lib/yarp/node.rb#1201 def target; end # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1047 + # source://yarp//lib/yarp/node.rb#1198 def value; end end @@ -1389,69 +1439,74 @@ end # when false # end # -# source://yarp//lib/yarp/node.rb#1093 +# source://yarp//lib/yarp/node.rb#1255 class YARP::CaseNode < ::YARP::Node - # def initialize: (predicate: Node?, conditions: Array[Node], consequent: Node?, case_keyword_loc: Location, end_keyword_loc: Location, location: Location) -> void + # def initialize: (predicate: Node?, conditions: Array[Node], consequent: ElseNode?, case_keyword_loc: Location, end_keyword_loc: Location, location: Location) -> void # # @return [CaseNode] a new instance of CaseNode # - # source://yarp//lib/yarp/node.rb#1110 + # source://yarp//lib/yarp/node.rb#1271 def initialize(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1120 + # source://yarp//lib/yarp/node.rb#1281 def accept(visitor); end # def case_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#1138 + # source://yarp//lib/yarp/node.rb#1311 def case_keyword; end # attr_reader case_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#1104 + # source://yarp//lib/yarp/node.rb#1265 def case_keyword_loc; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1125 + # source://yarp//lib/yarp/node.rb#1286 def child_nodes; end # attr_reader conditions: Array[Node] # - # source://yarp//lib/yarp/node.rb#1098 + # source://yarp//lib/yarp/node.rb#1259 def conditions; end - # attr_reader consequent: Node? + # attr_reader consequent: ElseNode? # - # source://yarp//lib/yarp/node.rb#1101 + # source://yarp//lib/yarp/node.rb#1262 def consequent; end + # def copy: (**params) -> CaseNode + # + # source://yarp//lib/yarp/node.rb#1291 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1125 + # source://yarp//lib/yarp/node.rb#1286 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1133 + # source://yarp//lib/yarp/node.rb#1306 def deconstruct_keys(keys); end # def end_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#1143 + # source://yarp//lib/yarp/node.rb#1316 def end_keyword; end # attr_reader end_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#1107 + # source://yarp//lib/yarp/node.rb#1268 def end_keyword_loc; end # attr_reader predicate: Node? # - # source://yarp//lib/yarp/node.rb#1095 + # source://yarp//lib/yarp/node.rb#1256 def predicate; end end @@ -1460,3721 +1515,6435 @@ end # class Foo end # ^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1152 +# source://yarp//lib/yarp/node.rb#1326 class YARP::ClassNode < ::YARP::Node - # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, constant_path: Node, inheritance_operator_loc: Location?, superclass: Node?, body: Node?, end_keyword_loc: Location, location: Location) -> void + # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, constant_path: Node, inheritance_operator_loc: Location?, superclass: Node?, body: Node?, end_keyword_loc: Location, name: String, location: Location) -> void # # @return [ClassNode] a new instance of ClassNode # - # source://yarp//lib/yarp/node.rb#1175 - def initialize(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#1351 + def initialize(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1187 + # source://yarp//lib/yarp/node.rb#1364 def accept(visitor); end # attr_reader body: Node? # - # source://yarp//lib/yarp/node.rb#1169 + # source://yarp//lib/yarp/node.rb#1342 def body; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1192 + # source://yarp//lib/yarp/node.rb#1369 def child_nodes; end # def class_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#1205 + # source://yarp//lib/yarp/node.rb#1397 def class_keyword; end # attr_reader class_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#1157 + # source://yarp//lib/yarp/node.rb#1330 def class_keyword_loc; end # attr_reader constant_path: Node # - # source://yarp//lib/yarp/node.rb#1160 + # source://yarp//lib/yarp/node.rb#1333 def constant_path; end + # def copy: (**params) -> ClassNode + # + # source://yarp//lib/yarp/node.rb#1374 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1192 + # source://yarp//lib/yarp/node.rb#1369 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1200 + # source://yarp//lib/yarp/node.rb#1392 def deconstruct_keys(keys); end # def end_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#1215 + # source://yarp//lib/yarp/node.rb#1407 def end_keyword; end # attr_reader end_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#1172 + # source://yarp//lib/yarp/node.rb#1345 def end_keyword_loc; end # def inheritance_operator: () -> String? # - # source://yarp//lib/yarp/node.rb#1210 + # source://yarp//lib/yarp/node.rb#1402 def inheritance_operator; end # attr_reader inheritance_operator_loc: Location? # - # source://yarp//lib/yarp/node.rb#1163 + # source://yarp//lib/yarp/node.rb#1336 def inheritance_operator_loc; end # attr_reader locals: Array[Symbol] # - # source://yarp//lib/yarp/node.rb#1154 + # source://yarp//lib/yarp/node.rb#1327 def locals; end + # attr_reader name: String + # + # source://yarp//lib/yarp/node.rb#1348 + def name; end + # attr_reader superclass: Node? # - # source://yarp//lib/yarp/node.rb#1166 + # source://yarp//lib/yarp/node.rb#1339 def superclass; end end -# Represents referencing a class variable. +# Represents the use of the `&&=` operator for assignment to a class variable. # -# @@foo -# ^^^^^ +# @@target &&= value +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1224 -class YARP::ClassVariableReadNode < ::YARP::Node - # def initialize: (location: Location) -> void +# source://yarp//lib/yarp/node.rb#1417 +class YARP::ClassVariableAndWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # - # @return [ClassVariableReadNode] a new instance of ClassVariableReadNode + # @return [ClassVariableAndWriteNode] a new instance of ClassVariableAndWriteNode # - # source://yarp//lib/yarp/node.rb#1226 - def initialize(location); end + # source://yarp//lib/yarp/node.rb#1427 + def initialize(name_loc, operator_loc, value, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1231 + # source://yarp//lib/yarp/node.rb#1435 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1236 + # source://yarp//lib/yarp/node.rb#1440 def child_nodes; end + # def copy: (**params) -> ClassVariableAndWriteNode + # + # source://yarp//lib/yarp/node.rb#1445 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1236 + # source://yarp//lib/yarp/node.rb#1440 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1244 + # source://yarp//lib/yarp/node.rb#1458 def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#1463 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#1418 + def name_loc; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#1468 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#1421 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#1424 + def value; end end -# Represents writing to a class variable. +# Represents assigning to a class variable using an operator that isn't `=`. # -# @@foo = 1 -# ^^^^^^^^^ +# @@target += value +# ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1253 -class YARP::ClassVariableWriteNode < ::YARP::Node - # def initialize: (name_loc: Location, value: Node?, operator_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#1478 +class YARP::ClassVariableOperatorWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void # - # @return [ClassVariableWriteNode] a new instance of ClassVariableWriteNode + # @return [ClassVariableOperatorWriteNode] a new instance of ClassVariableOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#1264 - def initialize(name_loc, value, operator_loc, location); end + # source://yarp//lib/yarp/node.rb#1491 + def initialize(name_loc, operator_loc, value, operator, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1272 + # source://yarp//lib/yarp/node.rb#1500 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1277 + # source://yarp//lib/yarp/node.rb#1505 def child_nodes; end + # def copy: (**params) -> ClassVariableOperatorWriteNode + # + # source://yarp//lib/yarp/node.rb#1510 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1277 + # source://yarp//lib/yarp/node.rb#1505 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1285 + # source://yarp//lib/yarp/node.rb#1524 def deconstruct_keys(keys); end # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1290 + # source://yarp//lib/yarp/node.rb#1529 def name; end # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1255 + # source://yarp//lib/yarp/node.rb#1479 def name_loc; end - # def operator: () -> String? + # attr_reader operator: Symbol # - # source://yarp//lib/yarp/node.rb#1295 + # source://yarp//lib/yarp/node.rb#1488 def operator; end - # attr_reader operator_loc: Location? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1261 + # source://yarp//lib/yarp/node.rb#1482 def operator_loc; end - # attr_reader value: Node? + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1258 + # source://yarp//lib/yarp/node.rb#1485 def value; end end -# This represents a comment that was encountered during parsing. -# -# source://yarp//lib/yarp.rb#111 -class YARP::Comment - # @return [Comment] a new instance of Comment - # - # source://yarp//lib/yarp.rb#116 - def initialize(type, location); end - - # source://yarp//lib/yarp.rb#121 - def deconstruct_keys(keys); end - - # Returns the value of attribute location. - # - # source://yarp//lib/yarp.rb#114 - def location; end - - # Returns the value of attribute type. - # - # source://yarp//lib/yarp.rb#114 - def type; end -end - -# source://yarp//lib/yarp.rb#112 -YARP::Comment::TYPES = T.let(T.unsafe(nil), Array) - -# Represents accessing a constant through a path of `::` operators. +# Represents the use of the `||=` operator for assignment to a class variable. # -# Foo::Bar -# ^^^^^^^^ +# @@target ||= value +# ^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1304 -class YARP::ConstantPathNode < ::YARP::Node - # def initialize: (parent: Node?, child: Node, delimiter_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#1539 +class YARP::ClassVariableOrWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # - # @return [ConstantPathNode] a new instance of ConstantPathNode + # @return [ClassVariableOrWriteNode] a new instance of ClassVariableOrWriteNode # - # source://yarp//lib/yarp/node.rb#1315 - def initialize(parent, child, delimiter_loc, location); end + # source://yarp//lib/yarp/node.rb#1549 + def initialize(name_loc, operator_loc, value, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1323 + # source://yarp//lib/yarp/node.rb#1557 def accept(visitor); end - # attr_reader child: Node - # - # source://yarp//lib/yarp/node.rb#1309 - def child; end - # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1328 + # source://yarp//lib/yarp/node.rb#1562 def child_nodes; end + # def copy: (**params) -> ClassVariableOrWriteNode + # + # source://yarp//lib/yarp/node.rb#1567 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1328 + # source://yarp//lib/yarp/node.rb#1562 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1336 + # source://yarp//lib/yarp/node.rb#1580 def deconstruct_keys(keys); end - # def delimiter: () -> String + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1341 - def delimiter; end + # source://yarp//lib/yarp/node.rb#1585 + def name; end - # attr_reader delimiter_loc: Location + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1312 - def delimiter_loc; end + # source://yarp//lib/yarp/node.rb#1540 + def name_loc; end - # attr_reader parent: Node? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#1306 - def parent; end + # source://yarp//lib/yarp/node.rb#1590 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#1543 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#1546 + def value; end end -# Represents writing to a constant path. -# -# ::Foo = 1 -# ^^^^^^^^^ -# -# Foo::Bar = 1 -# ^^^^^^^^^^^^ +# Represents referencing a class variable. # -# ::Foo::Bar = 1 -# ^^^^^^^^^^^^^^ +# @@foo +# ^^^^^ # -# source://yarp//lib/yarp/node.rb#1356 -class YARP::ConstantPathWriteNode < ::YARP::Node - # def initialize: (target: Node, operator_loc: Location?, value: Node?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#1600 +class YARP::ClassVariableReadNode < ::YARP::Node + # def initialize: (location: Location) -> void # - # @return [ConstantPathWriteNode] a new instance of ConstantPathWriteNode + # @return [ClassVariableReadNode] a new instance of ClassVariableReadNode # - # source://yarp//lib/yarp/node.rb#1367 - def initialize(target, operator_loc, value, location); end + # source://yarp//lib/yarp/node.rb#1601 + def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1375 + # source://yarp//lib/yarp/node.rb#1606 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1380 + # source://yarp//lib/yarp/node.rb#1611 def child_nodes; end + # def copy: (**params) -> ClassVariableReadNode + # + # source://yarp//lib/yarp/node.rb#1616 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1380 + # source://yarp//lib/yarp/node.rb#1611 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1388 + # source://yarp//lib/yarp/node.rb#1626 def deconstruct_keys(keys); end - - # def operator: () -> String? - # - # source://yarp//lib/yarp/node.rb#1393 - def operator; end - - # attr_reader operator_loc: Location? - # - # source://yarp//lib/yarp/node.rb#1361 - def operator_loc; end - - # attr_reader target: Node - # - # source://yarp//lib/yarp/node.rb#1358 - def target; end - - # attr_reader value: Node? - # - # source://yarp//lib/yarp/node.rb#1364 - def value; end end -# Represents referencing a constant. +# Represents writing to a class variable in a context that doesn't have an explicit value. # -# Foo -# ^^^ +# @@foo, @@bar = baz +# ^^^^^ ^^^^^ # -# source://yarp//lib/yarp/node.rb#1402 -class YARP::ConstantReadNode < ::YARP::Node +# source://yarp//lib/yarp/node.rb#1636 +class YARP::ClassVariableTargetNode < ::YARP::Node # def initialize: (location: Location) -> void # - # @return [ConstantReadNode] a new instance of ConstantReadNode + # @return [ClassVariableTargetNode] a new instance of ClassVariableTargetNode # - # source://yarp//lib/yarp/node.rb#1404 + # source://yarp//lib/yarp/node.rb#1637 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1409 + # source://yarp//lib/yarp/node.rb#1642 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1414 + # source://yarp//lib/yarp/node.rb#1647 def child_nodes; end + # def copy: (**params) -> ClassVariableTargetNode + # + # source://yarp//lib/yarp/node.rb#1652 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1414 + # source://yarp//lib/yarp/node.rb#1647 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1422 + # source://yarp//lib/yarp/node.rb#1662 def deconstruct_keys(keys); end end -# Represents writing to a constant. +# Represents writing to a class variable. # -# Foo = 1 -# ^^^^^^^ +# @@foo = 1 +# ^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1431 -class YARP::ConstantWriteNode < ::YARP::Node +# source://yarp//lib/yarp/node.rb#1672 +class YARP::ClassVariableWriteNode < ::YARP::Node # def initialize: (name_loc: Location, value: Node?, operator_loc: Location?, location: Location) -> void # - # @return [ConstantWriteNode] a new instance of ConstantWriteNode + # @return [ClassVariableWriteNode] a new instance of ClassVariableWriteNode # - # source://yarp//lib/yarp/node.rb#1442 + # source://yarp//lib/yarp/node.rb#1682 def initialize(name_loc, value, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1450 + # source://yarp//lib/yarp/node.rb#1690 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1455 + # source://yarp//lib/yarp/node.rb#1695 def child_nodes; end + # def copy: (**params) -> ClassVariableWriteNode + # + # source://yarp//lib/yarp/node.rb#1700 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1455 + # source://yarp//lib/yarp/node.rb#1695 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1463 + # source://yarp//lib/yarp/node.rb#1713 def deconstruct_keys(keys); end # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1468 + # source://yarp//lib/yarp/node.rb#1718 def name; end # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1433 + # source://yarp//lib/yarp/node.rb#1673 def name_loc; end # def operator: () -> String? # - # source://yarp//lib/yarp/node.rb#1473 + # source://yarp//lib/yarp/node.rb#1723 def operator; end # attr_reader operator_loc: Location? # - # source://yarp//lib/yarp/node.rb#1439 + # source://yarp//lib/yarp/node.rb#1679 def operator_loc; end # attr_reader value: Node? # - # source://yarp//lib/yarp/node.rb#1436 + # source://yarp//lib/yarp/node.rb#1676 def value; end end -# source://yarp//lib/yarp/node.rb#6012 -module YARP::DSL - private - - # Create a new AliasNode node +# This represents a comment that was encountered during parsing. +# +# source://yarp//lib/yarp.rb#131 +class YARP::Comment + # @return [Comment] a new instance of Comment # - # source://yarp//lib/yarp/node.rb#6021 - def AliasNode(new_name, old_name, keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp.rb#136 + def initialize(type, location); end - # Create a new AlternationPatternNode node - # - # source://yarp//lib/yarp/node.rb#6026 - def AlternationPatternNode(left, right, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp.rb#141 + def deconstruct_keys(keys); end - # Create a new AndNode node + # Returns the value of attribute location. # - # source://yarp//lib/yarp/node.rb#6031 - def AndNode(left, right, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp.rb#134 + def location; end - # Create a new AndWriteNode node + # Returns the value of attribute type. # - # source://yarp//lib/yarp/node.rb#6036 - def AndWriteNode(target, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp.rb#134 + def type; end +end - # Create a new ArgumentsNode node - # - # source://yarp//lib/yarp/node.rb#6041 - def ArgumentsNode(arguments, location = T.unsafe(nil)); end +# source://yarp//lib/yarp.rb#132 +YARP::Comment::TYPES = T.let(T.unsafe(nil), Array) - # Create a new ArrayNode node +# Represents the use of the `&&=` operator for assignment to a constant. +# +# Target &&= value +# ^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#1733 +class YARP::ConstantAndWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6046 - def ArrayNode(elements, opening_loc, closing_loc, location = T.unsafe(nil)); end - - # Create a new ArrayPatternNode node + # @return [ConstantAndWriteNode] a new instance of ConstantAndWriteNode # - # source://yarp//lib/yarp/node.rb#6051 - def ArrayPatternNode(constant, requireds, rest, posts, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1743 + def initialize(name_loc, operator_loc, value, location); end - # Create a new AssocNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6056 - def AssocNode(key, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1751 + def accept(visitor); end - # Create a new AssocSplatNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6061 - def AssocSplatNode(value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1756 + def child_nodes; end - # Create a new BackReferenceReadNode node + # def copy: (**params) -> ConstantAndWriteNode # - # source://yarp//lib/yarp/node.rb#6066 - def BackReferenceReadNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1761 + def copy(**params); end - # Create a new BeginNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6071 - def BeginNode(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1756 + def deconstruct; end - # Create a new BlockArgumentNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6076 - def BlockArgumentNode(expression, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1774 + def deconstruct_keys(keys); end - # Create a new BlockNode node + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#6081 - def BlockNode(locals, parameters, body, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1779 + def name; end - # Create a new BlockParameterNode node + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#6086 - def BlockParameterNode(name_loc, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1734 + def name_loc; end - # Create a new BlockParametersNode node + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#6091 - def BlockParametersNode(parameters, locals, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1784 + def operator; end - # Create a new BreakNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6096 - def BreakNode(arguments, keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1737 + def operator_loc; end - # Create a new CallNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6101 - def CallNode(receiver, operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1740 + def value; end +end - # Create a new CallOperatorAndWriteNode node +# Represents assigning to a constant using an operator that isn't `=`. +# +# Target += value +# ^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#1794 +class YARP::ConstantOperatorWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6106 - def CallOperatorAndWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end - - # Create a new CallOperatorOrWriteNode node + # @return [ConstantOperatorWriteNode] a new instance of ConstantOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#6111 - def CallOperatorOrWriteNode(target, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1807 + def initialize(name_loc, operator_loc, value, operator, location); end - # Create a new CallOperatorWriteNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6116 - def CallOperatorWriteNode(target, operator_loc, value, operator_id, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1816 + def accept(visitor); end - # Create a new CapturePatternNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6121 - def CapturePatternNode(value, target, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1821 + def child_nodes; end - # Create a new CaseNode node + # def copy: (**params) -> ConstantOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#6126 - def CaseNode(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1826 + def copy(**params); end - # Create a new ClassNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6131 - def ClassNode(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1821 + def deconstruct; end - # Create a new ClassVariableReadNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6136 - def ClassVariableReadNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1840 + def deconstruct_keys(keys); end - # Create a new ClassVariableWriteNode node + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#6141 - def ClassVariableWriteNode(name_loc, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1845 + def name; end - # Create a new ConstantPathNode node + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#6146 - def ConstantPathNode(parent, child, delimiter_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1795 + def name_loc; end - # Create a new ConstantPathWriteNode node + # attr_reader operator: Symbol # - # source://yarp//lib/yarp/node.rb#6151 - def ConstantPathWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1804 + def operator; end - # Create a new ConstantReadNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6156 - def ConstantReadNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1798 + def operator_loc; end - # Create a new ConstantWriteNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6161 - def ConstantWriteNode(name_loc, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1801 + def value; end +end - # Create a new DefNode node +# Represents the use of the `||=` operator for assignment to a constant. +# +# Target ||= value +# ^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#1855 +class YARP::ConstantOrWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6166 - def DefNode(name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location = T.unsafe(nil)); end - - # Create a new DefinedNode node + # @return [ConstantOrWriteNode] a new instance of ConstantOrWriteNode # - # source://yarp//lib/yarp/node.rb#6171 - def DefinedNode(lparen_loc, value, rparen_loc, keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1865 + def initialize(name_loc, operator_loc, value, location); end - # Create a new ElseNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6176 - def ElseNode(else_keyword_loc, statements, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1873 + def accept(visitor); end - # Create a new EmbeddedStatementsNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6181 - def EmbeddedStatementsNode(opening_loc, statements, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1878 + def child_nodes; end - # Create a new EmbeddedVariableNode node + # def copy: (**params) -> ConstantOrWriteNode # - # source://yarp//lib/yarp/node.rb#6186 - def EmbeddedVariableNode(operator_loc, variable, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1883 + def copy(**params); end - # Create a new EnsureNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6191 - def EnsureNode(ensure_keyword_loc, statements, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1878 + def deconstruct; end - # Create a new FalseNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6196 - def FalseNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1896 + def deconstruct_keys(keys); end - # Create a new FindPatternNode node + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#6201 - def FindPatternNode(constant, left, requireds, right, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1901 + def name; end - # Create a new FlipFlopNode node + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#6206 - def FlipFlopNode(left, right, operator_loc, flags, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1856 + def name_loc; end - # Create a new FloatNode node + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#6211 - def FloatNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1906 + def operator; end - # Create a new ForNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6216 - def ForNode(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1859 + def operator_loc; end - # Create a new ForwardingArgumentsNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6221 - def ForwardingArgumentsNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1862 + def value; end +end - # Create a new ForwardingParameterNode node +# Represents the use of the `&&=` operator for assignment to a constant path. +# +# Parent::Child &&= value +# ^^^^^^^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#1916 +class YARP::ConstantPathAndWriteNode < ::YARP::Node + # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6226 - def ForwardingParameterNode(location = T.unsafe(nil)); end - - # Create a new ForwardingSuperNode node + # @return [ConstantPathAndWriteNode] a new instance of ConstantPathAndWriteNode # - # source://yarp//lib/yarp/node.rb#6231 - def ForwardingSuperNode(block, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1926 + def initialize(target, operator_loc, value, location); end - # Create a new GlobalVariableReadNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6236 - def GlobalVariableReadNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1934 + def accept(visitor); end - # Create a new GlobalVariableWriteNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6241 - def GlobalVariableWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1939 + def child_nodes; end - # Create a new HashNode node + # def copy: (**params) -> ConstantPathAndWriteNode # - # source://yarp//lib/yarp/node.rb#6246 - def HashNode(opening_loc, elements, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1944 + def copy(**params); end - # Create a new HashPatternNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6251 - def HashPatternNode(constant, assocs, kwrest, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1939 + def deconstruct; end - # Create a new IfNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6256 - def IfNode(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1957 + def deconstruct_keys(keys); end - # Create a new ImaginaryNode node + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#6261 - def ImaginaryNode(numeric, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1962 + def operator; end - # Create a new InNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6266 - def InNode(pattern, statements, in_loc, then_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1920 + def operator_loc; end - # Create a new InstanceVariableReadNode node + # attr_reader target: ConstantPathNode # - # source://yarp//lib/yarp/node.rb#6271 - def InstanceVariableReadNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1917 + def target; end - # Create a new InstanceVariableWriteNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6276 - def InstanceVariableWriteNode(name_loc, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1923 + def value; end +end - # Create a new IntegerNode node +# Represents accessing a constant through a path of `::` operators. +# +# Foo::Bar +# ^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#1972 +class YARP::ConstantPathNode < ::YARP::Node + # def initialize: (parent: Node?, child: Node, delimiter_loc: Location, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6281 - def IntegerNode(location = T.unsafe(nil)); end - - # Create a new InterpolatedRegularExpressionNode node + # @return [ConstantPathNode] a new instance of ConstantPathNode # - # source://yarp//lib/yarp/node.rb#6286 - def InterpolatedRegularExpressionNode(opening_loc, parts, closing_loc, flags, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1982 + def initialize(parent, child, delimiter_loc, location); end - # Create a new InterpolatedStringNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6291 - def InterpolatedStringNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1990 + def accept(visitor); end - # Create a new InterpolatedSymbolNode node + # attr_reader child: Node # - # source://yarp//lib/yarp/node.rb#6296 - def InterpolatedSymbolNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1976 + def child; end - # Create a new InterpolatedXStringNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6301 - def InterpolatedXStringNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1995 + def child_nodes; end - # Create a new KeywordHashNode node + # def copy: (**params) -> ConstantPathNode # - # source://yarp//lib/yarp/node.rb#6306 - def KeywordHashNode(elements, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2000 + def copy(**params); end - # Create a new KeywordParameterNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6311 - def KeywordParameterNode(name_loc, value, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1995 + def deconstruct; end - # Create a new KeywordRestParameterNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6316 - def KeywordRestParameterNode(operator_loc, name_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2013 + def deconstruct_keys(keys); end - # Create a new LambdaNode node + # def delimiter: () -> String # - # source://yarp//lib/yarp/node.rb#6321 - def LambdaNode(locals, opening_loc, parameters, body, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2018 + def delimiter; end - # Create a new LocalVariableReadNode node + # attr_reader delimiter_loc: Location # - # source://yarp//lib/yarp/node.rb#6326 - def LocalVariableReadNode(constant_id, depth, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1979 + def delimiter_loc; end - # Create a new LocalVariableWriteNode node + # attr_reader parent: Node? # - # source://yarp//lib/yarp/node.rb#6331 - def LocalVariableWriteNode(constant_id, depth, value, name_loc, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#1973 + def parent; end +end - # Create a new Location object +# Represents assigning to a constant path using an operator that isn't `=`. +# +# Parent::Child += value +# ^^^^^^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2028 +class YARP::ConstantPathOperatorWriteNode < ::YARP::Node + # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6016 - def Location(source = T.unsafe(nil), start_offset = T.unsafe(nil), length = T.unsafe(nil)); end - - # Create a new MatchPredicateNode node + # @return [ConstantPathOperatorWriteNode] a new instance of ConstantPathOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#6336 - def MatchPredicateNode(value, pattern, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2041 + def initialize(target, operator_loc, value, operator, location); end - # Create a new MatchRequiredNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6341 - def MatchRequiredNode(value, pattern, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2050 + def accept(visitor); end - # Create a new MissingNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6346 - def MissingNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2055 + def child_nodes; end - # Create a new ModuleNode node + # def copy: (**params) -> ConstantPathOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#6351 - def ModuleNode(locals, module_keyword_loc, constant_path, body, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2060 + def copy(**params); end - # Create a new MultiWriteNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6356 - def MultiWriteNode(targets, operator_loc, value, lparen_loc, rparen_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2055 + def deconstruct; end - # Create a new NextNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6361 - def NextNode(arguments, keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2074 + def deconstruct_keys(keys); end - # Create a new NilNode node + # attr_reader operator: Symbol # - # source://yarp//lib/yarp/node.rb#6366 - def NilNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2038 + def operator; end - # Create a new NoKeywordsParameterNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6371 - def NoKeywordsParameterNode(operator_loc, keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2032 + def operator_loc; end - # Create a new NumberedReferenceReadNode node + # attr_reader target: ConstantPathNode # - # source://yarp//lib/yarp/node.rb#6376 - def NumberedReferenceReadNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2029 + def target; end - # Create a new OperatorWriteNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6381 - def OperatorWriteNode(target, operator_loc, operator, value, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2035 + def value; end +end - # Create a new OptionalParameterNode node +# Represents the use of the `||=` operator for assignment to a constant path. +# +# Parent::Child ||= value +# ^^^^^^^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2084 +class YARP::ConstantPathOrWriteNode < ::YARP::Node + # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6386 - def OptionalParameterNode(constant_id, name_loc, operator_loc, value, location = T.unsafe(nil)); end - - # Create a new OrNode node + # @return [ConstantPathOrWriteNode] a new instance of ConstantPathOrWriteNode # - # source://yarp//lib/yarp/node.rb#6391 - def OrNode(left, right, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2094 + def initialize(target, operator_loc, value, location); end - # Create a new OrWriteNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6396 - def OrWriteNode(target, value, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2102 + def accept(visitor); end - # Create a new ParametersNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6401 - def ParametersNode(requireds, optionals, posts, rest, keywords, keyword_rest, block, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2107 + def child_nodes; end - # Create a new ParenthesesNode node + # def copy: (**params) -> ConstantPathOrWriteNode # - # source://yarp//lib/yarp/node.rb#6406 - def ParenthesesNode(body, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2112 + def copy(**params); end - # Create a new PinnedExpressionNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6411 - def PinnedExpressionNode(expression, operator_loc, lparen_loc, rparen_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2107 + def deconstruct; end - # Create a new PinnedVariableNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6416 - def PinnedVariableNode(variable, operator_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2125 + def deconstruct_keys(keys); end - # Create a new PostExecutionNode node + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#6421 - def PostExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2130 + def operator; end - # Create a new PreExecutionNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6426 - def PreExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2088 + def operator_loc; end - # Create a new ProgramNode node + # attr_reader target: ConstantPathNode # - # source://yarp//lib/yarp/node.rb#6431 - def ProgramNode(locals, statements, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2085 + def target; end - # Create a new RangeNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6436 - def RangeNode(left, right, operator_loc, flags, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2091 + def value; end +end - # Create a new RationalNode node +# Represents writing to a constant path in a context that doesn't have an explicit value. +# +# Foo::Foo, Bar::Bar = baz +# ^^^^^^^^ ^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2140 +class YARP::ConstantPathTargetNode < ::YARP::Node + # def initialize: (parent: Node?, child: Node, delimiter_loc: Location, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6441 - def RationalNode(numeric, location = T.unsafe(nil)); end - - # Create a new RedoNode node + # @return [ConstantPathTargetNode] a new instance of ConstantPathTargetNode # - # source://yarp//lib/yarp/node.rb#6446 - def RedoNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2150 + def initialize(parent, child, delimiter_loc, location); end - # Create a new RegularExpressionNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6451 - def RegularExpressionNode(opening_loc, content_loc, closing_loc, unescaped, flags, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2158 + def accept(visitor); end - # Create a new RequiredDestructuredParameterNode node + # attr_reader child: Node # - # source://yarp//lib/yarp/node.rb#6456 - def RequiredDestructuredParameterNode(parameters, opening_loc, closing_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2144 + def child; end - # Create a new RequiredParameterNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6461 - def RequiredParameterNode(constant_id, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2163 + def child_nodes; end - # Create a new RescueModifierNode node + # def copy: (**params) -> ConstantPathTargetNode # - # source://yarp//lib/yarp/node.rb#6466 - def RescueModifierNode(expression, keyword_loc, rescue_expression, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2168 + def copy(**params); end - # Create a new RescueNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6471 - def RescueNode(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2163 + def deconstruct; end - # Create a new RestParameterNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6476 - def RestParameterNode(operator_loc, name_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2181 + def deconstruct_keys(keys); end - # Create a new RetryNode node + # def delimiter: () -> String # - # source://yarp//lib/yarp/node.rb#6481 - def RetryNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2186 + def delimiter; end - # Create a new ReturnNode node + # attr_reader delimiter_loc: Location # - # source://yarp//lib/yarp/node.rb#6486 - def ReturnNode(keyword_loc, arguments, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#2147 + def delimiter_loc; end - # Create a new SelfNode node + # attr_reader parent: Node? # - # source://yarp//lib/yarp/node.rb#6491 + # source://yarp//lib/yarp/node.rb#2141 + def parent; end +end + +# Represents writing to a constant path. +# +# ::Foo = 1 +# ^^^^^^^^^ +# +# Foo::Bar = 1 +# ^^^^^^^^^^^^ +# +# ::Foo::Bar = 1 +# ^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2202 +class YARP::ConstantPathWriteNode < ::YARP::Node + # def initialize: (target: ConstantPathNode, operator_loc: Location, value: Node, location: Location) -> void + # + # @return [ConstantPathWriteNode] a new instance of ConstantPathWriteNode + # + # source://yarp//lib/yarp/node.rb#2212 + def initialize(target, operator_loc, value, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2220 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2225 + def child_nodes; end + + # def copy: (**params) -> ConstantPathWriteNode + # + # source://yarp//lib/yarp/node.rb#2230 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2225 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2243 + def deconstruct_keys(keys); end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#2248 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#2206 + def operator_loc; end + + # attr_reader target: ConstantPathNode + # + # source://yarp//lib/yarp/node.rb#2203 + def target; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#2209 + def value; end +end + +# Represents referencing a constant. +# +# Foo +# ^^^ +# +# source://yarp//lib/yarp/node.rb#2258 +class YARP::ConstantReadNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [ConstantReadNode] a new instance of ConstantReadNode + # + # source://yarp//lib/yarp/node.rb#2259 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2264 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2269 + def child_nodes; end + + # def copy: (**params) -> ConstantReadNode + # + # source://yarp//lib/yarp/node.rb#2274 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2269 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2284 + def deconstruct_keys(keys); end +end + +# Represents writing to a constant in a context that doesn't have an explicit value. +# +# Foo, Bar = baz +# ^^^ ^^^ +# +# source://yarp//lib/yarp/node.rb#2294 +class YARP::ConstantTargetNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [ConstantTargetNode] a new instance of ConstantTargetNode + # + # source://yarp//lib/yarp/node.rb#2295 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2300 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2305 + def child_nodes; end + + # def copy: (**params) -> ConstantTargetNode + # + # source://yarp//lib/yarp/node.rb#2310 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2305 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2320 + def deconstruct_keys(keys); end +end + +# Represents writing to a constant. +# +# Foo = 1 +# ^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2330 +class YARP::ConstantWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, value: Node, operator_loc: Location, location: Location) -> void + # + # @return [ConstantWriteNode] a new instance of ConstantWriteNode + # + # source://yarp//lib/yarp/node.rb#2340 + def initialize(name_loc, value, operator_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2348 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2353 + def child_nodes; end + + # def copy: (**params) -> ConstantWriteNode + # + # source://yarp//lib/yarp/node.rb#2358 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2353 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2371 + def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#2376 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#2331 + def name_loc; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#2381 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#2337 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#2334 + def value; end +end + +# source://yarp//lib/yarp/node.rb#8441 +module YARP::DSL + private + + # Create a new AliasNode node + # + # source://yarp//lib/yarp/node.rb#8450 + def AliasNode(new_name, old_name, keyword_loc, location = T.unsafe(nil)); end + + # Create a new AlternationPatternNode node + # + # source://yarp//lib/yarp/node.rb#8455 + def AlternationPatternNode(left, right, operator_loc, location = T.unsafe(nil)); end + + # Create a new AndNode node + # + # source://yarp//lib/yarp/node.rb#8460 + def AndNode(left, right, operator_loc, location = T.unsafe(nil)); end + + # Create a new ArgumentsNode node + # + # source://yarp//lib/yarp/node.rb#8465 + def ArgumentsNode(arguments, location = T.unsafe(nil)); end + + # Create a new ArrayNode node + # + # source://yarp//lib/yarp/node.rb#8470 + def ArrayNode(elements, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new ArrayPatternNode node + # + # source://yarp//lib/yarp/node.rb#8475 + def ArrayPatternNode(constant, requireds, rest, posts, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new AssocNode node + # + # source://yarp//lib/yarp/node.rb#8480 + def AssocNode(key, value, operator_loc, location = T.unsafe(nil)); end + + # Create a new AssocSplatNode node + # + # source://yarp//lib/yarp/node.rb#8485 + def AssocSplatNode(value, operator_loc, location = T.unsafe(nil)); end + + # Create a new BackReferenceReadNode node + # + # source://yarp//lib/yarp/node.rb#8490 + def BackReferenceReadNode(location = T.unsafe(nil)); end + + # Create a new BeginNode node + # + # source://yarp//lib/yarp/node.rb#8495 + def BeginNode(begin_keyword_loc, statements, rescue_clause, else_clause, ensure_clause, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new BlockArgumentNode node + # + # source://yarp//lib/yarp/node.rb#8500 + def BlockArgumentNode(expression, operator_loc, location = T.unsafe(nil)); end + + # Create a new BlockNode node + # + # source://yarp//lib/yarp/node.rb#8505 + def BlockNode(locals, parameters, body, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new BlockParameterNode node + # + # source://yarp//lib/yarp/node.rb#8510 + def BlockParameterNode(name_loc, operator_loc, location = T.unsafe(nil)); end + + # Create a new BlockParametersNode node + # + # source://yarp//lib/yarp/node.rb#8515 + def BlockParametersNode(parameters, locals, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new BreakNode node + # + # source://yarp//lib/yarp/node.rb#8520 + def BreakNode(arguments, keyword_loc, location = T.unsafe(nil)); end + + # Create a new CallNode node + # + # source://yarp//lib/yarp/node.rb#8525 + def CallNode(receiver, operator_loc, message_loc, opening_loc, arguments, closing_loc, block, flags, name, location = T.unsafe(nil)); end + + # Create a new CallOperatorAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8530 + def CallOperatorAndWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new CallOperatorOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8535 + def CallOperatorOrWriteNode(target, value, operator_loc, location = T.unsafe(nil)); end + + # Create a new CallOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8540 + def CallOperatorWriteNode(target, operator_loc, value, operator_id, location = T.unsafe(nil)); end + + # Create a new CapturePatternNode node + # + # source://yarp//lib/yarp/node.rb#8545 + def CapturePatternNode(value, target, operator_loc, location = T.unsafe(nil)); end + + # Create a new CaseNode node + # + # source://yarp//lib/yarp/node.rb#8550 + def CaseNode(predicate, conditions, consequent, case_keyword_loc, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new ClassNode node + # + # source://yarp//lib/yarp/node.rb#8555 + def ClassNode(locals, class_keyword_loc, constant_path, inheritance_operator_loc, superclass, body, end_keyword_loc, name, location = T.unsafe(nil)); end + + # Create a new ClassVariableAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8560 + def ClassVariableAndWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ClassVariableOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8565 + def ClassVariableOperatorWriteNode(name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end + + # Create a new ClassVariableOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8570 + def ClassVariableOrWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ClassVariableReadNode node + # + # source://yarp//lib/yarp/node.rb#8575 + def ClassVariableReadNode(location = T.unsafe(nil)); end + + # Create a new ClassVariableTargetNode node + # + # source://yarp//lib/yarp/node.rb#8580 + def ClassVariableTargetNode(location = T.unsafe(nil)); end + + # Create a new ClassVariableWriteNode node + # + # source://yarp//lib/yarp/node.rb#8585 + def ClassVariableWriteNode(name_loc, value, operator_loc, location = T.unsafe(nil)); end + + # Create a new ConstantAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8590 + def ConstantAndWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ConstantOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8595 + def ConstantOperatorWriteNode(name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end + + # Create a new ConstantOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8600 + def ConstantOrWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ConstantPathAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8605 + def ConstantPathAndWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ConstantPathNode node + # + # source://yarp//lib/yarp/node.rb#8610 + def ConstantPathNode(parent, child, delimiter_loc, location = T.unsafe(nil)); end + + # Create a new ConstantPathOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8615 + def ConstantPathOperatorWriteNode(target, operator_loc, value, operator, location = T.unsafe(nil)); end + + # Create a new ConstantPathOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8620 + def ConstantPathOrWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ConstantPathTargetNode node + # + # source://yarp//lib/yarp/node.rb#8625 + def ConstantPathTargetNode(parent, child, delimiter_loc, location = T.unsafe(nil)); end + + # Create a new ConstantPathWriteNode node + # + # source://yarp//lib/yarp/node.rb#8630 + def ConstantPathWriteNode(target, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new ConstantReadNode node + # + # source://yarp//lib/yarp/node.rb#8635 + def ConstantReadNode(location = T.unsafe(nil)); end + + # Create a new ConstantTargetNode node + # + # source://yarp//lib/yarp/node.rb#8640 + def ConstantTargetNode(location = T.unsafe(nil)); end + + # Create a new ConstantWriteNode node + # + # source://yarp//lib/yarp/node.rb#8645 + def ConstantWriteNode(name_loc, value, operator_loc, location = T.unsafe(nil)); end + + # Create a new DefNode node + # + # source://yarp//lib/yarp/node.rb#8650 + def DefNode(name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new DefinedNode node + # + # source://yarp//lib/yarp/node.rb#8655 + def DefinedNode(lparen_loc, value, rparen_loc, keyword_loc, location = T.unsafe(nil)); end + + # Create a new ElseNode node + # + # source://yarp//lib/yarp/node.rb#8660 + def ElseNode(else_keyword_loc, statements, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new EmbeddedStatementsNode node + # + # source://yarp//lib/yarp/node.rb#8665 + def EmbeddedStatementsNode(opening_loc, statements, closing_loc, location = T.unsafe(nil)); end + + # Create a new EmbeddedVariableNode node + # + # source://yarp//lib/yarp/node.rb#8670 + def EmbeddedVariableNode(operator_loc, variable, location = T.unsafe(nil)); end + + # Create a new EnsureNode node + # + # source://yarp//lib/yarp/node.rb#8675 + def EnsureNode(ensure_keyword_loc, statements, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new FalseNode node + # + # source://yarp//lib/yarp/node.rb#8680 + def FalseNode(location = T.unsafe(nil)); end + + # Create a new FindPatternNode node + # + # source://yarp//lib/yarp/node.rb#8685 + def FindPatternNode(constant, left, requireds, right, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new FlipFlopNode node + # + # source://yarp//lib/yarp/node.rb#8690 + def FlipFlopNode(left, right, operator_loc, flags, location = T.unsafe(nil)); end + + # Create a new FloatNode node + # + # source://yarp//lib/yarp/node.rb#8695 + def FloatNode(location = T.unsafe(nil)); end + + # Create a new ForNode node + # + # source://yarp//lib/yarp/node.rb#8700 + def ForNode(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new ForwardingArgumentsNode node + # + # source://yarp//lib/yarp/node.rb#8705 + def ForwardingArgumentsNode(location = T.unsafe(nil)); end + + # Create a new ForwardingParameterNode node + # + # source://yarp//lib/yarp/node.rb#8710 + def ForwardingParameterNode(location = T.unsafe(nil)); end + + # Create a new ForwardingSuperNode node + # + # source://yarp//lib/yarp/node.rb#8715 + def ForwardingSuperNode(block, location = T.unsafe(nil)); end + + # Create a new GlobalVariableAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8720 + def GlobalVariableAndWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new GlobalVariableOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8725 + def GlobalVariableOperatorWriteNode(name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end + + # Create a new GlobalVariableOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8730 + def GlobalVariableOrWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new GlobalVariableReadNode node + # + # source://yarp//lib/yarp/node.rb#8735 + def GlobalVariableReadNode(location = T.unsafe(nil)); end + + # Create a new GlobalVariableTargetNode node + # + # source://yarp//lib/yarp/node.rb#8740 + def GlobalVariableTargetNode(location = T.unsafe(nil)); end + + # Create a new GlobalVariableWriteNode node + # + # source://yarp//lib/yarp/node.rb#8745 + def GlobalVariableWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new HashNode node + # + # source://yarp//lib/yarp/node.rb#8750 + def HashNode(opening_loc, elements, closing_loc, location = T.unsafe(nil)); end + + # Create a new HashPatternNode node + # + # source://yarp//lib/yarp/node.rb#8755 + def HashPatternNode(constant, assocs, kwrest, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new IfNode node + # + # source://yarp//lib/yarp/node.rb#8760 + def IfNode(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new ImaginaryNode node + # + # source://yarp//lib/yarp/node.rb#8765 + def ImaginaryNode(numeric, location = T.unsafe(nil)); end + + # Create a new InNode node + # + # source://yarp//lib/yarp/node.rb#8770 + def InNode(pattern, statements, in_loc, then_loc, location = T.unsafe(nil)); end + + # Create a new InstanceVariableAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8775 + def InstanceVariableAndWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new InstanceVariableOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8780 + def InstanceVariableOperatorWriteNode(name_loc, operator_loc, value, operator, location = T.unsafe(nil)); end + + # Create a new InstanceVariableOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8785 + def InstanceVariableOrWriteNode(name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new InstanceVariableReadNode node + # + # source://yarp//lib/yarp/node.rb#8790 + def InstanceVariableReadNode(location = T.unsafe(nil)); end + + # Create a new InstanceVariableTargetNode node + # + # source://yarp//lib/yarp/node.rb#8795 + def InstanceVariableTargetNode(location = T.unsafe(nil)); end + + # Create a new InstanceVariableWriteNode node + # + # source://yarp//lib/yarp/node.rb#8800 + def InstanceVariableWriteNode(name_loc, value, operator_loc, location = T.unsafe(nil)); end + + # Create a new IntegerNode node + # + # source://yarp//lib/yarp/node.rb#8805 + def IntegerNode(location = T.unsafe(nil)); end + + # Create a new InterpolatedRegularExpressionNode node + # + # source://yarp//lib/yarp/node.rb#8810 + def InterpolatedRegularExpressionNode(opening_loc, parts, closing_loc, flags, location = T.unsafe(nil)); end + + # Create a new InterpolatedStringNode node + # + # source://yarp//lib/yarp/node.rb#8815 + def InterpolatedStringNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end + + # Create a new InterpolatedSymbolNode node + # + # source://yarp//lib/yarp/node.rb#8820 + def InterpolatedSymbolNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end + + # Create a new InterpolatedXStringNode node + # + # source://yarp//lib/yarp/node.rb#8825 + def InterpolatedXStringNode(opening_loc, parts, closing_loc, location = T.unsafe(nil)); end + + # Create a new KeywordHashNode node + # + # source://yarp//lib/yarp/node.rb#8830 + def KeywordHashNode(elements, location = T.unsafe(nil)); end + + # Create a new KeywordParameterNode node + # + # source://yarp//lib/yarp/node.rb#8835 + def KeywordParameterNode(name_loc, value, location = T.unsafe(nil)); end + + # Create a new KeywordRestParameterNode node + # + # source://yarp//lib/yarp/node.rb#8840 + def KeywordRestParameterNode(operator_loc, name_loc, location = T.unsafe(nil)); end + + # Create a new LambdaNode node + # + # source://yarp//lib/yarp/node.rb#8845 + def LambdaNode(locals, operator_loc, opening_loc, closing_loc, parameters, body, location = T.unsafe(nil)); end + + # Create a new LocalVariableAndWriteNode node + # + # source://yarp//lib/yarp/node.rb#8850 + def LocalVariableAndWriteNode(name_loc, operator_loc, value, constant_id, depth, location = T.unsafe(nil)); end + + # Create a new LocalVariableOperatorWriteNode node + # + # source://yarp//lib/yarp/node.rb#8855 + def LocalVariableOperatorWriteNode(name_loc, operator_loc, value, constant_id, operator_id, depth, location = T.unsafe(nil)); end + + # Create a new LocalVariableOrWriteNode node + # + # source://yarp//lib/yarp/node.rb#8860 + def LocalVariableOrWriteNode(name_loc, operator_loc, value, constant_id, depth, location = T.unsafe(nil)); end + + # Create a new LocalVariableReadNode node + # + # source://yarp//lib/yarp/node.rb#8865 + def LocalVariableReadNode(constant_id, depth, location = T.unsafe(nil)); end + + # Create a new LocalVariableTargetNode node + # + # source://yarp//lib/yarp/node.rb#8870 + def LocalVariableTargetNode(constant_id, depth, location = T.unsafe(nil)); end + + # Create a new LocalVariableWriteNode node + # + # source://yarp//lib/yarp/node.rb#8875 + def LocalVariableWriteNode(constant_id, depth, value, name_loc, operator_loc, location = T.unsafe(nil)); end + + # Create a new Location object + # + # source://yarp//lib/yarp/node.rb#8445 + def Location(source = T.unsafe(nil), start_offset = T.unsafe(nil), length = T.unsafe(nil)); end + + # Create a new MatchPredicateNode node + # + # source://yarp//lib/yarp/node.rb#8880 + def MatchPredicateNode(value, pattern, operator_loc, location = T.unsafe(nil)); end + + # Create a new MatchRequiredNode node + # + # source://yarp//lib/yarp/node.rb#8885 + def MatchRequiredNode(value, pattern, operator_loc, location = T.unsafe(nil)); end + + # Create a new MissingNode node + # + # source://yarp//lib/yarp/node.rb#8890 + def MissingNode(location = T.unsafe(nil)); end + + # Create a new ModuleNode node + # + # source://yarp//lib/yarp/node.rb#8895 + def ModuleNode(locals, module_keyword_loc, constant_path, body, end_keyword_loc, name, location = T.unsafe(nil)); end + + # Create a new MultiWriteNode node + # + # source://yarp//lib/yarp/node.rb#8900 + def MultiWriteNode(targets, operator_loc, value, lparen_loc, rparen_loc, location = T.unsafe(nil)); end + + # Create a new NextNode node + # + # source://yarp//lib/yarp/node.rb#8905 + def NextNode(arguments, keyword_loc, location = T.unsafe(nil)); end + + # Create a new NilNode node + # + # source://yarp//lib/yarp/node.rb#8910 + def NilNode(location = T.unsafe(nil)); end + + # Create a new NoKeywordsParameterNode node + # + # source://yarp//lib/yarp/node.rb#8915 + def NoKeywordsParameterNode(operator_loc, keyword_loc, location = T.unsafe(nil)); end + + # Create a new NumberedReferenceReadNode node + # + # source://yarp//lib/yarp/node.rb#8920 + def NumberedReferenceReadNode(location = T.unsafe(nil)); end + + # Create a new OptionalParameterNode node + # + # source://yarp//lib/yarp/node.rb#8925 + def OptionalParameterNode(constant_id, name_loc, operator_loc, value, location = T.unsafe(nil)); end + + # Create a new OrNode node + # + # source://yarp//lib/yarp/node.rb#8930 + def OrNode(left, right, operator_loc, location = T.unsafe(nil)); end + + # Create a new ParametersNode node + # + # source://yarp//lib/yarp/node.rb#8935 + def ParametersNode(requireds, optionals, posts, rest, keywords, keyword_rest, block, location = T.unsafe(nil)); end + + # Create a new ParenthesesNode node + # + # source://yarp//lib/yarp/node.rb#8940 + def ParenthesesNode(body, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new PinnedExpressionNode node + # + # source://yarp//lib/yarp/node.rb#8945 + def PinnedExpressionNode(expression, operator_loc, lparen_loc, rparen_loc, location = T.unsafe(nil)); end + + # Create a new PinnedVariableNode node + # + # source://yarp//lib/yarp/node.rb#8950 + def PinnedVariableNode(variable, operator_loc, location = T.unsafe(nil)); end + + # Create a new PostExecutionNode node + # + # source://yarp//lib/yarp/node.rb#8955 + def PostExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new PreExecutionNode node + # + # source://yarp//lib/yarp/node.rb#8960 + def PreExecutionNode(statements, keyword_loc, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new ProgramNode node + # + # source://yarp//lib/yarp/node.rb#8965 + def ProgramNode(locals, statements, location = T.unsafe(nil)); end + + # Create a new RangeNode node + # + # source://yarp//lib/yarp/node.rb#8970 + def RangeNode(left, right, operator_loc, flags, location = T.unsafe(nil)); end + + # Create a new RationalNode node + # + # source://yarp//lib/yarp/node.rb#8975 + def RationalNode(numeric, location = T.unsafe(nil)); end + + # Create a new RedoNode node + # + # source://yarp//lib/yarp/node.rb#8980 + def RedoNode(location = T.unsafe(nil)); end + + # Create a new RegularExpressionNode node + # + # source://yarp//lib/yarp/node.rb#8985 + def RegularExpressionNode(opening_loc, content_loc, closing_loc, unescaped, flags, location = T.unsafe(nil)); end + + # Create a new RequiredDestructuredParameterNode node + # + # source://yarp//lib/yarp/node.rb#8990 + def RequiredDestructuredParameterNode(parameters, opening_loc, closing_loc, location = T.unsafe(nil)); end + + # Create a new RequiredParameterNode node + # + # source://yarp//lib/yarp/node.rb#8995 + def RequiredParameterNode(constant_id, location = T.unsafe(nil)); end + + # Create a new RescueModifierNode node + # + # source://yarp//lib/yarp/node.rb#9000 + def RescueModifierNode(expression, keyword_loc, rescue_expression, location = T.unsafe(nil)); end + + # Create a new RescueNode node + # + # source://yarp//lib/yarp/node.rb#9005 + def RescueNode(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location = T.unsafe(nil)); end + + # Create a new RestParameterNode node + # + # source://yarp//lib/yarp/node.rb#9010 + def RestParameterNode(operator_loc, name_loc, location = T.unsafe(nil)); end + + # Create a new RetryNode node + # + # source://yarp//lib/yarp/node.rb#9015 + def RetryNode(location = T.unsafe(nil)); end + + # Create a new ReturnNode node + # + # source://yarp//lib/yarp/node.rb#9020 + def ReturnNode(keyword_loc, arguments, location = T.unsafe(nil)); end + + # Create a new SelfNode node + # + # source://yarp//lib/yarp/node.rb#9025 def SelfNode(location = T.unsafe(nil)); end - # Create a new SingletonClassNode node + # Create a new SingletonClassNode node + # + # source://yarp//lib/yarp/node.rb#9030 + def SingletonClassNode(locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new SourceEncodingNode node + # + # source://yarp//lib/yarp/node.rb#9035 + def SourceEncodingNode(location = T.unsafe(nil)); end + + # Create a new SourceFileNode node + # + # source://yarp//lib/yarp/node.rb#9040 + def SourceFileNode(filepath, location = T.unsafe(nil)); end + + # Create a new SourceLineNode node + # + # source://yarp//lib/yarp/node.rb#9045 + def SourceLineNode(location = T.unsafe(nil)); end + + # Create a new SplatNode node + # + # source://yarp//lib/yarp/node.rb#9050 + def SplatNode(operator_loc, expression, location = T.unsafe(nil)); end + + # Create a new StatementsNode node + # + # source://yarp//lib/yarp/node.rb#9055 + def StatementsNode(body, location = T.unsafe(nil)); end + + # Create a new StringConcatNode node + # + # source://yarp//lib/yarp/node.rb#9060 + def StringConcatNode(left, right, location = T.unsafe(nil)); end + + # Create a new StringNode node + # + # source://yarp//lib/yarp/node.rb#9065 + def StringNode(opening_loc, content_loc, closing_loc, unescaped, location = T.unsafe(nil)); end + + # Create a new SuperNode node + # + # source://yarp//lib/yarp/node.rb#9070 + def SuperNode(keyword_loc, lparen_loc, arguments, rparen_loc, block, location = T.unsafe(nil)); end + + # Create a new SymbolNode node + # + # source://yarp//lib/yarp/node.rb#9075 + def SymbolNode(opening_loc, value_loc, closing_loc, unescaped, location = T.unsafe(nil)); end + + # Create a new TrueNode node + # + # source://yarp//lib/yarp/node.rb#9080 + def TrueNode(location = T.unsafe(nil)); end + + # Create a new UndefNode node + # + # source://yarp//lib/yarp/node.rb#9085 + def UndefNode(names, keyword_loc, location = T.unsafe(nil)); end + + # Create a new UnlessNode node + # + # source://yarp//lib/yarp/node.rb#9090 + def UnlessNode(keyword_loc, predicate, statements, consequent, end_keyword_loc, location = T.unsafe(nil)); end + + # Create a new UntilNode node + # + # source://yarp//lib/yarp/node.rb#9095 + def UntilNode(keyword_loc, closing_loc, predicate, statements, flags, location = T.unsafe(nil)); end + + # Create a new WhenNode node + # + # source://yarp//lib/yarp/node.rb#9100 + def WhenNode(keyword_loc, conditions, statements, location = T.unsafe(nil)); end + + # Create a new WhileNode node + # + # source://yarp//lib/yarp/node.rb#9105 + def WhileNode(keyword_loc, closing_loc, predicate, statements, flags, location = T.unsafe(nil)); end + + # Create a new XStringNode node + # + # source://yarp//lib/yarp/node.rb#9110 + def XStringNode(opening_loc, content_loc, closing_loc, unescaped, location = T.unsafe(nil)); end + + # Create a new YieldNode node + # + # source://yarp//lib/yarp/node.rb#9115 + def YieldNode(keyword_loc, lparen_loc, arguments, rparen_loc, location = T.unsafe(nil)); end +end + +# This module is used for testing and debugging and is not meant to be used by +# consumers of this library. +# +# source://yarp//lib/yarp.rb#367 +module YARP::Debug + class << self + # For the given source, compiles with CRuby and returns a list of all of the + # sets of local variables that were encountered. + # + # source://yarp//lib/yarp.rb#408 + def cruby_locals(source); end + + def memsize(_arg0); end + def named_captures(_arg0); end + + # source://yarp//lib/yarp.rb#514 + def newlines(source); end + + # source://yarp//lib/yarp.rb#518 + def parse_serialize_file(filepath); end + + def parse_serialize_file_metadata(_arg0, _arg1); end + def profile_file(_arg0); end + def unescape_all(_arg0); end + def unescape_minimal(_arg0); end + def unescape_none(_arg0); end + + # For the given source, parses with YARP and returns a list of all of the + # sets of local variables that were encountered. + # + # source://yarp//lib/yarp.rb#447 + def yarp_locals(source); end + end +end + +# source://yarp//lib/yarp.rb#368 +class YARP::Debug::ISeq + # @return [ISeq] a new instance of ISeq + # + # source://yarp//lib/yarp.rb#371 + def initialize(parts); end + + # source://yarp//lib/yarp.rb#387 + def each_child; end + + # source://yarp//lib/yarp.rb#383 + def instructions; end + + # source://yarp//lib/yarp.rb#379 + def local_table; end + + # Returns the value of attribute parts. + # + # source://yarp//lib/yarp.rb#369 + def parts; end + + # source://yarp//lib/yarp.rb#375 + def type; end +end + +# Represents a method definition. +# +# def method +# end +# ^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2392 +class YARP::DefNode < ::YARP::Node + # def initialize: (name_loc: Location, receiver: Node?, parameters: ParametersNode?, body: Node?, locals: Array[Symbol], def_keyword_loc: Location, operator_loc: Location?, lparen_loc: Location?, rparen_loc: Location?, equal_loc: Location?, end_keyword_loc: Location?, location: Location) -> void + # + # @return [DefNode] a new instance of DefNode + # + # source://yarp//lib/yarp/node.rb#2426 + def initialize(name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2442 + def accept(visitor); end + + # attr_reader body: Node? + # + # source://yarp//lib/yarp/node.rb#2402 + def body; end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2447 + def child_nodes; end + + # def copy: (**params) -> DefNode + # + # source://yarp//lib/yarp/node.rb#2452 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2447 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2473 + def deconstruct_keys(keys); end + + # def def_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#2483 + def def_keyword; end + + # attr_reader def_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#2408 + def def_keyword_loc; end + + # def end_keyword: () -> String? + # + # source://yarp//lib/yarp/node.rb#2508 + def end_keyword; end + + # attr_reader end_keyword_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2423 + def end_keyword_loc; end + + # def equal: () -> String? + # + # source://yarp//lib/yarp/node.rb#2503 + def equal; end + + # attr_reader equal_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2420 + def equal_loc; end + + # attr_reader locals: Array[Symbol] + # + # source://yarp//lib/yarp/node.rb#2405 + def locals; end + + # def lparen: () -> String? + # + # source://yarp//lib/yarp/node.rb#2493 + def lparen; end + + # attr_reader lparen_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2414 + def lparen_loc; end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#2478 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#2393 + def name_loc; end + + # def operator: () -> String? + # + # source://yarp//lib/yarp/node.rb#2488 + def operator; end + + # attr_reader operator_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2411 + def operator_loc; end + + # attr_reader parameters: ParametersNode? + # + # source://yarp//lib/yarp/node.rb#2399 + def parameters; end + + # attr_reader receiver: Node? + # + # source://yarp//lib/yarp/node.rb#2396 + def receiver; end + + # def rparen: () -> String? + # + # source://yarp//lib/yarp/node.rb#2498 + def rparen; end + + # attr_reader rparen_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2417 + def rparen_loc; end +end + +# Represents the use of the `defined?` keyword. +# +# defined?(a) +# ^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2518 +class YARP::DefinedNode < ::YARP::Node + # def initialize: (lparen_loc: Location?, value: Node, rparen_loc: Location?, keyword_loc: Location, location: Location) -> void + # + # @return [DefinedNode] a new instance of DefinedNode + # + # source://yarp//lib/yarp/node.rb#2531 + def initialize(lparen_loc, value, rparen_loc, keyword_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2540 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2545 + def child_nodes; end + + # def copy: (**params) -> DefinedNode + # + # source://yarp//lib/yarp/node.rb#2550 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2545 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2564 + def deconstruct_keys(keys); end + + # def keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#2579 + def keyword; end + + # attr_reader keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#2528 + def keyword_loc; end + + # def lparen: () -> String? + # + # source://yarp//lib/yarp/node.rb#2569 + def lparen; end + + # attr_reader lparen_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2519 + def lparen_loc; end + + # def rparen: () -> String? + # + # source://yarp//lib/yarp/node.rb#2574 + def rparen; end + + # attr_reader rparen_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2525 + def rparen_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#2522 + def value; end +end + +# source://yarp//lib/yarp/desugar_visitor.rb#9 +class YARP::DesugarVisitor < ::YARP::MutationVisitor + # @@foo &&= bar + # + # becomes + # + # @@foo && @@foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#10 + def visit_class_variable_and_write_node(node); end + + # @@foo += bar + # + # becomes + # + # @@foo = @@foo + bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#38 + def visit_class_variable_operator_write_node(node); end + + # @@foo ||= bar + # + # becomes + # + # @@foo || @@foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#24 + def visit_class_variable_or_write_node(node); end + + # Foo &&= bar + # + # becomes + # + # Foo && Foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#47 + def visit_constant_and_write_node(node); end + + # Foo += bar + # + # becomes + # + # Foo = Foo + bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#75 + def visit_constant_operator_write_node(node); end + + # Foo ||= bar + # + # becomes + # + # Foo || Foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#61 + def visit_constant_or_write_node(node); end + + # Foo::Bar &&= baz + # + # becomes + # + # Foo::Bar && Foo::Bar = baz + # + # source://yarp//lib/yarp/desugar_visitor.rb#84 + def visit_constant_path_and_write_node(node); end + + # Foo::Bar += baz + # + # becomes + # + # Foo::Bar = Foo::Bar + baz + # + # source://yarp//lib/yarp/desugar_visitor.rb#112 + def visit_constant_path_operator_write_node(node); end + + # Foo::Bar ||= baz + # + # becomes + # + # Foo::Bar || Foo::Bar = baz + # + # source://yarp//lib/yarp/desugar_visitor.rb#98 + def visit_constant_path_or_write_node(node); end + + # $foo &&= bar + # + # becomes + # + # $foo && $foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#137 + def visit_global_variable_and_write_node(node); end + + # $foo += bar + # + # becomes + # + # $foo = $foo + bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#165 + def visit_global_variable_operator_write_node(node); end + + # $foo ||= bar + # + # becomes + # + # $foo || $foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#151 + def visit_global_variable_or_write_node(node); end + + # becomes + # + # source://yarp//lib/yarp/desugar_visitor.rb#174 + def visit_instance_variable_and_write_node(node); end + + # becomes + # + # source://yarp//lib/yarp/desugar_visitor.rb#202 + def visit_instance_variable_operator_write_node(node); end + + # becomes + # + # source://yarp//lib/yarp/desugar_visitor.rb#188 + def visit_instance_variable_or_write_node(node); end + + # foo &&= bar + # + # becomes + # + # foo && foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#211 + def visit_local_variable_and_write_node(node); end + + # foo += bar + # + # becomes + # + # foo = foo + bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#239 + def visit_local_variable_operator_write_node(node); end + + # foo ||= bar + # + # becomes + # + # foo || foo = bar + # + # source://yarp//lib/yarp/desugar_visitor.rb#225 + def visit_local_variable_or_write_node(node); end + + private + + # Desugar `x += y` to `x = x + y` + # + # source://yarp//lib/yarp/desugar_visitor.rb#246 + def desugar_operator_write_node(node, write_class, read_class, arguments: T.unsafe(nil)); end +end + +# Represents an `else` clause in a `case`, `if`, or `unless` statement. +# +# if a then b else c end +# ^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2589 +class YARP::ElseNode < ::YARP::Node + # def initialize: (else_keyword_loc: Location, statements: StatementsNode?, end_keyword_loc: Location?, location: Location) -> void + # + # @return [ElseNode] a new instance of ElseNode + # + # source://yarp//lib/yarp/node.rb#2599 + def initialize(else_keyword_loc, statements, end_keyword_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2607 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2612 + def child_nodes; end + + # def copy: (**params) -> ElseNode + # + # source://yarp//lib/yarp/node.rb#2617 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2612 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2630 + def deconstruct_keys(keys); end + + # def else_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#2635 + def else_keyword; end + + # attr_reader else_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#2590 + def else_keyword_loc; end + + # def end_keyword: () -> String? + # + # source://yarp//lib/yarp/node.rb#2640 + def end_keyword; end + + # attr_reader end_keyword_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2596 + def end_keyword_loc; end + + # attr_reader statements: StatementsNode? + # + # source://yarp//lib/yarp/node.rb#2593 + def statements; end +end + +# Represents an interpolated set of statements. +# +# "foo #{bar}" +# ^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2650 +class YARP::EmbeddedStatementsNode < ::YARP::Node + # def initialize: (opening_loc: Location, statements: StatementsNode?, closing_loc: Location, location: Location) -> void + # + # @return [EmbeddedStatementsNode] a new instance of EmbeddedStatementsNode + # + # source://yarp//lib/yarp/node.rb#2660 + def initialize(opening_loc, statements, closing_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2668 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2673 + def child_nodes; end + + # def closing: () -> String + # + # source://yarp//lib/yarp/node.rb#2701 + def closing; end + + # attr_reader closing_loc: Location + # + # source://yarp//lib/yarp/node.rb#2657 + def closing_loc; end + + # def copy: (**params) -> EmbeddedStatementsNode + # + # source://yarp//lib/yarp/node.rb#2678 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2673 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2691 + def deconstruct_keys(keys); end + + # def opening: () -> String + # + # source://yarp//lib/yarp/node.rb#2696 + def opening; end + + # attr_reader opening_loc: Location + # + # source://yarp//lib/yarp/node.rb#2651 + def opening_loc; end + + # attr_reader statements: StatementsNode? + # + # source://yarp//lib/yarp/node.rb#2654 + def statements; end +end + +# Represents an interpolated variable. +# +# "foo #@bar" +# ^^^^^ +# +# source://yarp//lib/yarp/node.rb#2711 +class YARP::EmbeddedVariableNode < ::YARP::Node + # def initialize: (operator_loc: Location, variable: Node, location: Location) -> void + # + # @return [EmbeddedVariableNode] a new instance of EmbeddedVariableNode + # + # source://yarp//lib/yarp/node.rb#2718 + def initialize(operator_loc, variable, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2725 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2730 + def child_nodes; end + + # def copy: (**params) -> EmbeddedVariableNode + # + # source://yarp//lib/yarp/node.rb#2735 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2730 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2747 + def deconstruct_keys(keys); end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#2752 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#2712 + def operator_loc; end + + # attr_reader variable: Node + # + # source://yarp//lib/yarp/node.rb#2715 + def variable; end +end + +# Represents an `ensure` clause in a `begin` statement. +# +# begin +# foo +# ensure +# ^^^^^^ +# bar +# end +# +# source://yarp//lib/yarp/node.rb#2766 +class YARP::EnsureNode < ::YARP::Node + # def initialize: (ensure_keyword_loc: Location, statements: StatementsNode?, end_keyword_loc: Location, location: Location) -> void + # + # @return [EnsureNode] a new instance of EnsureNode + # + # source://yarp//lib/yarp/node.rb#2776 + def initialize(ensure_keyword_loc, statements, end_keyword_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2784 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2789 + def child_nodes; end + + # def copy: (**params) -> EnsureNode + # + # source://yarp//lib/yarp/node.rb#2794 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2789 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2807 + def deconstruct_keys(keys); end + + # def end_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#2817 + def end_keyword; end + + # attr_reader end_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#2773 + def end_keyword_loc; end + + # def ensure_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#2812 + def ensure_keyword; end + + # attr_reader ensure_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#2767 + def ensure_keyword_loc; end + + # attr_reader statements: StatementsNode? + # + # source://yarp//lib/yarp/node.rb#2770 + def statements; end +end + +# Represents the use of the literal `false` keyword. +# +# false +# ^^^^^ +# +# source://yarp//lib/yarp/node.rb#2827 +class YARP::FalseNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [FalseNode] a new instance of FalseNode + # + # source://yarp//lib/yarp/node.rb#2828 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2833 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2838 + def child_nodes; end + + # def copy: (**params) -> FalseNode + # + # source://yarp//lib/yarp/node.rb#2843 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2838 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2853 + def deconstruct_keys(keys); end +end + +# Represents a find pattern in pattern matching. +# +# foo in *bar, baz, *qux +# ^^^^^^^^^^^^^^^^^^^^^^ +# +# foo in [*bar, baz, *qux] +# ^^^^^^^^^^^^^^^^^^^^^^^^ +# +# foo in Foo(*bar, baz, *qux) +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2869 +class YARP::FindPatternNode < ::YARP::Node + # def initialize: (constant: Node?, left: Node, requireds: Array[Node], right: Node, opening_loc: Location?, closing_loc: Location?, location: Location) -> void + # + # @return [FindPatternNode] a new instance of FindPatternNode + # + # source://yarp//lib/yarp/node.rb#2888 + def initialize(constant, left, requireds, right, opening_loc, closing_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2899 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2904 + def child_nodes; end + + # def closing: () -> String? + # + # source://yarp//lib/yarp/node.rb#2935 + def closing; end + + # attr_reader closing_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2885 + def closing_loc; end + + # attr_reader constant: Node? + # + # source://yarp//lib/yarp/node.rb#2870 + def constant; end + + # def copy: (**params) -> FindPatternNode + # + # source://yarp//lib/yarp/node.rb#2909 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2904 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2925 + def deconstruct_keys(keys); end + + # attr_reader left: Node + # + # source://yarp//lib/yarp/node.rb#2873 + def left; end + + # def opening: () -> String? + # + # source://yarp//lib/yarp/node.rb#2930 + def opening; end + + # attr_reader opening_loc: Location? + # + # source://yarp//lib/yarp/node.rb#2882 + def opening_loc; end + + # attr_reader requireds: Array[Node] + # + # source://yarp//lib/yarp/node.rb#2876 + def requireds; end + + # attr_reader right: Node + # + # source://yarp//lib/yarp/node.rb#2879 + def right; end +end + +# Represents the use of the `..` or `...` operators to create flip flops. +# +# baz if foo .. bar +# ^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#2945 +class YARP::FlipFlopNode < ::YARP::Node + # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void + # + # @return [FlipFlopNode] a new instance of FlipFlopNode + # + # source://yarp//lib/yarp/node.rb#2958 + def initialize(left, right, operator_loc, flags, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#2967 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2972 + def child_nodes; end + + # def copy: (**params) -> FlipFlopNode + # + # source://yarp//lib/yarp/node.rb#2977 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#2972 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#2991 + def deconstruct_keys(keys); end + + # def exclude_end?: () -> bool + # + # @return [Boolean] + # + # source://yarp//lib/yarp/node.rb#3001 + def exclude_end?; end + + # attr_reader flags: Integer + # + # source://yarp//lib/yarp/node.rb#2955 + def flags; end + + # attr_reader left: Node? + # + # source://yarp//lib/yarp/node.rb#2946 + def left; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#2996 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#2952 + def operator_loc; end + + # attr_reader right: Node? + # + # source://yarp//lib/yarp/node.rb#2949 + def right; end +end + +# Represents a floating point number literal. +# +# 1.0 +# ^^^ +# +# source://yarp//lib/yarp.rb#336 +class YARP::FloatNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [FloatNode] a new instance of FloatNode + # + # source://yarp//lib/yarp/node.rb#3012 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3017 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3022 + def child_nodes; end + + # def copy: (**params) -> FloatNode + # + # source://yarp//lib/yarp/node.rb#3027 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3022 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3037 + def deconstruct_keys(keys); end + + # source://yarp//lib/yarp.rb#337 + def value; end +end + +# Represents the use of the `for` keyword. +# +# for i in a end +# ^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3047 +class YARP::ForNode < ::YARP::Node + # def initialize: (index: Node, collection: Node, statements: StatementsNode?, for_keyword_loc: Location, in_keyword_loc: Location, do_keyword_loc: Location?, end_keyword_loc: Location, location: Location) -> void + # + # @return [ForNode] a new instance of ForNode + # + # source://yarp//lib/yarp/node.rb#3069 + def initialize(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3081 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3086 + def child_nodes; end + + # attr_reader collection: Node + # + # source://yarp//lib/yarp/node.rb#3051 + def collection; end + + # def copy: (**params) -> ForNode + # + # source://yarp//lib/yarp/node.rb#3091 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3086 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3108 + def deconstruct_keys(keys); end + + # def do_keyword: () -> String? + # + # source://yarp//lib/yarp/node.rb#3123 + def do_keyword; end + + # attr_reader do_keyword_loc: Location? + # + # source://yarp//lib/yarp/node.rb#3063 + def do_keyword_loc; end + + # def end_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#3128 + def end_keyword; end + + # attr_reader end_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#3066 + def end_keyword_loc; end + + # def for_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#3113 + def for_keyword; end + + # attr_reader for_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#3057 + def for_keyword_loc; end + + # def in_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#3118 + def in_keyword; end + + # attr_reader in_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#3060 + def in_keyword_loc; end + + # attr_reader index: Node + # + # source://yarp//lib/yarp/node.rb#3048 + def index; end + + # attr_reader statements: StatementsNode? + # + # source://yarp//lib/yarp/node.rb#3054 + def statements; end +end + +# Represents forwarding all arguments to this method to another method. +# +# def foo(...) +# bar(...) +# ^^^^^^^^ +# end +# +# source://yarp//lib/yarp/node.rb#3140 +class YARP::ForwardingArgumentsNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [ForwardingArgumentsNode] a new instance of ForwardingArgumentsNode + # + # source://yarp//lib/yarp/node.rb#3141 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3146 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3151 + def child_nodes; end + + # def copy: (**params) -> ForwardingArgumentsNode + # + # source://yarp//lib/yarp/node.rb#3156 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3151 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3166 + def deconstruct_keys(keys); end +end + +# Represents the use of the forwarding parameter in a method, block, or lambda declaration. +# +# def foo(...) +# ^^^ +# end +# +# source://yarp//lib/yarp/node.rb#3177 +class YARP::ForwardingParameterNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [ForwardingParameterNode] a new instance of ForwardingParameterNode + # + # source://yarp//lib/yarp/node.rb#3178 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3183 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3188 + def child_nodes; end + + # def copy: (**params) -> ForwardingParameterNode + # + # source://yarp//lib/yarp/node.rb#3193 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3188 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3203 + def deconstruct_keys(keys); end +end + +# Represents the use of the `super` keyword without parentheses or arguments. +# +# super +# ^^^^^ +# +# source://yarp//lib/yarp/node.rb#3213 +class YARP::ForwardingSuperNode < ::YARP::Node + # def initialize: (block: BlockNode?, location: Location) -> void + # + # @return [ForwardingSuperNode] a new instance of ForwardingSuperNode + # + # source://yarp//lib/yarp/node.rb#3217 + def initialize(block, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3223 + def accept(visitor); end + + # attr_reader block: BlockNode? + # + # source://yarp//lib/yarp/node.rb#3214 + def block; end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3228 + def child_nodes; end + + # def copy: (**params) -> ForwardingSuperNode + # + # source://yarp//lib/yarp/node.rb#3233 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3228 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3244 + def deconstruct_keys(keys); end +end + +# Represents the use of the `&&=` operator for assignment to a global variable. +# +# $target &&= value +# ^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3254 +class YARP::GlobalVariableAndWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void + # + # @return [GlobalVariableAndWriteNode] a new instance of GlobalVariableAndWriteNode + # + # source://yarp//lib/yarp/node.rb#3264 + def initialize(name_loc, operator_loc, value, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3272 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3277 + def child_nodes; end + + # def copy: (**params) -> GlobalVariableAndWriteNode + # + # source://yarp//lib/yarp/node.rb#3282 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3277 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3295 + def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#3300 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#3255 + def name_loc; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#3305 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#3258 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#3261 + def value; end +end + +# Represents assigning to a global variable using an operator that isn't `=`. +# +# $target += value +# ^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3315 +class YARP::GlobalVariableOperatorWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void + # + # @return [GlobalVariableOperatorWriteNode] a new instance of GlobalVariableOperatorWriteNode + # + # source://yarp//lib/yarp/node.rb#3328 + def initialize(name_loc, operator_loc, value, operator, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3337 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3342 + def child_nodes; end + + # def copy: (**params) -> GlobalVariableOperatorWriteNode + # + # source://yarp//lib/yarp/node.rb#3347 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3342 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3361 + def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#3366 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#3316 + def name_loc; end + + # attr_reader operator: Symbol + # + # source://yarp//lib/yarp/node.rb#3325 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#3319 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#3322 + def value; end +end + +# Represents the use of the `||=` operator for assignment to a global variable. +# +# $target ||= value +# ^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3376 +class YARP::GlobalVariableOrWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void + # + # @return [GlobalVariableOrWriteNode] a new instance of GlobalVariableOrWriteNode + # + # source://yarp//lib/yarp/node.rb#3386 + def initialize(name_loc, operator_loc, value, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3394 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3399 + def child_nodes; end + + # def copy: (**params) -> GlobalVariableOrWriteNode + # + # source://yarp//lib/yarp/node.rb#3404 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3399 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3417 + def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#3422 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#3377 + def name_loc; end + + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#6496 - def SingletonClassNode(locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3427 + def operator; end - # Create a new SourceEncodingNode node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#6501 - def SourceEncodingNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3380 + def operator_loc; end - # Create a new SourceFileNode node + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#6506 - def SourceFileNode(filepath, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3383 + def value; end +end + +# Represents referencing a global variable. +# +# $foo +# ^^^^ +# +# source://yarp//lib/yarp/node.rb#3437 +class YARP::GlobalVariableReadNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [GlobalVariableReadNode] a new instance of GlobalVariableReadNode + # + # source://yarp//lib/yarp/node.rb#3438 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3443 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3448 + def child_nodes; end + + # def copy: (**params) -> GlobalVariableReadNode + # + # source://yarp//lib/yarp/node.rb#3453 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3448 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3463 + def deconstruct_keys(keys); end +end + +# Represents writing to a global variable in a context that doesn't have an explicit value. +# +# $foo, $bar = baz +# ^^^^ ^^^^ +# +# source://yarp//lib/yarp/node.rb#3473 +class YARP::GlobalVariableTargetNode < ::YARP::Node + # def initialize: (location: Location) -> void + # + # @return [GlobalVariableTargetNode] a new instance of GlobalVariableTargetNode + # + # source://yarp//lib/yarp/node.rb#3474 + def initialize(location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3479 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3484 + def child_nodes; end + + # def copy: (**params) -> GlobalVariableTargetNode + # + # source://yarp//lib/yarp/node.rb#3489 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3484 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3499 + def deconstruct_keys(keys); end +end + +# Represents writing to a global variable. +# +# $foo = 1 +# ^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3509 +class YARP::GlobalVariableWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void + # + # @return [GlobalVariableWriteNode] a new instance of GlobalVariableWriteNode + # + # source://yarp//lib/yarp/node.rb#3519 + def initialize(name_loc, operator_loc, value, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3527 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3532 + def child_nodes; end + + # def copy: (**params) -> GlobalVariableWriteNode + # + # source://yarp//lib/yarp/node.rb#3537 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3532 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3550 + def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#3555 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#3510 + def name_loc; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#3560 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#3513 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#3516 + def value; end +end + +# Represents a hash literal. +# +# { a => b } +# ^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3570 +class YARP::HashNode < ::YARP::Node + # def initialize: (opening_loc: Location, elements: Array[Node], closing_loc: Location, location: Location) -> void + # + # @return [HashNode] a new instance of HashNode + # + # source://yarp//lib/yarp/node.rb#3580 + def initialize(opening_loc, elements, closing_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3588 + def accept(visitor); end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3593 + def child_nodes; end + + # def closing: () -> String + # + # source://yarp//lib/yarp/node.rb#3621 + def closing; end + + # attr_reader closing_loc: Location + # + # source://yarp//lib/yarp/node.rb#3577 + def closing_loc; end + + # def copy: (**params) -> HashNode + # + # source://yarp//lib/yarp/node.rb#3598 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3593 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3611 + def deconstruct_keys(keys); end + + # attr_reader elements: Array[Node] + # + # source://yarp//lib/yarp/node.rb#3574 + def elements; end + + # def opening: () -> String + # + # source://yarp//lib/yarp/node.rb#3616 + def opening; end + + # attr_reader opening_loc: Location + # + # source://yarp//lib/yarp/node.rb#3571 + def opening_loc; end +end + +# Represents a hash pattern in pattern matching. +# +# foo => { a: 1, b: 2 } +# ^^^^^^^^^^^^^^ +# +# foo => { a: 1, b: 2, **c } +# ^^^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3634 +class YARP::HashPatternNode < ::YARP::Node + # def initialize: (constant: Node?, assocs: Array[Node], kwrest: Node?, opening_loc: Location?, closing_loc: Location?, location: Location) -> void + # + # @return [HashPatternNode] a new instance of HashPatternNode + # + # source://yarp//lib/yarp/node.rb#3650 + def initialize(constant, assocs, kwrest, opening_loc, closing_loc, location); end + + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3660 + def accept(visitor); end + + # attr_reader assocs: Array[Node] + # + # source://yarp//lib/yarp/node.rb#3638 + def assocs; end + + # def child_nodes: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3665 + def child_nodes; end + + # def closing: () -> String? + # + # source://yarp//lib/yarp/node.rb#3695 + def closing; end + + # attr_reader closing_loc: Location? + # + # source://yarp//lib/yarp/node.rb#3647 + def closing_loc; end + + # attr_reader constant: Node? + # + # source://yarp//lib/yarp/node.rb#3635 + def constant; end + + # def copy: (**params) -> HashPatternNode + # + # source://yarp//lib/yarp/node.rb#3670 + def copy(**params); end + + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3665 + def deconstruct; end + + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3685 + def deconstruct_keys(keys); end + + # attr_reader kwrest: Node? + # + # source://yarp//lib/yarp/node.rb#3641 + def kwrest; end + + # def opening: () -> String? + # + # source://yarp//lib/yarp/node.rb#3690 + def opening; end + + # attr_reader opening_loc: Location? + # + # source://yarp//lib/yarp/node.rb#3644 + def opening_loc; end +end - # Create a new SourceLineNode node +# Represents the use of the `if` keyword, either in the block form or the modifier form. +# +# bar if foo +# ^^^^^^^^^^ +# +# if foo then bar end +# ^^^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3708 +class YARP::IfNode < ::YARP::Node + # def initialize: (if_keyword_loc: Location?, predicate: Node, statements: StatementsNode?, consequent: Node?, end_keyword_loc: Location?, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#6511 - def SourceLineNode(location = T.unsafe(nil)); end - - # Create a new SplatNode node + # @return [IfNode] a new instance of IfNode # - # source://yarp//lib/yarp/node.rb#6516 - def SplatNode(operator_loc, expression, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3724 + def initialize(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location); end - # Create a new StatementsNode node + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#6521 - def StatementsNode(body, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3734 + def accept(visitor); end - # Create a new StringConcatNode node + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6526 - def StringConcatNode(left, right, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3743 + def child_nodes; end - # Create a new StringNode node + # attr_reader consequent: Node? # - # source://yarp//lib/yarp/node.rb#6531 - def StringNode(opening_loc, content_loc, closing_loc, unescaped, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3718 + def consequent; end - # Create a new SuperNode node + # def copy: (**params) -> IfNode # - # source://yarp//lib/yarp/node.rb#6536 - def SuperNode(keyword_loc, lparen_loc, arguments, rparen_loc, block, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3748 + def copy(**params); end - # Create a new SymbolNode node + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#6541 - def SymbolNode(opening_loc, value_loc, closing_loc, unescaped, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3743 + def deconstruct; end - # Create a new TrueNode node + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#6546 - def TrueNode(location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3763 + def deconstruct_keys(keys); end - # Create a new UndefNode node + # def end_keyword: () -> String? # - # source://yarp//lib/yarp/node.rb#6551 - def UndefNode(names, keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3773 + def end_keyword; end - # Create a new UnlessNode node + # attr_reader end_keyword_loc: Location? # - # source://yarp//lib/yarp/node.rb#6556 - def UnlessNode(keyword_loc, predicate, statements, consequent, end_keyword_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3721 + def end_keyword_loc; end - # Create a new UntilNode node + # def if_keyword: () -> String? # - # source://yarp//lib/yarp/node.rb#6561 - def UntilNode(keyword_loc, predicate, statements, flags, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3768 + def if_keyword; end - # Create a new WhenNode node + # attr_reader if_keyword_loc: Location? # - # source://yarp//lib/yarp/node.rb#6566 - def WhenNode(keyword_loc, conditions, statements, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3709 + def if_keyword_loc; end - # Create a new WhileNode node + # attr_reader predicate: Node # - # source://yarp//lib/yarp/node.rb#6571 - def WhileNode(keyword_loc, predicate, statements, flags, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3712 + def predicate; end - # Create a new XStringNode node - # - # source://yarp//lib/yarp/node.rb#6576 - def XStringNode(opening_loc, content_loc, closing_loc, unescaped, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3738 + def set_newline_flag(newline_marked); end - # Create a new YieldNode node + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#6581 - def YieldNode(keyword_loc, lparen_loc, arguments, rparen_loc, location = T.unsafe(nil)); end + # source://yarp//lib/yarp/node.rb#3715 + def statements; end end -# This module is used for testing and debugging and is not meant to be used by -# consumers of this library. +# Represents an imaginary number literal. # -# source://yarp//lib/yarp.rb#323 -module YARP::Debug - class << self - # For the given source, compiles with CRuby and returns a list of all of the - # sets of local variables that were encountered. - # - # source://yarp//lib/yarp.rb#364 - def cruby_locals(source); end - - def memsize(_arg0); end - def named_captures(_arg0); end - - # source://yarp//lib/yarp.rb#470 - def newlines(source); end - - # source://yarp//lib/yarp.rb#474 - def parse_serialize_file(filepath); end - - def parse_serialize_file_metadata(_arg0, _arg1); end - def profile_file(_arg0); end - def unescape_all(_arg0); end - def unescape_minimal(_arg0); end - def unescape_none(_arg0); end +# 1.0i +# ^^^^ +# +# source://yarp//lib/yarp.rb#342 +class YARP::ImaginaryNode < ::YARP::Node + # def initialize: (numeric: Node, location: Location) -> void + # + # @return [ImaginaryNode] a new instance of ImaginaryNode + # + # source://yarp//lib/yarp/node.rb#3787 + def initialize(numeric, location); end - # For the given source, parses with YARP and returns a list of all of the - # sets of local variables that were encountered. - # - # source://yarp//lib/yarp.rb#403 - def yarp_locals(source); end - end -end + # def accept: (visitor: Visitor) -> void + # + # source://yarp//lib/yarp/node.rb#3793 + def accept(visitor); end -# source://yarp//lib/yarp.rb#324 -class YARP::Debug::ISeq - # @return [ISeq] a new instance of ISeq + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp.rb#327 - def initialize(parts); end + # source://yarp//lib/yarp/node.rb#3798 + def child_nodes; end - # source://yarp//lib/yarp.rb#343 - def each_child; end + # def copy: (**params) -> ImaginaryNode + # + # source://yarp//lib/yarp/node.rb#3803 + def copy(**params); end - # source://yarp//lib/yarp.rb#339 - def instructions; end + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] + # + # source://yarp//lib/yarp/node.rb#3798 + def deconstruct; end - # source://yarp//lib/yarp.rb#335 - def local_table; end + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # + # source://yarp//lib/yarp/node.rb#3814 + def deconstruct_keys(keys); end - # Returns the value of attribute parts. + # attr_reader numeric: Node # - # source://yarp//lib/yarp.rb#325 - def parts; end + # source://yarp//lib/yarp/node.rb#3784 + def numeric; end - # source://yarp//lib/yarp.rb#331 - def type; end + # source://yarp//lib/yarp.rb#343 + def value; end end -# Represents a method definition. +# Represents the use of the `in` keyword in a case statement. # -# def method -# end -# ^^^^^^^^^^ +# case a; in b then c end +# ^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1483 -class YARP::DefNode < ::YARP::Node - # def initialize: (name_loc: Location, receiver: Node?, parameters: Node?, body: Node?, locals: Array[Symbol], def_keyword_loc: Location, operator_loc: Location?, lparen_loc: Location?, rparen_loc: Location?, equal_loc: Location?, end_keyword_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#3824 +class YARP::InNode < ::YARP::Node + # def initialize: (pattern: Node, statements: StatementsNode?, in_loc: Location, then_loc: Location?, location: Location) -> void # - # @return [DefNode] a new instance of DefNode + # @return [InNode] a new instance of InNode # - # source://yarp//lib/yarp/node.rb#1518 - def initialize(name_loc, receiver, parameters, body, locals, def_keyword_loc, operator_loc, lparen_loc, rparen_loc, equal_loc, end_keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#3837 + def initialize(pattern, statements, in_loc, then_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1534 + # source://yarp//lib/yarp/node.rb#3846 def accept(visitor); end - # attr_reader body: Node? - # - # source://yarp//lib/yarp/node.rb#1494 - def body; end - # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1539 + # source://yarp//lib/yarp/node.rb#3851 def child_nodes; end + # def copy: (**params) -> InNode + # + # source://yarp//lib/yarp/node.rb#3856 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1539 + # source://yarp//lib/yarp/node.rb#3851 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1547 + # source://yarp//lib/yarp/node.rb#3870 def deconstruct_keys(keys); end - # def def_keyword: () -> String + # def in: () -> String # - # source://yarp//lib/yarp/node.rb#1557 - def def_keyword; end + # source://yarp//lib/yarp/node.rb#3875 + def in; end - # attr_reader def_keyword_loc: Location + # attr_reader in_loc: Location # - # source://yarp//lib/yarp/node.rb#1500 - def def_keyword_loc; end + # source://yarp//lib/yarp/node.rb#3831 + def in_loc; end - # def end_keyword: () -> String? + # attr_reader pattern: Node # - # source://yarp//lib/yarp/node.rb#1582 - def end_keyword; end + # source://yarp//lib/yarp/node.rb#3825 + def pattern; end - # attr_reader end_keyword_loc: Location? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#1515 - def end_keyword_loc; end + # source://yarp//lib/yarp/node.rb#3828 + def statements; end - # def equal: () -> String? + # def then: () -> String? # - # source://yarp//lib/yarp/node.rb#1577 - def equal; end + # source://yarp//lib/yarp/node.rb#3880 + def then; end - # attr_reader equal_loc: Location? + # attr_reader then_loc: Location? # - # source://yarp//lib/yarp/node.rb#1512 - def equal_loc; end + # source://yarp//lib/yarp/node.rb#3834 + def then_loc; end +end - # attr_reader locals: Array[Symbol] +# Represents the use of the `&&=` operator for assignment to an instance variable. +# +# @target &&= value +# ^^^^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#3890 +class YARP::InstanceVariableAndWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # - # source://yarp//lib/yarp/node.rb#1497 - def locals; end + # @return [InstanceVariableAndWriteNode] a new instance of InstanceVariableAndWriteNode + # + # source://yarp//lib/yarp/node.rb#3900 + def initialize(name_loc, operator_loc, value, location); end - # def lparen: () -> String? + # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1567 - def lparen; end + # source://yarp//lib/yarp/node.rb#3908 + def accept(visitor); end - # attr_reader lparen_loc: Location? + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1506 - def lparen_loc; end + # source://yarp//lib/yarp/node.rb#3913 + def child_nodes; end - # def name: () -> String + # def copy: (**params) -> InstanceVariableAndWriteNode # - # source://yarp//lib/yarp/node.rb#1552 - def name; end + # source://yarp//lib/yarp/node.rb#3918 + def copy(**params); end - # attr_reader name_loc: Location + # def child_nodes: () -> Array[nil | Node] + # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1485 - def name_loc; end + # source://yarp//lib/yarp/node.rb#3913 + def deconstruct; end - # def operator: () -> String? + # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1562 - def operator; end + # source://yarp//lib/yarp/node.rb#3931 + def deconstruct_keys(keys); end - # attr_reader operator_loc: Location? + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1503 - def operator_loc; end + # source://yarp//lib/yarp/node.rb#3936 + def name; end - # attr_reader parameters: Node? + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1491 - def parameters; end + # source://yarp//lib/yarp/node.rb#3891 + def name_loc; end - # attr_reader receiver: Node? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#1488 - def receiver; end + # source://yarp//lib/yarp/node.rb#3941 + def operator; end - # def rparen: () -> String? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1572 - def rparen; end + # source://yarp//lib/yarp/node.rb#3894 + def operator_loc; end - # attr_reader rparen_loc: Location? + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1509 - def rparen_loc; end + # source://yarp//lib/yarp/node.rb#3897 + def value; end end -# Represents the use of the `defined?` keyword. +# Represents assigning to an instance variable using an operator that isn't `=`. # -# defined?(a) -# ^^^^^^^^^^^ +# @target += value +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1591 -class YARP::DefinedNode < ::YARP::Node - # def initialize: (lparen_loc: Location?, value: Node, rparen_loc: Location?, keyword_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#3951 +class YARP::InstanceVariableOperatorWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, operator: Symbol, location: Location) -> void # - # @return [DefinedNode] a new instance of DefinedNode + # @return [InstanceVariableOperatorWriteNode] a new instance of InstanceVariableOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#1605 - def initialize(lparen_loc, value, rparen_loc, keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#3964 + def initialize(name_loc, operator_loc, value, operator, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1614 + # source://yarp//lib/yarp/node.rb#3973 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1619 + # source://yarp//lib/yarp/node.rb#3978 def child_nodes; end + # def copy: (**params) -> InstanceVariableOperatorWriteNode + # + # source://yarp//lib/yarp/node.rb#3983 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1619 + # source://yarp//lib/yarp/node.rb#3978 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1627 - def deconstruct_keys(keys); end - - # def keyword: () -> String - # - # source://yarp//lib/yarp/node.rb#1642 - def keyword; end - - # attr_reader keyword_loc: Location - # - # source://yarp//lib/yarp/node.rb#1602 - def keyword_loc; end + # source://yarp//lib/yarp/node.rb#3997 + def deconstruct_keys(keys); end - # def lparen: () -> String? + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1632 - def lparen; end + # source://yarp//lib/yarp/node.rb#4002 + def name; end - # attr_reader lparen_loc: Location? + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1593 - def lparen_loc; end + # source://yarp//lib/yarp/node.rb#3952 + def name_loc; end - # def rparen: () -> String? + # attr_reader operator: Symbol # - # source://yarp//lib/yarp/node.rb#1637 - def rparen; end + # source://yarp//lib/yarp/node.rb#3961 + def operator; end - # attr_reader rparen_loc: Location? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1599 - def rparen_loc; end + # source://yarp//lib/yarp/node.rb#3955 + def operator_loc; end # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1596 + # source://yarp//lib/yarp/node.rb#3958 def value; end end -# Represents an `else` clause in a `case`, `if`, or `unless` statement. +# Represents the use of the `||=` operator for assignment to an instance variable. # -# if a then b else c end -# ^^^^^^^^^^ +# @target ||= value +# ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1651 -class YARP::ElseNode < ::YARP::Node - # def initialize: (else_keyword_loc: Location, statements: Node?, end_keyword_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4012 +class YARP::InstanceVariableOrWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # - # @return [ElseNode] a new instance of ElseNode + # @return [InstanceVariableOrWriteNode] a new instance of InstanceVariableOrWriteNode # - # source://yarp//lib/yarp/node.rb#1662 - def initialize(else_keyword_loc, statements, end_keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#4022 + def initialize(name_loc, operator_loc, value, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1670 + # source://yarp//lib/yarp/node.rb#4030 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1675 + # source://yarp//lib/yarp/node.rb#4035 def child_nodes; end + # def copy: (**params) -> InstanceVariableOrWriteNode + # + # source://yarp//lib/yarp/node.rb#4040 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1675 + # source://yarp//lib/yarp/node.rb#4035 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1683 + # source://yarp//lib/yarp/node.rb#4053 def deconstruct_keys(keys); end - # def else_keyword: () -> String + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1688 - def else_keyword; end + # source://yarp//lib/yarp/node.rb#4058 + def name; end - # attr_reader else_keyword_loc: Location + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1653 - def else_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4013 + def name_loc; end - # def end_keyword: () -> String? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#1693 - def end_keyword; end + # source://yarp//lib/yarp/node.rb#4063 + def operator; end - # attr_reader end_keyword_loc: Location? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1659 - def end_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4016 + def operator_loc; end - # attr_reader statements: Node? + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1656 - def statements; end + # source://yarp//lib/yarp/node.rb#4019 + def value; end end -# Represents an interpolated set of statements. +# Represents referencing an instance variable. # -# "foo #{bar}" -# ^^^^^^ +# @foo +# ^^^^ # -# source://yarp//lib/yarp/node.rb#1702 -class YARP::EmbeddedStatementsNode < ::YARP::Node - # def initialize: (opening_loc: Location, statements: Node?, closing_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4073 +class YARP::InstanceVariableReadNode < ::YARP::Node + # def initialize: (location: Location) -> void # - # @return [EmbeddedStatementsNode] a new instance of EmbeddedStatementsNode + # @return [InstanceVariableReadNode] a new instance of InstanceVariableReadNode # - # source://yarp//lib/yarp/node.rb#1713 - def initialize(opening_loc, statements, closing_loc, location); end + # source://yarp//lib/yarp/node.rb#4074 + def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1721 + # source://yarp//lib/yarp/node.rb#4079 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1726 + # source://yarp//lib/yarp/node.rb#4084 def child_nodes; end - # def closing: () -> String - # - # source://yarp//lib/yarp/node.rb#1744 - def closing; end - - # attr_reader closing_loc: Location + # def copy: (**params) -> InstanceVariableReadNode # - # source://yarp//lib/yarp/node.rb#1710 - def closing_loc; end + # source://yarp//lib/yarp/node.rb#4089 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1726 + # source://yarp//lib/yarp/node.rb#4084 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1734 + # source://yarp//lib/yarp/node.rb#4099 def deconstruct_keys(keys); end - - # def opening: () -> String - # - # source://yarp//lib/yarp/node.rb#1739 - def opening; end - - # attr_reader opening_loc: Location - # - # source://yarp//lib/yarp/node.rb#1704 - def opening_loc; end - - # attr_reader statements: Node? - # - # source://yarp//lib/yarp/node.rb#1707 - def statements; end end -# Represents an interpolated variable. +# Represents writing to an instance variable in a context that doesn't have an explicit value. # -# "foo #@bar" -# ^^^^^ +# @foo, @bar = baz +# ^^^^ ^^^^ # -# source://yarp//lib/yarp/node.rb#1753 -class YARP::EmbeddedVariableNode < ::YARP::Node - # def initialize: (operator_loc: Location, variable: Node, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4109 +class YARP::InstanceVariableTargetNode < ::YARP::Node + # def initialize: (location: Location) -> void # - # @return [EmbeddedVariableNode] a new instance of EmbeddedVariableNode + # @return [InstanceVariableTargetNode] a new instance of InstanceVariableTargetNode # - # source://yarp//lib/yarp/node.rb#1761 - def initialize(operator_loc, variable, location); end + # source://yarp//lib/yarp/node.rb#4110 + def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1768 + # source://yarp//lib/yarp/node.rb#4115 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1773 + # source://yarp//lib/yarp/node.rb#4120 def child_nodes; end + # def copy: (**params) -> InstanceVariableTargetNode + # + # source://yarp//lib/yarp/node.rb#4125 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1773 + # source://yarp//lib/yarp/node.rb#4120 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1781 + # source://yarp//lib/yarp/node.rb#4135 def deconstruct_keys(keys); end - - # def operator: () -> String - # - # source://yarp//lib/yarp/node.rb#1786 - def operator; end - - # attr_reader operator_loc: Location - # - # source://yarp//lib/yarp/node.rb#1755 - def operator_loc; end - - # attr_reader variable: Node - # - # source://yarp//lib/yarp/node.rb#1758 - def variable; end end -# Represents an `ensure` clause in a `begin` statement. +# Represents writing to an instance variable. # -# begin -# foo -# ensure -# ^^^^^^ -# bar -# end +# @foo = 1 +# ^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1799 -class YARP::EnsureNode < ::YARP::Node - # def initialize: (ensure_keyword_loc: Location, statements: Node?, end_keyword_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4145 +class YARP::InstanceVariableWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, value: Node, operator_loc: Location, location: Location) -> void # - # @return [EnsureNode] a new instance of EnsureNode + # @return [InstanceVariableWriteNode] a new instance of InstanceVariableWriteNode # - # source://yarp//lib/yarp/node.rb#1810 - def initialize(ensure_keyword_loc, statements, end_keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#4155 + def initialize(name_loc, value, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1818 + # source://yarp//lib/yarp/node.rb#4163 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1823 + # source://yarp//lib/yarp/node.rb#4168 def child_nodes; end + # def copy: (**params) -> InstanceVariableWriteNode + # + # source://yarp//lib/yarp/node.rb#4173 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1823 + # source://yarp//lib/yarp/node.rb#4168 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1831 + # source://yarp//lib/yarp/node.rb#4186 def deconstruct_keys(keys); end - # def end_keyword: () -> String + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#1841 - def end_keyword; end + # source://yarp//lib/yarp/node.rb#4191 + def name; end - # attr_reader end_keyword_loc: Location + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#1807 - def end_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4146 + def name_loc; end - # def ensure_keyword: () -> String + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#1836 - def ensure_keyword; end + # source://yarp//lib/yarp/node.rb#4196 + def operator; end - # attr_reader ensure_keyword_loc: Location + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#1801 - def ensure_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4152 + def operator_loc; end - # attr_reader statements: Node? + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#1804 - def statements; end + # source://yarp//lib/yarp/node.rb#4149 + def value; end end -# Represents the use of the literal `false` keyword. +# Represents an integer number literal. # -# false -# ^^^^^ +# 1 +# ^ # -# source://yarp//lib/yarp/node.rb#1850 -class YARP::FalseNode < ::YARP::Node +# source://yarp//lib/yarp.rb#348 +class YARP::IntegerNode < ::YARP::Node # def initialize: (location: Location) -> void # - # @return [FalseNode] a new instance of FalseNode + # @return [IntegerNode] a new instance of IntegerNode # - # source://yarp//lib/yarp/node.rb#1852 + # source://yarp//lib/yarp/node.rb#4207 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1857 + # source://yarp//lib/yarp/node.rb#4212 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1862 + # source://yarp//lib/yarp/node.rb#4217 def child_nodes; end + # def copy: (**params) -> IntegerNode + # + # source://yarp//lib/yarp/node.rb#4222 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1862 + # source://yarp//lib/yarp/node.rb#4217 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1870 + # source://yarp//lib/yarp/node.rb#4232 def deconstruct_keys(keys); end + + # source://yarp//lib/yarp.rb#349 + def value; end end -# Represents a find pattern in pattern matching. -# -# foo in *bar, baz, *qux -# ^^^^^^^^^^^^^^^^^^^^^^ -# -# foo in [*bar, baz, *qux] -# ^^^^^^^^^^^^^^^^^^^^^^^^ +# Represents a regular expression literal that contains interpolation. # -# foo in Foo(*bar, baz, *qux) -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# /foo #{bar} baz/ +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#1885 -class YARP::FindPatternNode < ::YARP::Node - # def initialize: (constant: Node?, left: Node, requireds: Array[Node], right: Node, opening_loc: Location?, closing_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4242 +class YARP::InterpolatedRegularExpressionNode < ::YARP::Node + # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, flags: Integer, location: Location) -> void # - # @return [FindPatternNode] a new instance of FindPatternNode + # @return [InterpolatedRegularExpressionNode] a new instance of InterpolatedRegularExpressionNode # - # source://yarp//lib/yarp/node.rb#1905 - def initialize(constant, left, requireds, right, opening_loc, closing_loc, location); end + # source://yarp//lib/yarp/node.rb#4255 + def initialize(opening_loc, parts, closing_loc, flags, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#1916 + # source://yarp//lib/yarp/node.rb#4264 def accept(visitor); end + # def ascii_8bit?: () -> bool + # + # @return [Boolean] + # + # source://yarp//lib/yarp/node.rb#4328 + def ascii_8bit?; end + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1921 + # source://yarp//lib/yarp/node.rb#4274 def child_nodes; end - # def closing: () -> String? + # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#1939 + # source://yarp//lib/yarp/node.rb#4303 def closing; end - # attr_reader closing_loc: Location? + # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#1902 + # source://yarp//lib/yarp/node.rb#4249 def closing_loc; end - # attr_reader constant: Node? + # def copy: (**params) -> InterpolatedRegularExpressionNode # - # source://yarp//lib/yarp/node.rb#1887 - def constant; end + # source://yarp//lib/yarp/node.rb#4279 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#1921 + # source://yarp//lib/yarp/node.rb#4274 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#1929 + # source://yarp//lib/yarp/node.rb#4293 def deconstruct_keys(keys); end - # attr_reader left: Node - # - # source://yarp//lib/yarp/node.rb#1890 - def left; end - - # def opening: () -> String? + # def euc_jp?: () -> bool # - # source://yarp//lib/yarp/node.rb#1934 - def opening; end - - # attr_reader opening_loc: Location? + # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#1899 - def opening_loc; end + # source://yarp//lib/yarp/node.rb#4323 + def euc_jp?; end - # attr_reader requireds: Array[Node] + # def extended?: () -> bool # - # source://yarp//lib/yarp/node.rb#1893 - def requireds; end - - # attr_reader right: Node + # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#1896 - def right; end -end + # source://yarp//lib/yarp/node.rb#4318 + def extended?; end -# Represents the use of the `..` or `...` operators to create flip flops. -# -# baz if foo .. bar -# ^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#1948 -class YARP::FlipFlopNode < ::YARP::Node - # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void - # - # @return [FlipFlopNode] a new instance of FlipFlopNode + # attr_reader flags: Integer # - # source://yarp//lib/yarp/node.rb#1962 - def initialize(left, right, operator_loc, flags, location); end + # source://yarp//lib/yarp/node.rb#4252 + def flags; end - # def accept: (visitor: Visitor) -> void + # def ignore_case?: () -> bool # - # source://yarp//lib/yarp/node.rb#1971 - def accept(visitor); end - - # def child_nodes: () -> Array[nil | Node] + # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#1976 - def child_nodes; end + # source://yarp//lib/yarp/node.rb#4308 + def ignore_case?; end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # def multi_line?: () -> bool # - # source://yarp//lib/yarp/node.rb#1976 - def deconstruct; end - - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#1984 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/node.rb#4313 + def multi_line?; end - # def exclude_end?: () -> bool + # def once?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#1994 - def exclude_end?; end + # source://yarp//lib/yarp/node.rb#4343 + def once?; end - # attr_reader flags: Integer + # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#1959 - def flags; end + # source://yarp//lib/yarp/node.rb#4298 + def opening; end - # attr_reader left: Node? + # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#1950 - def left; end + # source://yarp//lib/yarp/node.rb#4243 + def opening_loc; end - # def operator: () -> String + # attr_reader parts: Array[Node] # - # source://yarp//lib/yarp/node.rb#1989 - def operator; end + # source://yarp//lib/yarp/node.rb#4246 + def parts; end - # attr_reader operator_loc: Location + # source://yarp//lib/yarp/node.rb#4268 + def set_newline_flag(newline_marked); end + + # def utf_8?: () -> bool # - # source://yarp//lib/yarp/node.rb#1956 - def operator_loc; end + # @return [Boolean] + # + # source://yarp//lib/yarp/node.rb#4338 + def utf_8?; end - # attr_reader right: Node? + # def windows_31j?: () -> bool # - # source://yarp//lib/yarp/node.rb#1953 - def right; end + # @return [Boolean] + # + # source://yarp//lib/yarp/node.rb#4333 + def windows_31j?; end end -# Represents a floating point number literal. +# Represents a string literal that contains interpolation. # -# 1.0 -# ^^^ +# "foo #{bar} baz" +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2003 -class YARP::FloatNode < ::YARP::Node - # def initialize: (location: Location) -> void +# source://yarp//lib/yarp/node.rb#4353 +class YARP::InterpolatedStringNode < ::YARP::Node + # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void # - # @return [FloatNode] a new instance of FloatNode + # @return [InterpolatedStringNode] a new instance of InterpolatedStringNode # - # source://yarp//lib/yarp/node.rb#2005 - def initialize(location); end + # source://yarp//lib/yarp/node.rb#4363 + def initialize(opening_loc, parts, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2010 + # source://yarp//lib/yarp/node.rb#4371 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2015 + # source://yarp//lib/yarp/node.rb#4381 def child_nodes; end + # def closing: () -> String? + # + # source://yarp//lib/yarp/node.rb#4409 + def closing; end + + # attr_reader closing_loc: Location? + # + # source://yarp//lib/yarp/node.rb#4360 + def closing_loc; end + + # def copy: (**params) -> InterpolatedStringNode + # + # source://yarp//lib/yarp/node.rb#4386 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2015 + # source://yarp//lib/yarp/node.rb#4381 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2023 + # source://yarp//lib/yarp/node.rb#4399 def deconstruct_keys(keys); end + + # def opening: () -> String? + # + # source://yarp//lib/yarp/node.rb#4404 + def opening; end + + # attr_reader opening_loc: Location? + # + # source://yarp//lib/yarp/node.rb#4354 + def opening_loc; end + + # attr_reader parts: Array[Node] + # + # source://yarp//lib/yarp/node.rb#4357 + def parts; end + + # source://yarp//lib/yarp/node.rb#4375 + def set_newline_flag(newline_marked); end end -# Represents the use of the `for` keyword. +# Represents a symbol literal that contains interpolation. # -# for i in a end -# ^^^^^^^^^^^^^^ +# :"foo #{bar} baz" +# ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2032 -class YARP::ForNode < ::YARP::Node - # def initialize: (index: Node, collection: Node, statements: Node?, for_keyword_loc: Location, in_keyword_loc: Location, do_keyword_loc: Location?, end_keyword_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4419 +class YARP::InterpolatedSymbolNode < ::YARP::Node + # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void # - # @return [ForNode] a new instance of ForNode + # @return [InterpolatedSymbolNode] a new instance of InterpolatedSymbolNode # - # source://yarp//lib/yarp/node.rb#2055 - def initialize(index, collection, statements, for_keyword_loc, in_keyword_loc, do_keyword_loc, end_keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#4429 + def initialize(opening_loc, parts, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2067 + # source://yarp//lib/yarp/node.rb#4437 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2072 + # source://yarp//lib/yarp/node.rb#4447 def child_nodes; end - # attr_reader collection: Node + # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#2037 - def collection; end + # source://yarp//lib/yarp/node.rb#4475 + def closing; end + + # attr_reader closing_loc: Location? + # + # source://yarp//lib/yarp/node.rb#4426 + def closing_loc; end + + # def copy: (**params) -> InterpolatedSymbolNode + # + # source://yarp//lib/yarp/node.rb#4452 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2072 + # source://yarp//lib/yarp/node.rb#4447 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2080 + # source://yarp//lib/yarp/node.rb#4465 def deconstruct_keys(keys); end - # def do_keyword: () -> String? - # - # source://yarp//lib/yarp/node.rb#2095 - def do_keyword; end - - # attr_reader do_keyword_loc: Location? - # - # source://yarp//lib/yarp/node.rb#2049 - def do_keyword_loc; end - - # def end_keyword: () -> String - # - # source://yarp//lib/yarp/node.rb#2100 - def end_keyword; end - - # attr_reader end_keyword_loc: Location - # - # source://yarp//lib/yarp/node.rb#2052 - def end_keyword_loc; end - - # def for_keyword: () -> String - # - # source://yarp//lib/yarp/node.rb#2085 - def for_keyword; end - - # attr_reader for_keyword_loc: Location - # - # source://yarp//lib/yarp/node.rb#2043 - def for_keyword_loc; end - - # def in_keyword: () -> String + # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#2090 - def in_keyword; end + # source://yarp//lib/yarp/node.rb#4470 + def opening; end - # attr_reader in_keyword_loc: Location + # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#2046 - def in_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4420 + def opening_loc; end - # attr_reader index: Node + # attr_reader parts: Array[Node] # - # source://yarp//lib/yarp/node.rb#2034 - def index; end + # source://yarp//lib/yarp/node.rb#4423 + def parts; end - # attr_reader statements: Node? - # - # source://yarp//lib/yarp/node.rb#2040 - def statements; end + # source://yarp//lib/yarp/node.rb#4441 + def set_newline_flag(newline_marked); end end -# Represents forwarding all arguments to this method to another method. +# Represents an xstring literal that contains interpolation. # -# def foo(...) -# bar(...) -# ^^^^^^^^ -# end +# `foo #{bar} baz` +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2111 -class YARP::ForwardingArgumentsNode < ::YARP::Node - # def initialize: (location: Location) -> void +# source://yarp//lib/yarp/node.rb#4485 +class YARP::InterpolatedXStringNode < ::YARP::Node + # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, location: Location) -> void # - # @return [ForwardingArgumentsNode] a new instance of ForwardingArgumentsNode + # @return [InterpolatedXStringNode] a new instance of InterpolatedXStringNode # - # source://yarp//lib/yarp/node.rb#2113 - def initialize(location); end + # source://yarp//lib/yarp/node.rb#4495 + def initialize(opening_loc, parts, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2118 + # source://yarp//lib/yarp/node.rb#4503 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2123 + # source://yarp//lib/yarp/node.rb#4513 def child_nodes; end + # def closing: () -> String + # + # source://yarp//lib/yarp/node.rb#4541 + def closing; end + + # attr_reader closing_loc: Location + # + # source://yarp//lib/yarp/node.rb#4492 + def closing_loc; end + + # def copy: (**params) -> InterpolatedXStringNode + # + # source://yarp//lib/yarp/node.rb#4518 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2123 + # source://yarp//lib/yarp/node.rb#4513 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2131 + # source://yarp//lib/yarp/node.rb#4531 def deconstruct_keys(keys); end -end - -# Represents the use of the forwarding parameter in a method, block, or lambda declaration. -# -# def foo(...) -# ^^^ -# end -# -# source://yarp//lib/yarp/node.rb#2141 -class YARP::ForwardingParameterNode < ::YARP::Node - # def initialize: (location: Location) -> void - # - # @return [ForwardingParameterNode] a new instance of ForwardingParameterNode - # - # source://yarp//lib/yarp/node.rb#2143 - def initialize(location); end - # def accept: (visitor: Visitor) -> void + # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#2148 - def accept(visitor); end + # source://yarp//lib/yarp/node.rb#4536 + def opening; end - # def child_nodes: () -> Array[nil | Node] + # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#2153 - def child_nodes; end + # source://yarp//lib/yarp/node.rb#4486 + def opening_loc; end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # attr_reader parts: Array[Node] # - # source://yarp//lib/yarp/node.rb#2153 - def deconstruct; end + # source://yarp//lib/yarp/node.rb#4489 + def parts; end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] - # - # source://yarp//lib/yarp/node.rb#2161 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/node.rb#4507 + def set_newline_flag(newline_marked); end end -# Represents the use of the `super` keyword without parentheses or arguments. +# Represents a hash literal without opening and closing braces. # -# super -# ^^^^^ +# foo(a: b) +# ^^^^ # -# source://yarp//lib/yarp/node.rb#2170 -class YARP::ForwardingSuperNode < ::YARP::Node - # def initialize: (block: Node?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4551 +class YARP::KeywordHashNode < ::YARP::Node + # def initialize: (elements: Array[Node], location: Location) -> void # - # @return [ForwardingSuperNode] a new instance of ForwardingSuperNode + # @return [KeywordHashNode] a new instance of KeywordHashNode # - # source://yarp//lib/yarp/node.rb#2175 - def initialize(block, location); end + # source://yarp//lib/yarp/node.rb#4555 + def initialize(elements, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2181 + # source://yarp//lib/yarp/node.rb#4561 def accept(visitor); end - # attr_reader block: Node? - # - # source://yarp//lib/yarp/node.rb#2172 - def block; end - # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2186 + # source://yarp//lib/yarp/node.rb#4566 def child_nodes; end + # def copy: (**params) -> KeywordHashNode + # + # source://yarp//lib/yarp/node.rb#4571 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2186 + # source://yarp//lib/yarp/node.rb#4566 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2194 + # source://yarp//lib/yarp/node.rb#4582 def deconstruct_keys(keys); end + + # attr_reader elements: Array[Node] + # + # source://yarp//lib/yarp/node.rb#4552 + def elements; end end -# Represents referencing a global variable. +# Represents a keyword parameter to a method, block, or lambda definition. # -# $foo -# ^^^^ +# def a(b:) +# ^^ +# end # -# source://yarp//lib/yarp/node.rb#2203 -class YARP::GlobalVariableReadNode < ::YARP::Node - # def initialize: (location: Location) -> void +# def a(b: 1) +# ^^^^ +# end +# +# source://yarp//lib/yarp/node.rb#4597 +class YARP::KeywordParameterNode < ::YARP::Node + # def initialize: (name_loc: Location, value: Node?, location: Location) -> void # - # @return [GlobalVariableReadNode] a new instance of GlobalVariableReadNode + # @return [KeywordParameterNode] a new instance of KeywordParameterNode # - # source://yarp//lib/yarp/node.rb#2205 - def initialize(location); end + # source://yarp//lib/yarp/node.rb#4604 + def initialize(name_loc, value, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2210 + # source://yarp//lib/yarp/node.rb#4611 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2215 + # source://yarp//lib/yarp/node.rb#4616 def child_nodes; end + # def copy: (**params) -> KeywordParameterNode + # + # source://yarp//lib/yarp/node.rb#4621 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2215 + # source://yarp//lib/yarp/node.rb#4616 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2223 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/node.rb#4633 + def deconstruct_keys(keys); end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#4638 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#4598 + def name_loc; end + + # attr_reader value: Node? + # + # source://yarp//lib/yarp/node.rb#4601 + def value; end end -# Represents writing to a global variable. +# Represents a keyword rest parameter to a method, block, or lambda definition. # -# $foo = 1 -# ^^^^^^^^ +# def a(**b) +# ^^^ +# end # -# source://yarp//lib/yarp/node.rb#2232 -class YARP::GlobalVariableWriteNode < ::YARP::Node - # def initialize: (name_loc: Location, operator_loc: Location?, value: Node?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4649 +class YARP::KeywordRestParameterNode < ::YARP::Node + # def initialize: (operator_loc: Location, name_loc: Location?, location: Location) -> void # - # @return [GlobalVariableWriteNode] a new instance of GlobalVariableWriteNode + # @return [KeywordRestParameterNode] a new instance of KeywordRestParameterNode # - # source://yarp//lib/yarp/node.rb#2243 - def initialize(name_loc, operator_loc, value, location); end + # source://yarp//lib/yarp/node.rb#4656 + def initialize(operator_loc, name_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2251 + # source://yarp//lib/yarp/node.rb#4663 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2256 + # source://yarp//lib/yarp/node.rb#4668 def child_nodes; end + # def copy: (**params) -> KeywordRestParameterNode + # + # source://yarp//lib/yarp/node.rb#4673 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2256 + # source://yarp//lib/yarp/node.rb#4668 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2264 + # source://yarp//lib/yarp/node.rb#4685 def deconstruct_keys(keys); end - # def name: () -> String + # def name: () -> String? # - # source://yarp//lib/yarp/node.rb#2269 + # source://yarp//lib/yarp/node.rb#4695 def name; end - # attr_reader name_loc: Location + # attr_reader name_loc: Location? # - # source://yarp//lib/yarp/node.rb#2234 + # source://yarp//lib/yarp/node.rb#4653 def name_loc; end - # def operator: () -> String? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#2274 + # source://yarp//lib/yarp/node.rb#4690 def operator; end - # attr_reader operator_loc: Location? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#2237 + # source://yarp//lib/yarp/node.rb#4650 def operator_loc; end - - # attr_reader value: Node? - # - # source://yarp//lib/yarp/node.rb#2240 - def value; end end -# Represents a hash literal. +# Represents using a lambda literal (not the lambda method call). # -# { a => b } -# ^^^^^^^^^^ +# ->(value) { value * 2 } +# ^^^^^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2283 -class YARP::HashNode < ::YARP::Node - # def initialize: (opening_loc: Location, elements: Array[Node], closing_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4705 +class YARP::LambdaNode < ::YARP::Node + # def initialize: (locals: Array[Symbol], operator_loc: Location, opening_loc: Location, closing_loc: Location, parameters: BlockParametersNode?, body: Node?, location: Location) -> void # - # @return [HashNode] a new instance of HashNode + # @return [LambdaNode] a new instance of LambdaNode # - # source://yarp//lib/yarp/node.rb#2294 - def initialize(opening_loc, elements, closing_loc, location); end + # source://yarp//lib/yarp/node.rb#4724 + def initialize(locals, operator_loc, opening_loc, closing_loc, parameters, body, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2302 + # source://yarp//lib/yarp/node.rb#4735 def accept(visitor); end + # attr_reader body: Node? + # + # source://yarp//lib/yarp/node.rb#4721 + def body; end + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2307 + # source://yarp//lib/yarp/node.rb#4740 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#2325 + # source://yarp//lib/yarp/node.rb#4776 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#2291 + # source://yarp//lib/yarp/node.rb#4715 def closing_loc; end + # def copy: (**params) -> LambdaNode + # + # source://yarp//lib/yarp/node.rb#4745 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2307 + # source://yarp//lib/yarp/node.rb#4740 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2315 + # source://yarp//lib/yarp/node.rb#4761 def deconstruct_keys(keys); end - # attr_reader elements: Array[Node] + # attr_reader locals: Array[Symbol] # - # source://yarp//lib/yarp/node.rb#2288 - def elements; end + # source://yarp//lib/yarp/node.rb#4706 + def locals; end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#2320 + # source://yarp//lib/yarp/node.rb#4771 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#2285 + # source://yarp//lib/yarp/node.rb#4712 def opening_loc; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#4766 + def operator; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#4709 + def operator_loc; end + + # attr_reader parameters: BlockParametersNode? + # + # source://yarp//lib/yarp/node.rb#4718 + def parameters; end end -# Represents a hash pattern in pattern matching. +# This class is responsible for lexing the source using YARP and then +# converting those tokens to be compatible with Ripper. In the vast majority +# of cases, this is a one-to-one mapping of the token type. Everything else +# generally lines up. However, there are a few cases that require special +# handling. # -# foo => { a: 1, b: 2 } -# ^^^^^^^^^^^^^^ +# source://yarp//lib/yarp/lex_compat.rb#11 +class YARP::LexCompat + # @return [LexCompat] a new instance of LexCompat + # + # source://yarp//lib/yarp/lex_compat.rb#554 + def initialize(source, filepath = T.unsafe(nil)); end + + # Returns the value of attribute filepath. + # + # source://yarp//lib/yarp/lex_compat.rb#552 + def filepath; end + + # source://yarp//lib/yarp/lex_compat.rb#559 + def result; end + + # Returns the value of attribute source. + # + # source://yarp//lib/yarp/lex_compat.rb#552 + def source; end +end + +# Ripper doesn't include the rest of the token in the event, so we need to +# trim it down to just the content on the first line when comparing. # -# foo => { a: 1, b: 2, **c } -# ^^^^^^^^^^^^^^^^^^^ +# source://yarp//lib/yarp/lex_compat.rb#205 +class YARP::LexCompat::EndContentToken < ::YARP::LexCompat::Token + # source://yarp//lib/yarp/lex_compat.rb#206 + def ==(other); end +end + +# A heredoc in this case is a list of tokens that belong to the body of the +# heredoc that should be appended onto the list of tokens when the heredoc +# closes. # -# source://yarp//lib/yarp/node.rb#2337 -class YARP::HashPatternNode < ::YARP::Node - # def initialize: (constant: Node?, assocs: Array[Node], kwrest: Node?, opening_loc: Location?, closing_loc: Location?, location: Location) -> void - # - # @return [HashPatternNode] a new instance of HashPatternNode +# source://yarp//lib/yarp/lex_compat.rb#266 +module YARP::LexCompat::Heredoc + class << self + # Here we will split between the two types of heredocs and return the + # object that will store their tokens. + # + # source://yarp//lib/yarp/lex_compat.rb#540 + def build(opening); end + end +end + +# Dash heredocs are a little more complicated. They are a list of tokens +# that need to be split on "\\\n" to mimic Ripper's behavior. We also need +# to keep track of the state that the heredoc was opened in. +# +# source://yarp//lib/yarp/lex_compat.rb#290 +class YARP::LexCompat::Heredoc::DashHeredoc + # @return [DashHeredoc] a new instance of DashHeredoc # - # source://yarp//lib/yarp/node.rb#2354 - def initialize(constant, assocs, kwrest, opening_loc, closing_loc, location); end + # source://yarp//lib/yarp/lex_compat.rb#293 + def initialize(split); end - # def accept: (visitor: Visitor) -> void + # source://yarp//lib/yarp/lex_compat.rb#298 + def <<(token); end + + # Returns the value of attribute split. # - # source://yarp//lib/yarp/node.rb#2364 - def accept(visitor); end + # source://yarp//lib/yarp/lex_compat.rb#291 + def split; end - # attr_reader assocs: Array[Node] + # source://yarp//lib/yarp/lex_compat.rb#302 + def to_a; end + + # Returns the value of attribute tokens. # - # source://yarp//lib/yarp/node.rb#2342 - def assocs; end + # source://yarp//lib/yarp/lex_compat.rb#291 + def tokens; end +end - # def child_nodes: () -> Array[nil | Node] +# Heredocs that are dedenting heredocs are a little more complicated. +# Ripper outputs on_ignored_sp tokens for the whitespace that is being +# removed from the output. YARP only modifies the node itself and keeps +# the token the same. This simplifies YARP, but makes comparing against +# Ripper much harder because there is a length mismatch. +# +# Fortunately, we already have to pull out the heredoc tokens in order to +# insert them into the stream in the correct order. As such, we can do +# some extra manipulation on the tokens to make them match Ripper's +# output by mirroring the dedent logic that Ripper uses. +# +# source://yarp//lib/yarp/lex_compat.rb#349 +class YARP::LexCompat::Heredoc::DedentingHeredoc + # @return [DedentingHeredoc] a new instance of DedentingHeredoc # - # source://yarp//lib/yarp/node.rb#2369 - def child_nodes; end + # source://yarp//lib/yarp/lex_compat.rb#354 + def initialize; end - # def closing: () -> String? + # As tokens are coming in, we track the minimum amount of common leading + # whitespace on plain string content tokens. This allows us to later + # remove that amount of whitespace from the beginning of each line. # - # source://yarp//lib/yarp/node.rb#2387 - def closing; end + # source://yarp//lib/yarp/lex_compat.rb#364 + def <<(token); end - # attr_reader closing_loc: Location? + # Returns the value of attribute dedent. # - # source://yarp//lib/yarp/node.rb#2351 - def closing_loc; end + # source://yarp//lib/yarp/lex_compat.rb#352 + def dedent; end - # attr_reader constant: Node? + # Returns the value of attribute dedent_next. # - # source://yarp//lib/yarp/node.rb#2339 - def constant; end + # source://yarp//lib/yarp/lex_compat.rb#352 + def dedent_next; end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Returns the value of attribute embexpr_balance. # - # source://yarp//lib/yarp/node.rb#2369 - def deconstruct; end + # source://yarp//lib/yarp/lex_compat.rb#352 + def embexpr_balance; end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # source://yarp//lib/yarp/lex_compat.rb#396 + def to_a; end + + # Returns the value of attribute tokens. # - # source://yarp//lib/yarp/node.rb#2377 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/lex_compat.rb#352 + def tokens; end +end - # attr_reader kwrest: Node? +# source://yarp//lib/yarp/lex_compat.rb#350 +YARP::LexCompat::Heredoc::DedentingHeredoc::TAB_WIDTH = T.let(T.unsafe(nil), Integer) + +# Heredocs that are no dash or tilde heredocs are just a list of tokens. +# We need to keep them around so that we can insert them in the correct +# order back into the token stream and set the state of the last token to +# the state that the heredoc was opened in. +# +# source://yarp//lib/yarp/lex_compat.rb#271 +class YARP::LexCompat::Heredoc::PlainHeredoc + # @return [PlainHeredoc] a new instance of PlainHeredoc # - # source://yarp//lib/yarp/node.rb#2345 - def kwrest; end + # source://yarp//lib/yarp/lex_compat.rb#274 + def initialize; end - # def opening: () -> String? + # source://yarp//lib/yarp/lex_compat.rb#278 + def <<(token); end + + # source://yarp//lib/yarp/lex_compat.rb#282 + def to_a; end + + # Returns the value of attribute tokens. # - # source://yarp//lib/yarp/node.rb#2382 - def opening; end + # source://yarp//lib/yarp/lex_compat.rb#272 + def tokens; end +end + +# Ident tokens for the most part are exactly the same, except sometimes we +# know an ident is a local when ripper doesn't (when they are introduced +# through named captures in regular expressions). In that case we don't +# compare the state. +# +# source://yarp//lib/yarp/lex_compat.rb#223 +class YARP::LexCompat::IdentToken < ::YARP::LexCompat::Token + # source://yarp//lib/yarp/lex_compat.rb#224 + def ==(other); end +end + +# Tokens where state should be ignored +# used for :on_comment, :on_heredoc_end, :on_embexpr_end +# +# source://yarp//lib/yarp/lex_compat.rb#213 +class YARP::LexCompat::IgnoreStateToken < ::YARP::LexCompat::Token + # source://yarp//lib/yarp/lex_compat.rb#214 + def ==(other); end +end + +# Ignored newlines can occasionally have a LABEL state attached to them, so +# we compare the state differently here. +# +# source://yarp//lib/yarp/lex_compat.rb#234 +class YARP::LexCompat::IgnoredNewlineToken < ::YARP::LexCompat::Token + # source://yarp//lib/yarp/lex_compat.rb#235 + def ==(other); end +end + +# If we have an identifier that follows a method name like: +# +# def foo bar +# +# then Ripper will mark bar as END|LABEL if there is a local in a parent +# scope named bar because it hasn't pushed the local table yet. We do this +# more accurately, so we need to allow comparing against both END and +# END|LABEL. +# +# source://yarp//lib/yarp/lex_compat.rb#254 +class YARP::LexCompat::ParamToken < ::YARP::LexCompat::Token + # source://yarp//lib/yarp/lex_compat.rb#255 + def ==(other); end +end + +# This is a mapping of YARP token types to Ripper token types. This is a +# many-to-one mapping because we split up our token types, whereas Ripper +# tends to group them. +# +# source://yarp//lib/yarp/lex_compat.rb#15 +YARP::LexCompat::RIPPER = T.let(T.unsafe(nil), Hash) + +# When we produce tokens, we produce the same arrays that Ripper does. +# However, we add a couple of convenience methods onto them to make them a +# little easier to work with. We delegate all other methods to the array. +# +# source://yarp//lib/yarp/lex_compat.rb#185 +class YARP::LexCompat::Token < ::SimpleDelegator + # source://yarp//lib/yarp/lex_compat.rb#190 + def event; end + + # source://yarp//lib/yarp/lex_compat.rb#186 + def location; end + + # source://yarp//lib/yarp/lex_compat.rb#198 + def state; end - # attr_reader opening_loc: Location? - # - # source://yarp//lib/yarp/node.rb#2348 - def opening_loc; end + # source://yarp//lib/yarp/lex_compat.rb#194 + def value; end end -# Represents the use of the `if` keyword, either in the block form or the modifier form. -# -# bar if foo -# ^^^^^^^^^^ +# Represents the use of the `&&=` operator for assignment to a local variable. # -# if foo then bar end -# ^^^^^^^^^^^^^^^^^^^ +# target &&= value +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2399 -class YARP::IfNode < ::YARP::Node - # def initialize: (if_keyword_loc: Location?, predicate: Node, statements: Node?, consequent: Node?, end_keyword_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4786 +class YARP::LocalVariableAndWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, constant_id: Symbol, depth: Integer, location: Location) -> void # - # @return [IfNode] a new instance of IfNode + # @return [LocalVariableAndWriteNode] a new instance of LocalVariableAndWriteNode # - # source://yarp//lib/yarp/node.rb#2416 - def initialize(if_keyword_loc, predicate, statements, consequent, end_keyword_loc, location); end + # source://yarp//lib/yarp/node.rb#4802 + def initialize(name_loc, operator_loc, value, constant_id, depth, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2426 + # source://yarp//lib/yarp/node.rb#4812 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2435 + # source://yarp//lib/yarp/node.rb#4817 def child_nodes; end - # attr_reader consequent: Node? + # attr_reader constant_id: Symbol # - # source://yarp//lib/yarp/node.rb#2410 - def consequent; end + # source://yarp//lib/yarp/node.rb#4796 + def constant_id; end + + # def copy: (**params) -> LocalVariableAndWriteNode + # + # source://yarp//lib/yarp/node.rb#4822 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2435 + # source://yarp//lib/yarp/node.rb#4817 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2443 + # source://yarp//lib/yarp/node.rb#4837 def deconstruct_keys(keys); end - # def end_keyword: () -> String? + # attr_reader depth: Integer # - # source://yarp//lib/yarp/node.rb#2453 - def end_keyword; end + # source://yarp//lib/yarp/node.rb#4799 + def depth; end - # attr_reader end_keyword_loc: Location? + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#2413 - def end_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4842 + def name; end - # def if_keyword: () -> String? + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#2448 - def if_keyword; end + # source://yarp//lib/yarp/node.rb#4787 + def name_loc; end - # attr_reader if_keyword_loc: Location? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#2401 - def if_keyword_loc; end + # source://yarp//lib/yarp/node.rb#4847 + def operator; end - # attr_reader predicate: Node + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#2404 - def predicate; end - - # source://yarp//lib/yarp/node.rb#2430 - def set_newline_flag(newline_marked); end + # source://yarp//lib/yarp/node.rb#4790 + def operator_loc; end - # attr_reader statements: Node? + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#2407 - def statements; end + # source://yarp//lib/yarp/node.rb#4793 + def value; end end -# Represents an imaginary number literal. +# Represents assigning to a local variable using an operator that isn't `=`. # -# 1.0i -# ^^^^ +# target += value +# ^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2462 -class YARP::ImaginaryNode < ::YARP::Node - # def initialize: (numeric: Node, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4857 +class YARP::LocalVariableOperatorWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, constant_id: Symbol, operator_id: Symbol, depth: Integer, location: Location) -> void # - # @return [ImaginaryNode] a new instance of ImaginaryNode + # @return [LocalVariableOperatorWriteNode] a new instance of LocalVariableOperatorWriteNode # - # source://yarp//lib/yarp/node.rb#2467 - def initialize(numeric, location); end + # source://yarp//lib/yarp/node.rb#4876 + def initialize(name_loc, operator_loc, value, constant_id, operator_id, depth, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2473 + # source://yarp//lib/yarp/node.rb#4887 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2478 + # source://yarp//lib/yarp/node.rb#4892 def child_nodes; end + # attr_reader constant_id: Symbol + # + # source://yarp//lib/yarp/node.rb#4867 + def constant_id; end + + # def copy: (**params) -> LocalVariableOperatorWriteNode + # + # source://yarp//lib/yarp/node.rb#4897 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2478 + # source://yarp//lib/yarp/node.rb#4892 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2486 + # source://yarp//lib/yarp/node.rb#4913 def deconstruct_keys(keys); end - # attr_reader numeric: Node + # attr_reader depth: Integer # - # source://yarp//lib/yarp/node.rb#2464 - def numeric; end + # source://yarp//lib/yarp/node.rb#4873 + def depth; end + + # def name: () -> String + # + # source://yarp//lib/yarp/node.rb#4918 + def name; end + + # attr_reader name_loc: Location + # + # source://yarp//lib/yarp/node.rb#4858 + def name_loc; end + + # def operator: () -> String + # + # source://yarp//lib/yarp/node.rb#4923 + def operator; end + + # attr_reader operator_id: Symbol + # + # source://yarp//lib/yarp/node.rb#4870 + def operator_id; end + + # attr_reader operator_loc: Location + # + # source://yarp//lib/yarp/node.rb#4861 + def operator_loc; end + + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#4864 + def value; end end -# Represents the use of the `in` keyword in a case statement. +# Represents the use of the `||=` operator for assignment to a local variable. # -# case a; in b then c end -# ^^^^^^^^^^^ +# target ||= value +# ^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2495 -class YARP::InNode < ::YARP::Node - # def initialize: (pattern: Node, statements: Node?, in_loc: Location, then_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#4933 +class YARP::LocalVariableOrWriteNode < ::YARP::Node + # def initialize: (name_loc: Location, operator_loc: Location, value: Node, constant_id: Symbol, depth: Integer, location: Location) -> void # - # @return [InNode] a new instance of InNode + # @return [LocalVariableOrWriteNode] a new instance of LocalVariableOrWriteNode # - # source://yarp//lib/yarp/node.rb#2509 - def initialize(pattern, statements, in_loc, then_loc, location); end + # source://yarp//lib/yarp/node.rb#4949 + def initialize(name_loc, operator_loc, value, constant_id, depth, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2518 + # source://yarp//lib/yarp/node.rb#4959 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2523 + # source://yarp//lib/yarp/node.rb#4964 def child_nodes; end + # attr_reader constant_id: Symbol + # + # source://yarp//lib/yarp/node.rb#4943 + def constant_id; end + + # def copy: (**params) -> LocalVariableOrWriteNode + # + # source://yarp//lib/yarp/node.rb#4969 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2523 + # source://yarp//lib/yarp/node.rb#4964 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2531 + # source://yarp//lib/yarp/node.rb#4984 def deconstruct_keys(keys); end - # def in: () -> String + # attr_reader depth: Integer # - # source://yarp//lib/yarp/node.rb#2536 - def in; end + # source://yarp//lib/yarp/node.rb#4946 + def depth; end - # attr_reader in_loc: Location + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#2503 - def in_loc; end + # source://yarp//lib/yarp/node.rb#4989 + def name; end - # attr_reader pattern: Node + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#2497 - def pattern; end + # source://yarp//lib/yarp/node.rb#4934 + def name_loc; end - # attr_reader statements: Node? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#2500 - def statements; end + # source://yarp//lib/yarp/node.rb#4994 + def operator; end - # def then: () -> String? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#2541 - def then; end + # source://yarp//lib/yarp/node.rb#4937 + def operator_loc; end - # attr_reader then_loc: Location? + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#2506 - def then_loc; end + # source://yarp//lib/yarp/node.rb#4940 + def value; end end -# Represents referencing an instance variable. +# Represents reading a local variable. Note that this requires that a local +# variable of the same name has already been written to in the same scope, +# otherwise it is parsed as a method call. # -# @foo -# ^^^^ +# foo +# ^^^ # -# source://yarp//lib/yarp/node.rb#2550 -class YARP::InstanceVariableReadNode < ::YARP::Node - # def initialize: (location: Location) -> void +# source://yarp//lib/yarp/node.rb#5006 +class YARP::LocalVariableReadNode < ::YARP::Node + # def initialize: (constant_id: Symbol, depth: Integer, location: Location) -> void # - # @return [InstanceVariableReadNode] a new instance of InstanceVariableReadNode + # @return [LocalVariableReadNode] a new instance of LocalVariableReadNode # - # source://yarp//lib/yarp/node.rb#2552 - def initialize(location); end + # source://yarp//lib/yarp/node.rb#5013 + def initialize(constant_id, depth, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2557 + # source://yarp//lib/yarp/node.rb#5020 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2562 + # source://yarp//lib/yarp/node.rb#5025 def child_nodes; end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] - # - # source://yarp//lib/yarp/node.rb#2562 - def deconstruct; end - - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] - # - # source://yarp//lib/yarp/node.rb#2570 - def deconstruct_keys(keys); end -end - -# Represents writing to an instance variable. -# -# @foo = 1 -# ^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#2579 -class YARP::InstanceVariableWriteNode < ::YARP::Node - # def initialize: (name_loc: Location, value: Node?, operator_loc: Location?, location: Location) -> void - # - # @return [InstanceVariableWriteNode] a new instance of InstanceVariableWriteNode - # - # source://yarp//lib/yarp/node.rb#2590 - def initialize(name_loc, value, operator_loc, location); end - - # def accept: (visitor: Visitor) -> void + # attr_reader constant_id: Symbol # - # source://yarp//lib/yarp/node.rb#2598 - def accept(visitor); end + # source://yarp//lib/yarp/node.rb#5007 + def constant_id; end - # def child_nodes: () -> Array[nil | Node] + # def copy: (**params) -> LocalVariableReadNode # - # source://yarp//lib/yarp/node.rb#2603 - def child_nodes; end + # source://yarp//lib/yarp/node.rb#5030 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2603 + # source://yarp//lib/yarp/node.rb#5025 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2611 + # source://yarp//lib/yarp/node.rb#5042 def deconstruct_keys(keys); end - # def name: () -> String - # - # source://yarp//lib/yarp/node.rb#2616 - def name; end - - # attr_reader name_loc: Location - # - # source://yarp//lib/yarp/node.rb#2581 - def name_loc; end - - # def operator: () -> String? - # - # source://yarp//lib/yarp/node.rb#2621 - def operator; end - - # attr_reader operator_loc: Location? - # - # source://yarp//lib/yarp/node.rb#2587 - def operator_loc; end - - # attr_reader value: Node? + # attr_reader depth: Integer # - # source://yarp//lib/yarp/node.rb#2584 - def value; end + # source://yarp//lib/yarp/node.rb#5010 + def depth; end end -# Represents an integer number literal. +# Represents writing to a local variable in a context that doesn't have an explicit value. # -# 1 -# ^ +# foo, bar = baz +# ^^^ ^^^ # -# source://yarp//lib/yarp/node.rb#2630 -class YARP::IntegerNode < ::YARP::Node - # def initialize: (location: Location) -> void +# source://yarp//lib/yarp/node.rb#5052 +class YARP::LocalVariableTargetNode < ::YARP::Node + # def initialize: (constant_id: Symbol, depth: Integer, location: Location) -> void # - # @return [IntegerNode] a new instance of IntegerNode + # @return [LocalVariableTargetNode] a new instance of LocalVariableTargetNode # - # source://yarp//lib/yarp/node.rb#2632 - def initialize(location); end + # source://yarp//lib/yarp/node.rb#5059 + def initialize(constant_id, depth, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2637 + # source://yarp//lib/yarp/node.rb#5066 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2642 + # source://yarp//lib/yarp/node.rb#5071 def child_nodes; end + # attr_reader constant_id: Symbol + # + # source://yarp//lib/yarp/node.rb#5053 + def constant_id; end + + # def copy: (**params) -> LocalVariableTargetNode + # + # source://yarp//lib/yarp/node.rb#5076 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2642 + # source://yarp//lib/yarp/node.rb#5071 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2650 + # source://yarp//lib/yarp/node.rb#5088 def deconstruct_keys(keys); end + + # attr_reader depth: Integer + # + # source://yarp//lib/yarp/node.rb#5056 + def depth; end end -# Represents a regular expression literal that contains interpolation. +# Represents writing to a local variable. # -# /foo #{bar} baz/ -# ^^^^^^^^^^^^^^^^ +# foo = 1 +# ^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2659 -class YARP::InterpolatedRegularExpressionNode < ::YARP::Node - # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, flags: Integer, location: Location) -> void +# source://yarp//lib/yarp/node.rb#5098 +class YARP::LocalVariableWriteNode < ::YARP::Node + # def initialize: (constant_id: Symbol, depth: Integer, value: Node, name_loc: Location, operator_loc: Location, location: Location) -> void # - # @return [InterpolatedRegularExpressionNode] a new instance of InterpolatedRegularExpressionNode + # @return [LocalVariableWriteNode] a new instance of LocalVariableWriteNode # - # source://yarp//lib/yarp/node.rb#2673 - def initialize(opening_loc, parts, closing_loc, flags, location); end + # source://yarp//lib/yarp/node.rb#5114 + def initialize(constant_id, depth, value, name_loc, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2682 + # source://yarp//lib/yarp/node.rb#5124 def accept(visitor); end - # def ascii_8bit?: () -> bool - # - # @return [Boolean] - # - # source://yarp//lib/yarp/node.rb#2735 - def ascii_8bit?; end - # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2692 + # source://yarp//lib/yarp/node.rb#5129 def child_nodes; end - # def closing: () -> String + # attr_reader constant_id: Symbol # - # source://yarp//lib/yarp/node.rb#2710 - def closing; end + # source://yarp//lib/yarp/node.rb#5099 + def constant_id; end - # attr_reader closing_loc: Location + # def copy: (**params) -> LocalVariableWriteNode # - # source://yarp//lib/yarp/node.rb#2667 - def closing_loc; end + # source://yarp//lib/yarp/node.rb#5134 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2692 + # source://yarp//lib/yarp/node.rb#5129 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2700 + # source://yarp//lib/yarp/node.rb#5149 def deconstruct_keys(keys); end - # def euc_jp?: () -> bool - # - # @return [Boolean] + # attr_reader depth: Integer # - # source://yarp//lib/yarp/node.rb#2730 - def euc_jp?; end + # source://yarp//lib/yarp/node.rb#5102 + def depth; end - # def extended?: () -> bool - # - # @return [Boolean] + # def name: () -> String # - # source://yarp//lib/yarp/node.rb#2725 - def extended?; end + # source://yarp//lib/yarp/node.rb#5154 + def name; end - # attr_reader flags: Integer + # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#2670 - def flags; end + # source://yarp//lib/yarp/node.rb#5108 + def name_loc; end - # def ignore_case?: () -> bool - # - # @return [Boolean] + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#2715 - def ignore_case?; end + # source://yarp//lib/yarp/node.rb#5159 + def operator; end - # def multi_line?: () -> bool - # - # @return [Boolean] + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#2720 - def multi_line?; end + # source://yarp//lib/yarp/node.rb#5111 + def operator_loc; end - # def once?: () -> bool - # - # @return [Boolean] + # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#2750 - def once?; end + # source://yarp//lib/yarp/node.rb#5105 + def value; end +end - # def opening: () -> String +# This represents a location in the source. +# +# source://yarp//lib/yarp.rb#37 +class YARP::Location + # @return [Location] a new instance of Location # - # source://yarp//lib/yarp/node.rb#2705 - def opening; end + # source://yarp//lib/yarp.rb#49 + def initialize(source, start_offset, length); end - # attr_reader opening_loc: Location - # - # source://yarp//lib/yarp/node.rb#2661 - def opening_loc; end + # source://yarp//lib/yarp.rb#109 + def ==(other); end - # attr_reader parts: Array[Node] + # Create a new location object with the given options. # - # source://yarp//lib/yarp/node.rb#2664 - def parts; end + # source://yarp//lib/yarp.rb#56 + def copy(**options); end - # source://yarp//lib/yarp/node.rb#2686 - def set_newline_flag(newline_marked); end + # source://yarp//lib/yarp.rb#101 + def deconstruct_keys(keys); end - # def utf_8?: () -> bool - # - # @return [Boolean] + # The column number in bytes where this location ends from the start of the + # line. # - # source://yarp//lib/yarp/node.rb#2745 - def utf_8?; end + # source://yarp//lib/yarp.rb#97 + def end_column; end - # def windows_31j?: () -> bool - # - # @return [Boolean] + # The line number where this location ends. # - # source://yarp//lib/yarp/node.rb#2740 - def windows_31j?; end -end + # source://yarp//lib/yarp.rb#85 + def end_line; end -# Represents a string literal that contains interpolation. -# -# "foo #{bar} baz" -# ^^^^^^^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#2759 -class YARP::InterpolatedStringNode < ::YARP::Node - # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void - # - # @return [InterpolatedStringNode] a new instance of InterpolatedStringNode + # The byte offset from the beginning of the source where this location ends. # - # source://yarp//lib/yarp/node.rb#2770 - def initialize(opening_loc, parts, closing_loc, location); end + # source://yarp//lib/yarp.rb#75 + def end_offset; end - # def accept: (visitor: Visitor) -> void + # Returns a string representation of this location. # - # source://yarp//lib/yarp/node.rb#2778 - def accept(visitor); end + # source://yarp//lib/yarp.rb#65 + def inspect; end - # def child_nodes: () -> Array[nil | Node] + # Returns a new location that stretches from this location to the given + # other location. Raises an error if this location is not before the other + # location or if they don't share the same source. # - # source://yarp//lib/yarp/node.rb#2788 - def child_nodes; end + # source://yarp//lib/yarp.rb#118 + def join(other); end - # def closing: () -> String? + # The length of this location in bytes. # - # source://yarp//lib/yarp/node.rb#2806 - def closing; end + # source://yarp//lib/yarp.rb#47 + def length; end - # attr_reader closing_loc: Location? - # - # source://yarp//lib/yarp/node.rb#2767 - def closing_loc; end + # source://yarp//lib/yarp.rb#105 + def pretty_print(q); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # The source code that this location represents. # - # source://yarp//lib/yarp/node.rb#2788 - def deconstruct; end + # source://yarp//lib/yarp.rb#70 + def slice; end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # The column number in bytes where this location starts from the start of + # the line. # - # source://yarp//lib/yarp/node.rb#2796 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp.rb#91 + def start_column; end - # def opening: () -> String? + # The line number where this location starts. # - # source://yarp//lib/yarp/node.rb#2801 - def opening; end + # source://yarp//lib/yarp.rb#80 + def start_line; end - # attr_reader opening_loc: Location? + # The byte offset from the beginning of the source where this location + # starts. # - # source://yarp//lib/yarp/node.rb#2761 - def opening_loc; end + # source://yarp//lib/yarp.rb#44 + def start_offset; end - # attr_reader parts: Array[Node] + protected + + # Returns the value of attribute source. # - # source://yarp//lib/yarp/node.rb#2764 - def parts; end + # source://yarp//lib/yarp.rb#40 + def source; end - # source://yarp//lib/yarp/node.rb#2782 - def set_newline_flag(newline_marked); end + class << self + # source://yarp//lib/yarp.rb#125 + def null; end + end end -# Represents a symbol literal that contains interpolation. +# source://yarp//lib/yarp/node.rb#8001 +module YARP::LoopFlags; end + +# a loop after a begin statement, so the body is executed first before the condition # -# :"foo #{bar} baz" -# ^^^^^^^^^^^^^^^^^ +# source://yarp//lib/yarp/node.rb#8003 +YARP::LoopFlags::BEGIN_MODIFIER = T.let(T.unsafe(nil), Integer) + +# Represents the use of the modifier `in` operator. # -# source://yarp//lib/yarp/node.rb#2815 -class YARP::InterpolatedSymbolNode < ::YARP::Node - # def initialize: (opening_loc: Location?, parts: Array[Node], closing_loc: Location?, location: Location) -> void +# foo in bar +# ^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#5169 +class YARP::MatchPredicateNode < ::YARP::Node + # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void # - # @return [InterpolatedSymbolNode] a new instance of InterpolatedSymbolNode + # @return [MatchPredicateNode] a new instance of MatchPredicateNode # - # source://yarp//lib/yarp/node.rb#2826 - def initialize(opening_loc, parts, closing_loc, location); end + # source://yarp//lib/yarp/node.rb#5179 + def initialize(value, pattern, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2834 + # source://yarp//lib/yarp/node.rb#5187 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2844 + # source://yarp//lib/yarp/node.rb#5192 def child_nodes; end - # def closing: () -> String? - # - # source://yarp//lib/yarp/node.rb#2862 - def closing; end - - # attr_reader closing_loc: Location? + # def copy: (**params) -> MatchPredicateNode # - # source://yarp//lib/yarp/node.rb#2823 - def closing_loc; end + # source://yarp//lib/yarp/node.rb#5197 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2844 + # source://yarp//lib/yarp/node.rb#5192 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2852 + # source://yarp//lib/yarp/node.rb#5210 def deconstruct_keys(keys); end - # def opening: () -> String? + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#2857 - def opening; end + # source://yarp//lib/yarp/node.rb#5215 + def operator; end - # attr_reader opening_loc: Location? + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#2817 - def opening_loc; end + # source://yarp//lib/yarp/node.rb#5176 + def operator_loc; end - # attr_reader parts: Array[Node] + # attr_reader pattern: Node # - # source://yarp//lib/yarp/node.rb#2820 - def parts; end + # source://yarp//lib/yarp/node.rb#5173 + def pattern; end - # source://yarp//lib/yarp/node.rb#2838 - def set_newline_flag(newline_marked); end + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#5170 + def value; end end -# Represents an xstring literal that contains interpolation. +# Represents the use of the `=>` operator. # -# `foo #{bar} baz` -# ^^^^^^^^^^^^^^^^ +# foo => bar +# ^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#2871 -class YARP::InterpolatedXStringNode < ::YARP::Node - # def initialize: (opening_loc: Location, parts: Array[Node], closing_loc: Location, location: Location) -> void +# source://yarp//lib/yarp/node.rb#5225 +class YARP::MatchRequiredNode < ::YARP::Node + # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void # - # @return [InterpolatedXStringNode] a new instance of InterpolatedXStringNode + # @return [MatchRequiredNode] a new instance of MatchRequiredNode # - # source://yarp//lib/yarp/node.rb#2882 - def initialize(opening_loc, parts, closing_loc, location); end + # source://yarp//lib/yarp/node.rb#5235 + def initialize(value, pattern, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2890 + # source://yarp//lib/yarp/node.rb#5243 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2900 + # source://yarp//lib/yarp/node.rb#5248 def child_nodes; end - # def closing: () -> String - # - # source://yarp//lib/yarp/node.rb#2918 - def closing; end - - # attr_reader closing_loc: Location + # def copy: (**params) -> MatchRequiredNode # - # source://yarp//lib/yarp/node.rb#2879 - def closing_loc; end + # source://yarp//lib/yarp/node.rb#5253 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2900 + # source://yarp//lib/yarp/node.rb#5248 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2908 + # source://yarp//lib/yarp/node.rb#5266 def deconstruct_keys(keys); end - # def opening: () -> String + # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#2913 - def opening; end + # source://yarp//lib/yarp/node.rb#5271 + def operator; end - # attr_reader opening_loc: Location + # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#2873 - def opening_loc; end + # source://yarp//lib/yarp/node.rb#5232 + def operator_loc; end - # attr_reader parts: Array[Node] + # attr_reader pattern: Node # - # source://yarp//lib/yarp/node.rb#2876 - def parts; end + # source://yarp//lib/yarp/node.rb#5229 + def pattern; end - # source://yarp//lib/yarp/node.rb#2894 - def set_newline_flag(newline_marked); end + # attr_reader value: Node + # + # source://yarp//lib/yarp/node.rb#5226 + def value; end end -# Represents a hash literal without opening and closing braces. -# -# foo(a: b) -# ^^^^ +# Represents a node that is missing from the source and results in a syntax +# error. # -# source://yarp//lib/yarp/node.rb#2927 -class YARP::KeywordHashNode < ::YARP::Node - # def initialize: (elements: Array[Node], location: Location) -> void +# source://yarp//lib/yarp/node.rb#5279 +class YARP::MissingNode < ::YARP::Node + # def initialize: (location: Location) -> void # - # @return [KeywordHashNode] a new instance of KeywordHashNode + # @return [MissingNode] a new instance of MissingNode # - # source://yarp//lib/yarp/node.rb#2932 - def initialize(elements, location); end + # source://yarp//lib/yarp/node.rb#5280 + def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2938 + # source://yarp//lib/yarp/node.rb#5285 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2943 + # source://yarp//lib/yarp/node.rb#5290 def child_nodes; end + # def copy: (**params) -> MissingNode + # + # source://yarp//lib/yarp/node.rb#5295 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2943 + # source://yarp//lib/yarp/node.rb#5290 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2951 + # source://yarp//lib/yarp/node.rb#5305 def deconstruct_keys(keys); end - - # attr_reader elements: Array[Node] - # - # source://yarp//lib/yarp/node.rb#2929 - def elements; end end -# Represents a keyword parameter to a method, block, or lambda definition. -# -# def a(b:) -# ^^ -# end -# -# def a(b: 1) -# ^^^^ -# end +# Represents a module declaration involving the `module` keyword. # -# source://yarp//lib/yarp/node.rb#2965 -class YARP::KeywordParameterNode < ::YARP::Node - # def initialize: (name_loc: Location, value: Node?, location: Location) -> void +# module Foo end +# ^^^^^^^^^^^^^^ +# +# source://yarp//lib/yarp/node.rb#5315 +class YARP::ModuleNode < ::YARP::Node + # def initialize: (locals: Array[Symbol], module_keyword_loc: Location, constant_path: Node, body: Node?, end_keyword_loc: Location, name: String, location: Location) -> void # - # @return [KeywordParameterNode] a new instance of KeywordParameterNode + # @return [ModuleNode] a new instance of ModuleNode # - # source://yarp//lib/yarp/node.rb#2973 - def initialize(name_loc, value, location); end + # source://yarp//lib/yarp/node.rb#5334 + def initialize(locals, module_keyword_loc, constant_path, body, end_keyword_loc, name, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#2980 + # source://yarp//lib/yarp/node.rb#5345 def accept(visitor); end + # attr_reader body: Node? + # + # source://yarp//lib/yarp/node.rb#5325 + def body; end + # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2985 + # source://yarp//lib/yarp/node.rb#5350 def child_nodes; end + # attr_reader constant_path: Node + # + # source://yarp//lib/yarp/node.rb#5322 + def constant_path; end + + # def copy: (**params) -> ModuleNode + # + # source://yarp//lib/yarp/node.rb#5355 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#2985 + # source://yarp//lib/yarp/node.rb#5350 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#2993 + # source://yarp//lib/yarp/node.rb#5371 def deconstruct_keys(keys); end - # def name: () -> String + # def end_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#2998 - def name; end + # source://yarp//lib/yarp/node.rb#5381 + def end_keyword; end - # attr_reader name_loc: Location + # attr_reader end_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#2967 - def name_loc; end + # source://yarp//lib/yarp/node.rb#5328 + def end_keyword_loc; end - # attr_reader value: Node? + # attr_reader locals: Array[Symbol] # - # source://yarp//lib/yarp/node.rb#2970 - def value; end + # source://yarp//lib/yarp/node.rb#5316 + def locals; end + + # def module_keyword: () -> String + # + # source://yarp//lib/yarp/node.rb#5376 + def module_keyword; end + + # attr_reader module_keyword_loc: Location + # + # source://yarp//lib/yarp/node.rb#5319 + def module_keyword_loc; end + + # attr_reader name: String + # + # source://yarp//lib/yarp/node.rb#5331 + def name; end end -# Represents a keyword rest parameter to a method, block, or lambda definition. +# Represents a multi-target expression. # -# def a(**b) -# ^^^ -# end +# a, b, c = 1, 2, 3 +# ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#3008 -class YARP::KeywordRestParameterNode < ::YARP::Node - # def initialize: (operator_loc: Location, name_loc: Location?, location: Location) -> void +# source://yarp//lib/yarp/node.rb#5391 +class YARP::MultiWriteNode < ::YARP::Node + # def initialize: (targets: Array[Node], operator_loc: Location?, value: Node?, lparen_loc: Location?, rparen_loc: Location?, location: Location) -> void # - # @return [KeywordRestParameterNode] a new instance of KeywordRestParameterNode + # @return [MultiWriteNode] a new instance of MultiWriteNode # - # source://yarp//lib/yarp/node.rb#3016 - def initialize(operator_loc, name_loc, location); end + # source://yarp//lib/yarp/node.rb#5407 + def initialize(targets, operator_loc, value, lparen_loc, rparen_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3023 + # source://yarp//lib/yarp/node.rb#5417 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3028 + # source://yarp//lib/yarp/node.rb#5422 def child_nodes; end + # def copy: (**params) -> MultiWriteNode + # + # source://yarp//lib/yarp/node.rb#5427 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3028 + # source://yarp//lib/yarp/node.rb#5422 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3036 + # source://yarp//lib/yarp/node.rb#5442 def deconstruct_keys(keys); end - # def name: () -> String? + # def lparen: () -> String? # - # source://yarp//lib/yarp/node.rb#3046 - def name; end + # source://yarp//lib/yarp/node.rb#5452 + def lparen; end - # attr_reader name_loc: Location? + # attr_reader lparen_loc: Location? # - # source://yarp//lib/yarp/node.rb#3013 - def name_loc; end + # source://yarp//lib/yarp/node.rb#5401 + def lparen_loc; end - # def operator: () -> String + # def operator: () -> String? # - # source://yarp//lib/yarp/node.rb#3041 + # source://yarp//lib/yarp/node.rb#5447 def operator; end - # attr_reader operator_loc: Location + # attr_reader operator_loc: Location? # - # source://yarp//lib/yarp/node.rb#3010 + # source://yarp//lib/yarp/node.rb#5395 def operator_loc; end + + # def rparen: () -> String? + # + # source://yarp//lib/yarp/node.rb#5457 + def rparen; end + + # attr_reader rparen_loc: Location? + # + # source://yarp//lib/yarp/node.rb#5404 + def rparen_loc; end + + # attr_reader targets: Array[Node] + # + # source://yarp//lib/yarp/node.rb#5392 + def targets; end + + # attr_reader value: Node? + # + # source://yarp//lib/yarp/node.rb#5398 + def value; end end -# Represents using a lambda literal (not the lambda method call). -# -# ->(value) { value * 2 } -# ^^^^^^^^^^^^^^^^^^^^^^^ +# This visitor walks through the tree and copies each node as it is being +# visited. This is useful for consumers that want to mutate the tree, as you +# can change subtrees in place without effecting the rest of the tree. # -# source://yarp//lib/yarp/node.rb#3055 -class YARP::LambdaNode < ::YARP::Node - # def initialize: (locals: Array[Symbol], opening_loc: Location, parameters: Node?, body: Node?, location: Location) -> void - # - # @return [LambdaNode] a new instance of LambdaNode +# source://yarp//lib/yarp/mutation_visitor.rb#13 +class YARP::MutationVisitor < ::YARP::BasicVisitor + # Copy a AliasNode node # - # source://yarp//lib/yarp/node.rb#3069 - def initialize(locals, opening_loc, parameters, body, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#14 + def visit_alias_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a AlternationPatternNode node # - # source://yarp//lib/yarp/node.rb#3078 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#19 + def visit_alternation_pattern_node(node); end - # attr_reader body: Node? + # Copy a AndNode node # - # source://yarp//lib/yarp/node.rb#3066 - def body; end + # source://yarp//lib/yarp/mutation_visitor.rb#24 + def visit_and_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a ArgumentsNode node # - # source://yarp//lib/yarp/node.rb#3083 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#29 + def visit_arguments_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a ArrayNode node # - # source://yarp//lib/yarp/node.rb#3083 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#34 + def visit_array_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a ArrayPatternNode node # - # source://yarp//lib/yarp/node.rb#3091 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#39 + def visit_array_pattern_node(node); end - # attr_reader locals: Array[Symbol] + # Copy a AssocNode node # - # source://yarp//lib/yarp/node.rb#3057 - def locals; end + # source://yarp//lib/yarp/mutation_visitor.rb#44 + def visit_assoc_node(node); end - # def opening: () -> String + # Copy a AssocSplatNode node # - # source://yarp//lib/yarp/node.rb#3096 - def opening; end + # source://yarp//lib/yarp/mutation_visitor.rb#49 + def visit_assoc_splat_node(node); end - # attr_reader opening_loc: Location + # Copy a BackReferenceReadNode node # - # source://yarp//lib/yarp/node.rb#3060 - def opening_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#54 + def visit_back_reference_read_node(node); end - # attr_reader parameters: Node? + # Copy a BeginNode node # - # source://yarp//lib/yarp/node.rb#3063 - def parameters; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#59 + def visit_begin_node(node); end -# This class is responsible for lexing the source using YARP and then -# converting those tokens to be compatible with Ripper. In the vast majority -# of cases, this is a one-to-one mapping of the token type. Everything else -# generally lines up. However, there are a few cases that require special -# handling. -# -# source://yarp//lib/yarp/lex_compat.rb#11 -class YARP::LexCompat - # @return [LexCompat] a new instance of LexCompat + # Copy a BlockArgumentNode node # - # source://yarp//lib/yarp/lex_compat.rb#546 - def initialize(source, filepath = T.unsafe(nil)); end + # source://yarp//lib/yarp/mutation_visitor.rb#64 + def visit_block_argument_node(node); end - # Returns the value of attribute filepath. + # Copy a BlockNode node # - # source://yarp//lib/yarp/lex_compat.rb#544 - def filepath; end + # source://yarp//lib/yarp/mutation_visitor.rb#69 + def visit_block_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#551 - def result; end + # Copy a BlockParameterNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#74 + def visit_block_parameter_node(node); end - # Returns the value of attribute source. + # Copy a BlockParametersNode node # - # source://yarp//lib/yarp/lex_compat.rb#544 - def source; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#79 + def visit_block_parameters_node(node); end -# It is extremely non obvious which state the parser is in when comments get -# dispatched. Because of this we don't both comparing state when comparing -# against other comment tokens. -# -# source://yarp//lib/yarp/lex_compat.rb#214 -class YARP::LexCompat::CommentToken < ::YARP::LexCompat::Token - # source://yarp//lib/yarp/lex_compat.rb#215 - def ==(other); end -end + # Copy a BreakNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#84 + def visit_break_node(node); end -# Ripper doesn't include the rest of the token in the event, so we need to -# trim it down to just the content on the first line when comparing. -# -# source://yarp//lib/yarp/lex_compat.rb#205 -class YARP::LexCompat::EndContentToken < ::YARP::LexCompat::Token - # source://yarp//lib/yarp/lex_compat.rb#206 - def ==(other); end -end + # Copy a CallNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#89 + def visit_call_node(node); end -# A heredoc in this case is a list of tokens that belong to the body of the -# heredoc that should be appended onto the list of tokens when the heredoc -# closes. -# -# source://yarp//lib/yarp/lex_compat.rb#258 -module YARP::LexCompat::Heredoc - class << self - # Here we will split between the two types of heredocs and return the - # object that will store their tokens. - # - # source://yarp//lib/yarp/lex_compat.rb#532 - def build(opening); end - end -end + # Copy a CallOperatorAndWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#94 + def visit_call_operator_and_write_node(node); end -# Dash heredocs are a little more complicated. They are a list of tokens -# that need to be split on "\\\n" to mimic Ripper's behavior. We also need -# to keep track of the state that the heredoc was opened in. -# -# source://yarp//lib/yarp/lex_compat.rb#282 -class YARP::LexCompat::Heredoc::DashHeredoc - # @return [DashHeredoc] a new instance of DashHeredoc + # Copy a CallOperatorOrWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#285 - def initialize(split); end + # source://yarp//lib/yarp/mutation_visitor.rb#99 + def visit_call_operator_or_write_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#290 - def <<(token); end + # Copy a CallOperatorWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#104 + def visit_call_operator_write_node(node); end - # Returns the value of attribute split. + # Copy a CapturePatternNode node # - # source://yarp//lib/yarp/lex_compat.rb#283 - def split; end + # source://yarp//lib/yarp/mutation_visitor.rb#109 + def visit_capture_pattern_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#294 - def to_a; end + # Copy a CaseNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#114 + def visit_case_node(node); end - # Returns the value of attribute tokens. + # Copy a ClassNode node # - # source://yarp//lib/yarp/lex_compat.rb#283 - def tokens; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#119 + def visit_class_node(node); end -# Heredocs that are dedenting heredocs are a little more complicated. -# Ripper outputs on_ignored_sp tokens for the whitespace that is being -# removed from the output. YARP only modifies the node itself and keeps -# the token the same. This simplifies YARP, but makes comparing against -# Ripper much harder because there is a length mismatch. -# -# Fortunately, we already have to pull out the heredoc tokens in order to -# insert them into the stream in the correct order. As such, we can do -# some extra manipulation on the tokens to make them match Ripper's -# output by mirroring the dedent logic that Ripper uses. -# -# source://yarp//lib/yarp/lex_compat.rb#341 -class YARP::LexCompat::Heredoc::DedentingHeredoc - # @return [DedentingHeredoc] a new instance of DedentingHeredoc + # Copy a ClassVariableAndWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#346 - def initialize; end + # source://yarp//lib/yarp/mutation_visitor.rb#124 + def visit_class_variable_and_write_node(node); end - # As tokens are coming in, we track the minimum amount of common leading - # whitespace on plain string content tokens. This allows us to later - # remove that amount of whitespace from the beginning of each line. + # Copy a ClassVariableOperatorWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#356 - def <<(token); end + # source://yarp//lib/yarp/mutation_visitor.rb#129 + def visit_class_variable_operator_write_node(node); end - # Returns the value of attribute dedent. + # Copy a ClassVariableOrWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#344 - def dedent; end + # source://yarp//lib/yarp/mutation_visitor.rb#134 + def visit_class_variable_or_write_node(node); end - # Returns the value of attribute dedent_next. + # Copy a ClassVariableReadNode node # - # source://yarp//lib/yarp/lex_compat.rb#344 - def dedent_next; end + # source://yarp//lib/yarp/mutation_visitor.rb#139 + def visit_class_variable_read_node(node); end - # Returns the value of attribute embexpr_balance. + # Copy a ClassVariableTargetNode node # - # source://yarp//lib/yarp/lex_compat.rb#344 - def embexpr_balance; end + # source://yarp//lib/yarp/mutation_visitor.rb#144 + def visit_class_variable_target_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#388 - def to_a; end + # Copy a ClassVariableWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#149 + def visit_class_variable_write_node(node); end - # Returns the value of attribute tokens. + # Copy a ConstantAndWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#344 - def tokens; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#154 + def visit_constant_and_write_node(node); end -# source://yarp//lib/yarp/lex_compat.rb#342 -YARP::LexCompat::Heredoc::DedentingHeredoc::TAB_WIDTH = T.let(T.unsafe(nil), Integer) + # Copy a ConstantOperatorWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#159 + def visit_constant_operator_write_node(node); end -# Heredocs that are no dash or tilde heredocs are just a list of tokens. -# We need to keep them around so that we can insert them in the correct -# order back into the token stream and set the state of the last token to -# the state that the heredoc was opened in. -# -# source://yarp//lib/yarp/lex_compat.rb#263 -class YARP::LexCompat::Heredoc::PlainHeredoc - # @return [PlainHeredoc] a new instance of PlainHeredoc + # Copy a ConstantOrWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#266 - def initialize; end + # source://yarp//lib/yarp/mutation_visitor.rb#164 + def visit_constant_or_write_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#270 - def <<(token); end + # Copy a ConstantPathAndWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#169 + def visit_constant_path_and_write_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#274 - def to_a; end + # Copy a ConstantPathNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#174 + def visit_constant_path_node(node); end - # Returns the value of attribute tokens. + # Copy a ConstantPathOperatorWriteNode node # - # source://yarp//lib/yarp/lex_compat.rb#264 - def tokens; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#179 + def visit_constant_path_operator_write_node(node); end -# Heredoc end tokens are emitted in an odd order, so we don't compare the -# state on them. -# -# source://yarp//lib/yarp/lex_compat.rb#222 -class YARP::LexCompat::HeredocEndToken < ::YARP::LexCompat::Token - # source://yarp//lib/yarp/lex_compat.rb#223 - def ==(other); end -end + # Copy a ConstantPathOrWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#184 + def visit_constant_path_or_write_node(node); end -# Ident tokens for the most part are exactly the same, except sometimes we -# know an ident is a local when ripper doesn't (when they are introduced -# through named captures in regular expressions). In that case we don't -# compare the state. -# -# source://yarp//lib/yarp/lex_compat.rb#232 -class YARP::LexCompat::IdentToken < ::YARP::LexCompat::Token - # source://yarp//lib/yarp/lex_compat.rb#233 - def ==(other); end -end + # Copy a ConstantPathTargetNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#189 + def visit_constant_path_target_node(node); end -# Ignored newlines can occasionally have a LABEL state attached to them, so -# we compare the state differently here. -# -# source://yarp//lib/yarp/lex_compat.rb#243 -class YARP::LexCompat::IgnoredNewlineToken < ::YARP::LexCompat::Token - # source://yarp//lib/yarp/lex_compat.rb#244 - def ==(other); end -end + # Copy a ConstantPathWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#194 + def visit_constant_path_write_node(node); end -# This is a mapping of YARP token types to Ripper token types. This is a -# many-to-one mapping because we split up our token types, whereas Ripper -# tends to group them. -# -# source://yarp//lib/yarp/lex_compat.rb#15 -YARP::LexCompat::RIPPER = T.let(T.unsafe(nil), Hash) + # Copy a ConstantReadNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#199 + def visit_constant_read_node(node); end -# When we produce tokens, we produce the same arrays that Ripper does. -# However, we add a couple of convenience methods onto them to make them a -# little easier to work with. We delegate all other methods to the array. -# -# source://yarp//lib/yarp/lex_compat.rb#185 -class YARP::LexCompat::Token < ::SimpleDelegator - # source://yarp//lib/yarp/lex_compat.rb#190 - def event; end + # Copy a ConstantTargetNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#204 + def visit_constant_target_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#186 - def location; end + # Copy a ConstantWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#209 + def visit_constant_write_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#198 - def state; end + # Copy a DefNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#214 + def visit_def_node(node); end - # source://yarp//lib/yarp/lex_compat.rb#194 - def value; end -end + # Copy a DefinedNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#219 + def visit_defined_node(node); end -# Represents reading a local variable. Note that this requires that a local -# variable of the same name has already been written to in the same scope, -# otherwise it is parsed as a method call. -# -# foo -# ^^^ -# -# source://yarp//lib/yarp/node.rb#3107 -class YARP::LocalVariableReadNode < ::YARP::Node - # def initialize: (constant_id: Symbol, depth: Integer, location: Location) -> void + # Copy a ElseNode node # - # @return [LocalVariableReadNode] a new instance of LocalVariableReadNode + # source://yarp//lib/yarp/mutation_visitor.rb#224 + def visit_else_node(node); end + + # Copy a EmbeddedStatementsNode node # - # source://yarp//lib/yarp/node.rb#3115 - def initialize(constant_id, depth, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#229 + def visit_embedded_statements_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a EmbeddedVariableNode node # - # source://yarp//lib/yarp/node.rb#3122 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#234 + def visit_embedded_variable_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a EnsureNode node # - # source://yarp//lib/yarp/node.rb#3127 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#239 + def visit_ensure_node(node); end - # attr_reader constant_id: Symbol + # Copy a FalseNode node # - # source://yarp//lib/yarp/node.rb#3109 - def constant_id; end + # source://yarp//lib/yarp/mutation_visitor.rb#244 + def visit_false_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a FindPatternNode node # - # source://yarp//lib/yarp/node.rb#3127 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#249 + def visit_find_pattern_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a FlipFlopNode node # - # source://yarp//lib/yarp/node.rb#3135 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#254 + def visit_flip_flop_node(node); end - # attr_reader depth: Integer + # Copy a FloatNode node # - # source://yarp//lib/yarp/node.rb#3112 - def depth; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#259 + def visit_float_node(node); end -# Represents writing to a local variable. -# -# foo = 1 -# ^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3144 -class YARP::LocalVariableWriteNode < ::YARP::Node - # def initialize: (constant_id: Symbol, depth: Integer, value: Node?, name_loc: Location, operator_loc: Location?, location: Location) -> void + # Copy a ForNode node # - # @return [LocalVariableWriteNode] a new instance of LocalVariableWriteNode + # source://yarp//lib/yarp/mutation_visitor.rb#264 + def visit_for_node(node); end + + # Copy a ForwardingArgumentsNode node # - # source://yarp//lib/yarp/node.rb#3161 - def initialize(constant_id, depth, value, name_loc, operator_loc, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#269 + def visit_forwarding_arguments_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a ForwardingParameterNode node # - # source://yarp//lib/yarp/node.rb#3171 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#274 + def visit_forwarding_parameter_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a ForwardingSuperNode node # - # source://yarp//lib/yarp/node.rb#3176 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#279 + def visit_forwarding_super_node(node); end - # attr_reader constant_id: Symbol + # Copy a GlobalVariableAndWriteNode node # - # source://yarp//lib/yarp/node.rb#3146 - def constant_id; end + # source://yarp//lib/yarp/mutation_visitor.rb#284 + def visit_global_variable_and_write_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a GlobalVariableOperatorWriteNode node # - # source://yarp//lib/yarp/node.rb#3176 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#289 + def visit_global_variable_operator_write_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a GlobalVariableOrWriteNode node # - # source://yarp//lib/yarp/node.rb#3184 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#294 + def visit_global_variable_or_write_node(node); end - # attr_reader depth: Integer + # Copy a GlobalVariableReadNode node # - # source://yarp//lib/yarp/node.rb#3149 - def depth; end + # source://yarp//lib/yarp/mutation_visitor.rb#299 + def visit_global_variable_read_node(node); end - # def name: () -> String + # Copy a GlobalVariableTargetNode node # - # source://yarp//lib/yarp/node.rb#3189 - def name; end + # source://yarp//lib/yarp/mutation_visitor.rb#304 + def visit_global_variable_target_node(node); end - # attr_reader name_loc: Location + # Copy a GlobalVariableWriteNode node # - # source://yarp//lib/yarp/node.rb#3155 - def name_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#309 + def visit_global_variable_write_node(node); end - # def operator: () -> String? + # Copy a HashNode node # - # source://yarp//lib/yarp/node.rb#3194 - def operator; end + # source://yarp//lib/yarp/mutation_visitor.rb#314 + def visit_hash_node(node); end - # attr_reader operator_loc: Location? + # Copy a HashPatternNode node # - # source://yarp//lib/yarp/node.rb#3158 - def operator_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#319 + def visit_hash_pattern_node(node); end - # attr_reader value: Node? + # Copy a IfNode node # - # source://yarp//lib/yarp/node.rb#3152 - def value; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#324 + def visit_if_node(node); end -# This represents a location in the source. -# -# source://yarp//lib/yarp.rb#37 -class YARP::Location - # @return [Location] a new instance of Location + # Copy a ImaginaryNode node # - # source://yarp//lib/yarp.rb#49 - def initialize(source, start_offset, length); end + # source://yarp//lib/yarp/mutation_visitor.rb#329 + def visit_imaginary_node(node); end - # source://yarp//lib/yarp.rb#99 - def ==(other); end + # Copy a InNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#334 + def visit_in_node(node); end - # source://yarp//lib/yarp.rb#91 - def deconstruct_keys(keys); end + # Copy a InstanceVariableAndWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#339 + def visit_instance_variable_and_write_node(node); end - # The column number in bytes where this location ends from the start of the - # line. + # Copy a InstanceVariableOperatorWriteNode node # - # source://yarp//lib/yarp.rb#87 - def end_column; end + # source://yarp//lib/yarp/mutation_visitor.rb#344 + def visit_instance_variable_operator_write_node(node); end - # The line number where this location ends. + # Copy a InstanceVariableOrWriteNode node # - # source://yarp//lib/yarp.rb#75 - def end_line; end + # source://yarp//lib/yarp/mutation_visitor.rb#349 + def visit_instance_variable_or_write_node(node); end - # The byte offset from the beginning of the source where this location ends. + # Copy a InstanceVariableReadNode node # - # source://yarp//lib/yarp.rb#65 - def end_offset; end + # source://yarp//lib/yarp/mutation_visitor.rb#354 + def visit_instance_variable_read_node(node); end - # source://yarp//lib/yarp.rb#55 - def inspect; end + # Copy a InstanceVariableTargetNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#359 + def visit_instance_variable_target_node(node); end - # The length of this location in bytes. + # Copy a InstanceVariableWriteNode node # - # source://yarp//lib/yarp.rb#47 - def length; end + # source://yarp//lib/yarp/mutation_visitor.rb#364 + def visit_instance_variable_write_node(node); end - # source://yarp//lib/yarp.rb#95 - def pretty_print(q); end + # Copy a IntegerNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#369 + def visit_integer_node(node); end - # The source code that this location represents. + # Copy a InterpolatedRegularExpressionNode node # - # source://yarp//lib/yarp.rb#60 - def slice; end + # source://yarp//lib/yarp/mutation_visitor.rb#374 + def visit_interpolated_regular_expression_node(node); end - # The column number in bytes where this location starts from the start of - # the line. + # Copy a InterpolatedStringNode node # - # source://yarp//lib/yarp.rb#81 - def start_column; end + # source://yarp//lib/yarp/mutation_visitor.rb#379 + def visit_interpolated_string_node(node); end - # The line number where this location starts. + # Copy a InterpolatedSymbolNode node # - # source://yarp//lib/yarp.rb#70 - def start_line; end + # source://yarp//lib/yarp/mutation_visitor.rb#384 + def visit_interpolated_symbol_node(node); end - # The byte offset from the beginning of the source where this location - # starts. + # Copy a InterpolatedXStringNode node # - # source://yarp//lib/yarp.rb#44 - def start_offset; end + # source://yarp//lib/yarp/mutation_visitor.rb#389 + def visit_interpolated_x_string_node(node); end - private + # Copy a KeywordHashNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#394 + def visit_keyword_hash_node(node); end - # Returns the value of attribute source. + # Copy a KeywordParameterNode node # - # source://yarp//lib/yarp.rb#40 - def source; end + # source://yarp//lib/yarp/mutation_visitor.rb#399 + def visit_keyword_parameter_node(node); end - class << self - # source://yarp//lib/yarp.rb#105 - def null; end - end -end + # Copy a KeywordRestParameterNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#404 + def visit_keyword_rest_parameter_node(node); end -# source://yarp//lib/yarp/node.rb#5635 -module YARP::LoopFlags; end + # Copy a LambdaNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#409 + def visit_lambda_node(node); end -# a loop after a begin statement, so the body is executed first before the condition -# -# source://yarp//lib/yarp/node.rb#5637 -YARP::LoopFlags::BEGIN_MODIFIER = T.let(T.unsafe(nil), Integer) + # Copy a LocalVariableAndWriteNode node + # + # source://yarp//lib/yarp/mutation_visitor.rb#414 + def visit_local_variable_and_write_node(node); end -# Represents the use of the modifier `in` operator. -# -# foo in bar -# ^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3203 -class YARP::MatchPredicateNode < ::YARP::Node - # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void + # Copy a LocalVariableOperatorWriteNode node # - # @return [MatchPredicateNode] a new instance of MatchPredicateNode + # source://yarp//lib/yarp/mutation_visitor.rb#419 + def visit_local_variable_operator_write_node(node); end + + # Copy a LocalVariableOrWriteNode node # - # source://yarp//lib/yarp/node.rb#3214 - def initialize(value, pattern, operator_loc, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#424 + def visit_local_variable_or_write_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a LocalVariableReadNode node # - # source://yarp//lib/yarp/node.rb#3222 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#429 + def visit_local_variable_read_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a LocalVariableTargetNode node # - # source://yarp//lib/yarp/node.rb#3227 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#434 + def visit_local_variable_target_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a LocalVariableWriteNode node # - # source://yarp//lib/yarp/node.rb#3227 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#439 + def visit_local_variable_write_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a MatchPredicateNode node # - # source://yarp//lib/yarp/node.rb#3235 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#444 + def visit_match_predicate_node(node); end - # def operator: () -> String + # Copy a MatchRequiredNode node # - # source://yarp//lib/yarp/node.rb#3240 - def operator; end + # source://yarp//lib/yarp/mutation_visitor.rb#449 + def visit_match_required_node(node); end - # attr_reader operator_loc: Location + # Copy a MissingNode node # - # source://yarp//lib/yarp/node.rb#3211 - def operator_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#454 + def visit_missing_node(node); end - # attr_reader pattern: Node + # Copy a ModuleNode node # - # source://yarp//lib/yarp/node.rb#3208 - def pattern; end + # source://yarp//lib/yarp/mutation_visitor.rb#459 + def visit_module_node(node); end - # attr_reader value: Node + # Copy a MultiWriteNode node # - # source://yarp//lib/yarp/node.rb#3205 - def value; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#464 + def visit_multi_write_node(node); end -# Represents the use of the `=>` operator. -# -# foo => bar -# ^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3249 -class YARP::MatchRequiredNode < ::YARP::Node - # def initialize: (value: Node, pattern: Node, operator_loc: Location, location: Location) -> void + # Copy a NextNode node # - # @return [MatchRequiredNode] a new instance of MatchRequiredNode + # source://yarp//lib/yarp/mutation_visitor.rb#469 + def visit_next_node(node); end + + # Copy a NilNode node # - # source://yarp//lib/yarp/node.rb#3260 - def initialize(value, pattern, operator_loc, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#474 + def visit_nil_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a NoKeywordsParameterNode node # - # source://yarp//lib/yarp/node.rb#3268 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#479 + def visit_no_keywords_parameter_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a NumberedReferenceReadNode node # - # source://yarp//lib/yarp/node.rb#3273 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#484 + def visit_numbered_reference_read_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a OptionalParameterNode node # - # source://yarp//lib/yarp/node.rb#3273 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#489 + def visit_optional_parameter_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a OrNode node # - # source://yarp//lib/yarp/node.rb#3281 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#494 + def visit_or_node(node); end - # def operator: () -> String + # Copy a ParametersNode node # - # source://yarp//lib/yarp/node.rb#3286 - def operator; end + # source://yarp//lib/yarp/mutation_visitor.rb#499 + def visit_parameters_node(node); end - # attr_reader operator_loc: Location + # Copy a ParenthesesNode node # - # source://yarp//lib/yarp/node.rb#3257 - def operator_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#504 + def visit_parentheses_node(node); end - # attr_reader pattern: Node + # Copy a PinnedExpressionNode node # - # source://yarp//lib/yarp/node.rb#3254 - def pattern; end + # source://yarp//lib/yarp/mutation_visitor.rb#509 + def visit_pinned_expression_node(node); end - # attr_reader value: Node + # Copy a PinnedVariableNode node # - # source://yarp//lib/yarp/node.rb#3251 - def value; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#514 + def visit_pinned_variable_node(node); end -# Represents a node that is missing from the source and results in a syntax -# error. -# -# source://yarp//lib/yarp/node.rb#3293 -class YARP::MissingNode < ::YARP::Node - # def initialize: (location: Location) -> void + # Copy a PostExecutionNode node # - # @return [MissingNode] a new instance of MissingNode + # source://yarp//lib/yarp/mutation_visitor.rb#519 + def visit_post_execution_node(node); end + + # Copy a PreExecutionNode node # - # source://yarp//lib/yarp/node.rb#3295 - def initialize(location); end + # source://yarp//lib/yarp/mutation_visitor.rb#524 + def visit_pre_execution_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a ProgramNode node # - # source://yarp//lib/yarp/node.rb#3300 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#529 + def visit_program_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a RangeNode node # - # source://yarp//lib/yarp/node.rb#3305 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#534 + def visit_range_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a RationalNode node # - # source://yarp//lib/yarp/node.rb#3305 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#539 + def visit_rational_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a RedoNode node # - # source://yarp//lib/yarp/node.rb#3313 - def deconstruct_keys(keys); end -end + # source://yarp//lib/yarp/mutation_visitor.rb#544 + def visit_redo_node(node); end -# Represents a module declaration involving the `module` keyword. -# -# module Foo end -# ^^^^^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3322 -class YARP::ModuleNode < ::YARP::Node - # def initialize: (locals: Array[Symbol], module_keyword_loc: Location, constant_path: Node, body: Node?, end_keyword_loc: Location, location: Location) -> void + # Copy a RegularExpressionNode node # - # @return [ModuleNode] a new instance of ModuleNode + # source://yarp//lib/yarp/mutation_visitor.rb#549 + def visit_regular_expression_node(node); end + + # Copy a RequiredDestructuredParameterNode node # - # source://yarp//lib/yarp/node.rb#3339 - def initialize(locals, module_keyword_loc, constant_path, body, end_keyword_loc, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#554 + def visit_required_destructured_parameter_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a RequiredParameterNode node # - # source://yarp//lib/yarp/node.rb#3349 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#559 + def visit_required_parameter_node(node); end - # attr_reader body: Node? + # Copy a RescueModifierNode node # - # source://yarp//lib/yarp/node.rb#3333 - def body; end + # source://yarp//lib/yarp/mutation_visitor.rb#564 + def visit_rescue_modifier_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a RescueNode node # - # source://yarp//lib/yarp/node.rb#3354 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#569 + def visit_rescue_node(node); end - # attr_reader constant_path: Node + # Copy a RestParameterNode node # - # source://yarp//lib/yarp/node.rb#3330 - def constant_path; end + # source://yarp//lib/yarp/mutation_visitor.rb#574 + def visit_rest_parameter_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a RetryNode node # - # source://yarp//lib/yarp/node.rb#3354 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#579 + def visit_retry_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a ReturnNode node # - # source://yarp//lib/yarp/node.rb#3362 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#584 + def visit_return_node(node); end - # def end_keyword: () -> String + # Copy a SelfNode node # - # source://yarp//lib/yarp/node.rb#3372 - def end_keyword; end + # source://yarp//lib/yarp/mutation_visitor.rb#589 + def visit_self_node(node); end - # attr_reader end_keyword_loc: Location + # Copy a SingletonClassNode node # - # source://yarp//lib/yarp/node.rb#3336 - def end_keyword_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#594 + def visit_singleton_class_node(node); end - # attr_reader locals: Array[Symbol] + # Copy a SourceEncodingNode node # - # source://yarp//lib/yarp/node.rb#3324 - def locals; end + # source://yarp//lib/yarp/mutation_visitor.rb#599 + def visit_source_encoding_node(node); end - # def module_keyword: () -> String + # Copy a SourceFileNode node # - # source://yarp//lib/yarp/node.rb#3367 - def module_keyword; end + # source://yarp//lib/yarp/mutation_visitor.rb#604 + def visit_source_file_node(node); end - # attr_reader module_keyword_loc: Location + # Copy a SourceLineNode node # - # source://yarp//lib/yarp/node.rb#3327 - def module_keyword_loc; end -end + # source://yarp//lib/yarp/mutation_visitor.rb#609 + def visit_source_line_node(node); end -# Represents a multi-target expression. -# -# a, b, c = 1, 2, 3 -# ^^^^^^^^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3381 -class YARP::MultiWriteNode < ::YARP::Node - # def initialize: (targets: Array[Node], operator_loc: Location?, value: Node?, lparen_loc: Location?, rparen_loc: Location?, location: Location) -> void + # Copy a SplatNode node # - # @return [MultiWriteNode] a new instance of MultiWriteNode + # source://yarp//lib/yarp/mutation_visitor.rb#614 + def visit_splat_node(node); end + + # Copy a StatementsNode node # - # source://yarp//lib/yarp/node.rb#3398 - def initialize(targets, operator_loc, value, lparen_loc, rparen_loc, location); end + # source://yarp//lib/yarp/mutation_visitor.rb#619 + def visit_statements_node(node); end - # def accept: (visitor: Visitor) -> void + # Copy a StringConcatNode node # - # source://yarp//lib/yarp/node.rb#3408 - def accept(visitor); end + # source://yarp//lib/yarp/mutation_visitor.rb#624 + def visit_string_concat_node(node); end - # def child_nodes: () -> Array[nil | Node] + # Copy a StringNode node # - # source://yarp//lib/yarp/node.rb#3413 - def child_nodes; end + # source://yarp//lib/yarp/mutation_visitor.rb#629 + def visit_string_node(node); end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] + # Copy a SuperNode node # - # source://yarp//lib/yarp/node.rb#3413 - def deconstruct; end + # source://yarp//lib/yarp/mutation_visitor.rb#634 + def visit_super_node(node); end - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] + # Copy a SymbolNode node # - # source://yarp//lib/yarp/node.rb#3421 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/mutation_visitor.rb#639 + def visit_symbol_node(node); end - # def lparen: () -> String? + # Copy a TrueNode node # - # source://yarp//lib/yarp/node.rb#3431 - def lparen; end + # source://yarp//lib/yarp/mutation_visitor.rb#644 + def visit_true_node(node); end - # attr_reader lparen_loc: Location? + # Copy a UndefNode node # - # source://yarp//lib/yarp/node.rb#3392 - def lparen_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#649 + def visit_undef_node(node); end - # def operator: () -> String? + # Copy a UnlessNode node # - # source://yarp//lib/yarp/node.rb#3426 - def operator; end + # source://yarp//lib/yarp/mutation_visitor.rb#654 + def visit_unless_node(node); end - # attr_reader operator_loc: Location? + # Copy a UntilNode node # - # source://yarp//lib/yarp/node.rb#3386 - def operator_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#659 + def visit_until_node(node); end - # def rparen: () -> String? + # Copy a WhenNode node # - # source://yarp//lib/yarp/node.rb#3436 - def rparen; end + # source://yarp//lib/yarp/mutation_visitor.rb#664 + def visit_when_node(node); end - # attr_reader rparen_loc: Location? + # Copy a WhileNode node # - # source://yarp//lib/yarp/node.rb#3395 - def rparen_loc; end + # source://yarp//lib/yarp/mutation_visitor.rb#669 + def visit_while_node(node); end - # attr_reader targets: Array[Node] + # Copy a XStringNode node # - # source://yarp//lib/yarp/node.rb#3383 - def targets; end + # source://yarp//lib/yarp/mutation_visitor.rb#674 + def visit_x_string_node(node); end - # attr_reader value: Node? + # Copy a YieldNode node # - # source://yarp//lib/yarp/node.rb#3389 - def value; end + # source://yarp//lib/yarp/mutation_visitor.rb#679 + def visit_yield_node(node); end end # Represents the use of the `next` keyword. @@ -5182,49 +7951,54 @@ end # next 1 # ^^^^^^ # -# source://yarp//lib/yarp/node.rb#3445 +# source://yarp//lib/yarp/node.rb#5467 class YARP::NextNode < ::YARP::Node - # def initialize: (arguments: Node?, keyword_loc: Location, location: Location) -> void + # def initialize: (arguments: ArgumentsNode?, keyword_loc: Location, location: Location) -> void # # @return [NextNode] a new instance of NextNode # - # source://yarp//lib/yarp/node.rb#3453 + # source://yarp//lib/yarp/node.rb#5474 def initialize(arguments, keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3460 + # source://yarp//lib/yarp/node.rb#5481 def accept(visitor); end - # attr_reader arguments: Node? + # attr_reader arguments: ArgumentsNode? # - # source://yarp//lib/yarp/node.rb#3447 + # source://yarp//lib/yarp/node.rb#5468 def arguments; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3465 + # source://yarp//lib/yarp/node.rb#5486 def child_nodes; end + # def copy: (**params) -> NextNode + # + # source://yarp//lib/yarp/node.rb#5491 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3465 + # source://yarp//lib/yarp/node.rb#5486 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3473 + # source://yarp//lib/yarp/node.rb#5503 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#3478 + # source://yarp//lib/yarp/node.rb#5508 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#3450 + # source://yarp//lib/yarp/node.rb#5471 def keyword_loc; end end @@ -5233,34 +8007,39 @@ end # nil # ^^^ # -# source://yarp//lib/yarp/node.rb#3487 +# source://yarp//lib/yarp/node.rb#5518 class YARP::NilNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [NilNode] a new instance of NilNode # - # source://yarp//lib/yarp/node.rb#3489 + # source://yarp//lib/yarp/node.rb#5519 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3494 + # source://yarp//lib/yarp/node.rb#5524 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3499 + # source://yarp//lib/yarp/node.rb#5529 def child_nodes; end + # def copy: (**params) -> NilNode + # + # source://yarp//lib/yarp/node.rb#5534 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3499 + # source://yarp//lib/yarp/node.rb#5529 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3507 + # source://yarp//lib/yarp/node.rb#5544 def deconstruct_keys(keys); end end @@ -5270,80 +8049,85 @@ end # ^^^^^ # end # -# source://yarp//lib/yarp/node.rb#3517 +# source://yarp//lib/yarp/node.rb#5555 class YARP::NoKeywordsParameterNode < ::YARP::Node # def initialize: (operator_loc: Location, keyword_loc: Location, location: Location) -> void # # @return [NoKeywordsParameterNode] a new instance of NoKeywordsParameterNode # - # source://yarp//lib/yarp/node.rb#3525 + # source://yarp//lib/yarp/node.rb#5562 def initialize(operator_loc, keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3532 + # source://yarp//lib/yarp/node.rb#5569 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3537 + # source://yarp//lib/yarp/node.rb#5574 def child_nodes; end + # def copy: (**params) -> NoKeywordsParameterNode + # + # source://yarp//lib/yarp/node.rb#5579 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3537 + # source://yarp//lib/yarp/node.rb#5574 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3545 + # source://yarp//lib/yarp/node.rb#5591 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#3555 + # source://yarp//lib/yarp/node.rb#5601 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#3522 + # source://yarp//lib/yarp/node.rb#5559 def keyword_loc; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#3550 + # source://yarp//lib/yarp/node.rb#5596 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#3519 + # source://yarp//lib/yarp/node.rb#5556 def operator_loc; end end # This represents a node in the tree. # -# source://yarp//lib/yarp.rb#277 +# source://yarp//lib/yarp.rb#297 class YARP::Node # Returns the value of attribute location. # - # source://yarp//lib/yarp.rb#278 + # source://yarp//lib/yarp.rb#298 def location; end # @return [Boolean] # - # source://yarp//lib/yarp.rb#280 + # source://yarp//lib/yarp.rb#300 def newline?; end - # source://yarp//lib/yarp.rb#297 + # source://yarp//lib/yarp.rb#317 def pretty_print(q); end - # source://yarp//lib/yarp.rb#284 + # source://yarp//lib/yarp.rb#304 def set_newline_flag(newline_marked); end # Slice the location of the node from the source. # - # source://yarp//lib/yarp.rb#293 + # source://yarp//lib/yarp.rb#313 def slice; end end @@ -5352,91 +8136,40 @@ end # $1 # ^^ # -# source://yarp//lib/yarp/node.rb#3564 +# source://yarp//lib/yarp/node.rb#5611 class YARP::NumberedReferenceReadNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [NumberedReferenceReadNode] a new instance of NumberedReferenceReadNode # - # source://yarp//lib/yarp/node.rb#3566 + # source://yarp//lib/yarp/node.rb#5612 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3571 + # source://yarp//lib/yarp/node.rb#5617 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3576 + # source://yarp//lib/yarp/node.rb#5622 def child_nodes; end - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] - # - # source://yarp//lib/yarp/node.rb#3576 - def deconstruct; end - - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] - # - # source://yarp//lib/yarp/node.rb#3584 - def deconstruct_keys(keys); end -end - -# Represents the use of an operator on a write. -# -# target += value -# ^^^^^^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3593 -class YARP::OperatorWriteNode < ::YARP::Node - # def initialize: (target: Node, operator_loc: Location, operator: Symbol, value: Node, location: Location) -> void - # - # @return [OperatorWriteNode] a new instance of OperatorWriteNode - # - # source://yarp//lib/yarp/node.rb#3607 - def initialize(target, operator_loc, operator, value, location); end - - # def accept: (visitor: Visitor) -> void - # - # source://yarp//lib/yarp/node.rb#3616 - def accept(visitor); end - - # def child_nodes: () -> Array[nil | Node] + # def copy: (**params) -> NumberedReferenceReadNode # - # source://yarp//lib/yarp/node.rb#3621 - def child_nodes; end + # source://yarp//lib/yarp/node.rb#5627 + def copy(**params); end # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3621 + # source://yarp//lib/yarp/node.rb#5622 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3629 + # source://yarp//lib/yarp/node.rb#5637 def deconstruct_keys(keys); end - - # attr_reader operator: Symbol - # - # source://yarp//lib/yarp/node.rb#3601 - def operator; end - - # attr_reader operator_loc: Location - # - # source://yarp//lib/yarp/node.rb#3598 - def operator_loc; end - - # attr_reader target: Node - # - # source://yarp//lib/yarp/node.rb#3595 - def target; end - - # attr_reader value: Node - # - # source://yarp//lib/yarp/node.rb#3604 - def value; end end # Represents an optional parameter to a method, block, or lambda definition. @@ -5445,64 +8178,69 @@ end # ^^^^^ # end # -# source://yarp//lib/yarp/node.rb#3639 +# source://yarp//lib/yarp/node.rb#5648 class YARP::OptionalParameterNode < ::YARP::Node # def initialize: (constant_id: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void # # @return [OptionalParameterNode] a new instance of OptionalParameterNode # - # source://yarp//lib/yarp/node.rb#3653 + # source://yarp//lib/yarp/node.rb#5661 def initialize(constant_id, name_loc, operator_loc, value, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3662 + # source://yarp//lib/yarp/node.rb#5670 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3667 + # source://yarp//lib/yarp/node.rb#5675 def child_nodes; end # attr_reader constant_id: Symbol # - # source://yarp//lib/yarp/node.rb#3641 + # source://yarp//lib/yarp/node.rb#5649 def constant_id; end + # def copy: (**params) -> OptionalParameterNode + # + # source://yarp//lib/yarp/node.rb#5680 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3667 + # source://yarp//lib/yarp/node.rb#5675 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3675 + # source://yarp//lib/yarp/node.rb#5694 def deconstruct_keys(keys); end # def name: () -> String # - # source://yarp//lib/yarp/node.rb#3680 + # source://yarp//lib/yarp/node.rb#5699 def name; end # attr_reader name_loc: Location # - # source://yarp//lib/yarp/node.rb#3644 + # source://yarp//lib/yarp/node.rb#5652 def name_loc; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#3685 + # source://yarp//lib/yarp/node.rb#5704 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#3647 + # source://yarp//lib/yarp/node.rb#5655 def operator_loc; end # attr_reader value: Node # - # source://yarp//lib/yarp/node.rb#3650 + # source://yarp//lib/yarp/node.rb#5658 def value; end end @@ -5511,111 +8249,60 @@ end # left or right # ^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#3694 +# source://yarp//lib/yarp/node.rb#5714 class YARP::OrNode < ::YARP::Node # def initialize: (left: Node, right: Node, operator_loc: Location, location: Location) -> void # # @return [OrNode] a new instance of OrNode # - # source://yarp//lib/yarp/node.rb#3705 + # source://yarp//lib/yarp/node.rb#5724 def initialize(left, right, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3713 + # source://yarp//lib/yarp/node.rb#5732 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3718 + # source://yarp//lib/yarp/node.rb#5737 def child_nodes; end + # def copy: (**params) -> OrNode + # + # source://yarp//lib/yarp/node.rb#5742 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3718 + # source://yarp//lib/yarp/node.rb#5737 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3726 + # source://yarp//lib/yarp/node.rb#5755 def deconstruct_keys(keys); end # attr_reader left: Node # - # source://yarp//lib/yarp/node.rb#3696 - def left; end - - # def operator: () -> String - # - # source://yarp//lib/yarp/node.rb#3731 - def operator; end - - # attr_reader operator_loc: Location - # - # source://yarp//lib/yarp/node.rb#3702 - def operator_loc; end - - # attr_reader right: Node - # - # source://yarp//lib/yarp/node.rb#3699 - def right; end -end - -# Represents the use of the `||=` operator. -# -# target ||= value -# ^^^^^^^^^^^^^^^^ -# -# source://yarp//lib/yarp/node.rb#3740 -class YARP::OrWriteNode < ::YARP::Node - # def initialize: (target: Node, value: Node, operator_loc: Location, location: Location) -> void - # - # @return [OrWriteNode] a new instance of OrWriteNode - # - # source://yarp//lib/yarp/node.rb#3751 - def initialize(target, value, operator_loc, location); end - - # def accept: (visitor: Visitor) -> void - # - # source://yarp//lib/yarp/node.rb#3759 - def accept(visitor); end - - # def child_nodes: () -> Array[nil | Node] - # - # source://yarp//lib/yarp/node.rb#3764 - def child_nodes; end - - # def child_nodes: () -> Array[nil | Node] - # def deconstruct: () -> Array[nil | Node] - # - # source://yarp//lib/yarp/node.rb#3764 - def deconstruct; end - - # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] - # - # source://yarp//lib/yarp/node.rb#3772 - def deconstruct_keys(keys); end + # source://yarp//lib/yarp/node.rb#5715 + def left; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#3777 + # source://yarp//lib/yarp/node.rb#5760 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#3748 + # source://yarp//lib/yarp/node.rb#5721 def operator_loc; end - # attr_reader target: Node - # - # source://yarp//lib/yarp/node.rb#3742 - def target; end - - # attr_reader value: Node + # attr_reader right: Node # - # source://yarp//lib/yarp/node.rb#3745 - def value; end + # source://yarp//lib/yarp/node.rb#5718 + def right; end end # source://yarp//lib/yarp/pack.rb#4 @@ -5846,69 +8533,74 @@ YARP::Pack::UTF8 = T.let(T.unsafe(nil), Symbol) # ^^^^^^^ # end # -# source://yarp//lib/yarp/node.rb#3787 +# source://yarp//lib/yarp/node.rb#5771 class YARP::ParametersNode < ::YARP::Node - # def initialize: (requireds: Array[Node], optionals: Array[Node], posts: Array[Node], rest: Node?, keywords: Array[Node], keyword_rest: Node?, block: Node?, location: Location) -> void + # def initialize: (requireds: Array[Node], optionals: Array[Node], posts: Array[Node], rest: RestParameterNode?, keywords: Array[Node], keyword_rest: Node?, block: BlockParameterNode?, location: Location) -> void # # @return [ParametersNode] a new instance of ParametersNode # - # source://yarp//lib/yarp/node.rb#3810 + # source://yarp//lib/yarp/node.rb#5793 def initialize(requireds, optionals, posts, rest, keywords, keyword_rest, block, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3822 + # source://yarp//lib/yarp/node.rb#5805 def accept(visitor); end - # attr_reader block: Node? + # attr_reader block: BlockParameterNode? # - # source://yarp//lib/yarp/node.rb#3807 + # source://yarp//lib/yarp/node.rb#5790 def block; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3827 + # source://yarp//lib/yarp/node.rb#5810 def child_nodes; end + # def copy: (**params) -> ParametersNode + # + # source://yarp//lib/yarp/node.rb#5815 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3827 + # source://yarp//lib/yarp/node.rb#5810 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3835 + # source://yarp//lib/yarp/node.rb#5832 def deconstruct_keys(keys); end # attr_reader keyword_rest: Node? # - # source://yarp//lib/yarp/node.rb#3804 + # source://yarp//lib/yarp/node.rb#5787 def keyword_rest; end # attr_reader keywords: Array[Node] # - # source://yarp//lib/yarp/node.rb#3801 + # source://yarp//lib/yarp/node.rb#5784 def keywords; end # attr_reader optionals: Array[Node] # - # source://yarp//lib/yarp/node.rb#3792 + # source://yarp//lib/yarp/node.rb#5775 def optionals; end # attr_reader posts: Array[Node] # - # source://yarp//lib/yarp/node.rb#3795 + # source://yarp//lib/yarp/node.rb#5778 def posts; end # attr_reader requireds: Array[Node] # - # source://yarp//lib/yarp/node.rb#3789 + # source://yarp//lib/yarp/node.rb#5772 def requireds; end - # attr_reader rest: Node? + # attr_reader rest: RestParameterNode? # - # source://yarp//lib/yarp/node.rb#3798 + # source://yarp//lib/yarp/node.rb#5781 def rest; end end @@ -5917,85 +8609,90 @@ end # (10 + 34) # ^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#3844 +# source://yarp//lib/yarp/node.rb#5842 class YARP::ParenthesesNode < ::YARP::Node # def initialize: (body: Node?, opening_loc: Location, closing_loc: Location, location: Location) -> void # # @return [ParenthesesNode] a new instance of ParenthesesNode # - # source://yarp//lib/yarp/node.rb#3855 + # source://yarp//lib/yarp/node.rb#5852 def initialize(body, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3863 + # source://yarp//lib/yarp/node.rb#5860 def accept(visitor); end # attr_reader body: Node? # - # source://yarp//lib/yarp/node.rb#3846 + # source://yarp//lib/yarp/node.rb#5843 def body; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3872 + # source://yarp//lib/yarp/node.rb#5869 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#3890 + # source://yarp//lib/yarp/node.rb#5897 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#3852 + # source://yarp//lib/yarp/node.rb#5849 def closing_loc; end + # def copy: (**params) -> ParenthesesNode + # + # source://yarp//lib/yarp/node.rb#5874 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3872 + # source://yarp//lib/yarp/node.rb#5869 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3880 + # source://yarp//lib/yarp/node.rb#5887 def deconstruct_keys(keys); end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#3885 + # source://yarp//lib/yarp/node.rb#5892 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#3849 + # source://yarp//lib/yarp/node.rb#5846 def opening_loc; end - # source://yarp//lib/yarp/node.rb#3867 + # source://yarp//lib/yarp/node.rb#5864 def set_newline_flag(newline_marked); end end # This represents an error that was encountered during parsing. # -# source://yarp//lib/yarp.rb#127 +# source://yarp//lib/yarp.rb#147 class YARP::ParseError # @return [ParseError] a new instance of ParseError # - # source://yarp//lib/yarp.rb#130 + # source://yarp//lib/yarp.rb#150 def initialize(message, location); end - # source://yarp//lib/yarp.rb#135 + # source://yarp//lib/yarp.rb#155 def deconstruct_keys(keys); end # Returns the value of attribute location. # - # source://yarp//lib/yarp.rb#128 + # source://yarp//lib/yarp.rb#148 def location; end # Returns the value of attribute message. # - # source://yarp//lib/yarp.rb#128 + # source://yarp//lib/yarp.rb#148 def message; end end @@ -6003,100 +8700,100 @@ end # the AST, any comments that were encounters, and any errors that were # encountered. # -# source://yarp//lib/yarp.rb#178 +# source://yarp//lib/yarp.rb#198 class YARP::ParseResult # @return [ParseResult] a new instance of ParseResult # - # source://yarp//lib/yarp.rb#181 + # source://yarp//lib/yarp.rb#201 def initialize(value, comments, errors, warnings, source); end # Returns the value of attribute comments. # - # source://yarp//lib/yarp.rb#179 + # source://yarp//lib/yarp.rb#199 def comments; end - # source://yarp//lib/yarp.rb#189 + # source://yarp//lib/yarp.rb#209 def deconstruct_keys(keys); end # Returns the value of attribute errors. # - # source://yarp//lib/yarp.rb#179 + # source://yarp//lib/yarp.rb#199 def errors; end # @return [Boolean] # - # source://yarp//lib/yarp.rb#197 + # source://yarp//lib/yarp.rb#217 def failure?; end - # source://yarp//lib/yarp.rb#233 + # source://yarp//lib/yarp.rb#253 def mark_newlines; end # Returns the value of attribute source. # - # source://yarp//lib/yarp.rb#179 + # source://yarp//lib/yarp.rb#199 def source; end # @return [Boolean] # - # source://yarp//lib/yarp.rb#193 + # source://yarp//lib/yarp.rb#213 def success?; end # Returns the value of attribute value. # - # source://yarp//lib/yarp.rb#179 + # source://yarp//lib/yarp.rb#199 def value; end # Returns the value of attribute warnings. # - # source://yarp//lib/yarp.rb#179 + # source://yarp//lib/yarp.rb#199 def warnings; end end # Keep in sync with Java MarkNewlinesVisitor # -# source://yarp//lib/yarp.rb#202 +# source://yarp//lib/yarp.rb#222 class YARP::ParseResult::MarkNewlinesVisitor < ::YARP::Visitor # @return [MarkNewlinesVisitor] a new instance of MarkNewlinesVisitor # - # source://yarp//lib/yarp.rb#203 + # source://yarp//lib/yarp.rb#223 def initialize(newline_marked); end - # source://yarp//lib/yarp.rb#207 + # source://yarp//lib/yarp.rb#227 def visit_block_node(node); end - # source://yarp//lib/yarp.rb#218 + # source://yarp//lib/yarp.rb#238 def visit_if_node(node); end - # source://yarp//lib/yarp.rb#207 + # source://yarp//lib/yarp.rb#227 def visit_lambda_node(node); end - # source://yarp//lib/yarp.rb#224 + # source://yarp//lib/yarp.rb#244 def visit_statements_node(node); end - # source://yarp//lib/yarp.rb#218 + # source://yarp//lib/yarp.rb#238 def visit_unless_node(node); end end # This represents a warning that was encountered during parsing. # -# source://yarp//lib/yarp.rb#141 +# source://yarp//lib/yarp.rb#161 class YARP::ParseWarning # @return [ParseWarning] a new instance of ParseWarning # - # source://yarp//lib/yarp.rb#144 + # source://yarp//lib/yarp.rb#164 def initialize(message, location); end - # source://yarp//lib/yarp.rb#149 + # source://yarp//lib/yarp.rb#169 def deconstruct_keys(keys); end # Returns the value of attribute location. # - # source://yarp//lib/yarp.rb#142 + # source://yarp//lib/yarp.rb#162 def location; end # Returns the value of attribute message. # - # source://yarp//lib/yarp.rb#142 + # source://yarp//lib/yarp.rb#162 def message; end end @@ -6106,69 +8803,74 @@ end # foo in ^(bar) # ^^^^^^ # -# source://yarp//lib/yarp/node.rb#3900 +# source://yarp//lib/yarp/node.rb#5908 class YARP::PinnedExpressionNode < ::YARP::Node # def initialize: (expression: Node, operator_loc: Location, lparen_loc: Location, rparen_loc: Location, location: Location) -> void # # @return [PinnedExpressionNode] a new instance of PinnedExpressionNode # - # source://yarp//lib/yarp/node.rb#3914 + # source://yarp//lib/yarp/node.rb#5921 def initialize(expression, operator_loc, lparen_loc, rparen_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3923 + # source://yarp//lib/yarp/node.rb#5930 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3928 + # source://yarp//lib/yarp/node.rb#5935 def child_nodes; end + # def copy: (**params) -> PinnedExpressionNode + # + # source://yarp//lib/yarp/node.rb#5940 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3928 + # source://yarp//lib/yarp/node.rb#5935 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3936 + # source://yarp//lib/yarp/node.rb#5954 def deconstruct_keys(keys); end # attr_reader expression: Node # - # source://yarp//lib/yarp/node.rb#3902 + # source://yarp//lib/yarp/node.rb#5909 def expression; end # def lparen: () -> String # - # source://yarp//lib/yarp/node.rb#3946 + # source://yarp//lib/yarp/node.rb#5964 def lparen; end # attr_reader lparen_loc: Location # - # source://yarp//lib/yarp/node.rb#3908 + # source://yarp//lib/yarp/node.rb#5915 def lparen_loc; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#3941 + # source://yarp//lib/yarp/node.rb#5959 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#3905 + # source://yarp//lib/yarp/node.rb#5912 def operator_loc; end # def rparen: () -> String # - # source://yarp//lib/yarp/node.rb#3951 + # source://yarp//lib/yarp/node.rb#5969 def rparen; end # attr_reader rparen_loc: Location # - # source://yarp//lib/yarp/node.rb#3911 + # source://yarp//lib/yarp/node.rb#5918 def rparen_loc; end end @@ -6178,49 +8880,54 @@ end # foo in ^bar # ^^^^ # -# source://yarp//lib/yarp/node.rb#3961 +# source://yarp//lib/yarp/node.rb#5980 class YARP::PinnedVariableNode < ::YARP::Node # def initialize: (variable: Node, operator_loc: Location, location: Location) -> void # # @return [PinnedVariableNode] a new instance of PinnedVariableNode # - # source://yarp//lib/yarp/node.rb#3969 + # source://yarp//lib/yarp/node.rb#5987 def initialize(variable, operator_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#3976 + # source://yarp//lib/yarp/node.rb#5994 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3981 + # source://yarp//lib/yarp/node.rb#5999 def child_nodes; end + # def copy: (**params) -> PinnedVariableNode + # + # source://yarp//lib/yarp/node.rb#6004 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#3981 + # source://yarp//lib/yarp/node.rb#5999 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#3989 + # source://yarp//lib/yarp/node.rb#6016 def deconstruct_keys(keys); end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#3994 + # source://yarp//lib/yarp/node.rb#6021 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#3966 + # source://yarp//lib/yarp/node.rb#5984 def operator_loc; end # attr_reader variable: Node # - # source://yarp//lib/yarp/node.rb#3963 + # source://yarp//lib/yarp/node.rb#5981 def variable; end end @@ -6229,69 +8936,74 @@ end # END { foo } # ^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4003 +# source://yarp//lib/yarp/node.rb#6031 class YARP::PostExecutionNode < ::YARP::Node - # def initialize: (statements: Node?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void + # def initialize: (statements: StatementsNode?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void # # @return [PostExecutionNode] a new instance of PostExecutionNode # - # source://yarp//lib/yarp/node.rb#4017 + # source://yarp//lib/yarp/node.rb#6044 def initialize(statements, keyword_loc, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4026 + # source://yarp//lib/yarp/node.rb#6053 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4031 + # source://yarp//lib/yarp/node.rb#6058 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#4054 + # source://yarp//lib/yarp/node.rb#6092 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#4014 + # source://yarp//lib/yarp/node.rb#6041 def closing_loc; end + # def copy: (**params) -> PostExecutionNode + # + # source://yarp//lib/yarp/node.rb#6063 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4031 + # source://yarp//lib/yarp/node.rb#6058 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4039 + # source://yarp//lib/yarp/node.rb#6077 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4044 + # source://yarp//lib/yarp/node.rb#6082 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4008 + # source://yarp//lib/yarp/node.rb#6035 def keyword_loc; end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#4049 + # source://yarp//lib/yarp/node.rb#6087 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#4011 + # source://yarp//lib/yarp/node.rb#6038 def opening_loc; end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#4005 + # source://yarp//lib/yarp/node.rb#6032 def statements; end end @@ -6300,121 +9012,131 @@ end # BEGIN { foo } # ^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4063 +# source://yarp//lib/yarp/node.rb#6102 class YARP::PreExecutionNode < ::YARP::Node - # def initialize: (statements: Node?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void + # def initialize: (statements: StatementsNode?, keyword_loc: Location, opening_loc: Location, closing_loc: Location, location: Location) -> void # # @return [PreExecutionNode] a new instance of PreExecutionNode # - # source://yarp//lib/yarp/node.rb#4077 + # source://yarp//lib/yarp/node.rb#6115 def initialize(statements, keyword_loc, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4086 + # source://yarp//lib/yarp/node.rb#6124 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4091 + # source://yarp//lib/yarp/node.rb#6129 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#4114 + # source://yarp//lib/yarp/node.rb#6163 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#4074 + # source://yarp//lib/yarp/node.rb#6112 def closing_loc; end + # def copy: (**params) -> PreExecutionNode + # + # source://yarp//lib/yarp/node.rb#6134 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4091 + # source://yarp//lib/yarp/node.rb#6129 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4099 + # source://yarp//lib/yarp/node.rb#6148 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4104 + # source://yarp//lib/yarp/node.rb#6153 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4068 + # source://yarp//lib/yarp/node.rb#6106 def keyword_loc; end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#4109 + # source://yarp//lib/yarp/node.rb#6158 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#4071 + # source://yarp//lib/yarp/node.rb#6109 def opening_loc; end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#4065 + # source://yarp//lib/yarp/node.rb#6103 def statements; end end # The top level node of any parse tree. # -# source://yarp//lib/yarp/node.rb#4120 +# source://yarp//lib/yarp/node.rb#6170 class YARP::ProgramNode < ::YARP::Node - # def initialize: (locals: Array[Symbol], statements: Node, location: Location) -> void + # def initialize: (locals: Array[Symbol], statements: StatementsNode, location: Location) -> void # # @return [ProgramNode] a new instance of ProgramNode # - # source://yarp//lib/yarp/node.rb#4128 + # source://yarp//lib/yarp/node.rb#6177 def initialize(locals, statements, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4135 + # source://yarp//lib/yarp/node.rb#6184 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4140 + # source://yarp//lib/yarp/node.rb#6189 def child_nodes; end + # def copy: (**params) -> ProgramNode + # + # source://yarp//lib/yarp/node.rb#6194 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4140 + # source://yarp//lib/yarp/node.rb#6189 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4148 + # source://yarp//lib/yarp/node.rb#6206 def deconstruct_keys(keys); end # attr_reader locals: Array[Symbol] # - # source://yarp//lib/yarp/node.rb#4122 + # source://yarp//lib/yarp/node.rb#6171 def locals; end - # attr_reader statements: Node + # attr_reader statements: StatementsNode # - # source://yarp//lib/yarp/node.rb#4125 + # source://yarp//lib/yarp/node.rb#6174 def statements; end end -# source://yarp//lib/yarp/node.rb#5640 +# source://yarp//lib/yarp/node.rb#8006 module YARP::RangeFlags; end # ... operator # -# source://yarp//lib/yarp/node.rb#5642 +# source://yarp//lib/yarp/node.rb#8008 YARP::RangeFlags::EXCLUDE_END = T.let(T.unsafe(nil), Integer) # Represents the use of the `..` or `...` operators. @@ -6425,66 +9147,71 @@ YARP::RangeFlags::EXCLUDE_END = T.let(T.unsafe(nil), Integer) # c if a =~ /left/ ... b =~ /right/ # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4160 +# source://yarp//lib/yarp/node.rb#6219 class YARP::RangeNode < ::YARP::Node # def initialize: (left: Node?, right: Node?, operator_loc: Location, flags: Integer, location: Location) -> void # # @return [RangeNode] a new instance of RangeNode # - # source://yarp//lib/yarp/node.rb#4174 + # source://yarp//lib/yarp/node.rb#6232 def initialize(left, right, operator_loc, flags, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4183 + # source://yarp//lib/yarp/node.rb#6241 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4188 + # source://yarp//lib/yarp/node.rb#6246 def child_nodes; end + # def copy: (**params) -> RangeNode + # + # source://yarp//lib/yarp/node.rb#6251 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4188 + # source://yarp//lib/yarp/node.rb#6246 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4196 + # source://yarp//lib/yarp/node.rb#6265 def deconstruct_keys(keys); end # def exclude_end?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4206 + # source://yarp//lib/yarp/node.rb#6275 def exclude_end?; end # attr_reader flags: Integer # - # source://yarp//lib/yarp/node.rb#4171 + # source://yarp//lib/yarp/node.rb#6229 def flags; end # attr_reader left: Node? # - # source://yarp//lib/yarp/node.rb#4162 + # source://yarp//lib/yarp/node.rb#6220 def left; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#4201 + # source://yarp//lib/yarp/node.rb#6270 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#4168 + # source://yarp//lib/yarp/node.rb#6226 def operator_loc; end # attr_reader right: Node? # - # source://yarp//lib/yarp/node.rb#4165 + # source://yarp//lib/yarp/node.rb#6223 def right; end end @@ -6493,40 +9220,48 @@ end # 1.0r # ^^^^ # -# source://yarp//lib/yarp/node.rb#4215 +# source://yarp//lib/yarp.rb#354 class YARP::RationalNode < ::YARP::Node # def initialize: (numeric: Node, location: Location) -> void # # @return [RationalNode] a new instance of RationalNode # - # source://yarp//lib/yarp/node.rb#4220 + # source://yarp//lib/yarp/node.rb#6289 def initialize(numeric, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4226 + # source://yarp//lib/yarp/node.rb#6295 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4231 + # source://yarp//lib/yarp/node.rb#6300 def child_nodes; end + # def copy: (**params) -> RationalNode + # + # source://yarp//lib/yarp/node.rb#6305 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4231 + # source://yarp//lib/yarp/node.rb#6300 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4239 + # source://yarp//lib/yarp/node.rb#6316 def deconstruct_keys(keys); end # attr_reader numeric: Node # - # source://yarp//lib/yarp/node.rb#4217 + # source://yarp//lib/yarp/node.rb#6286 def numeric; end + + # source://yarp//lib/yarp.rb#355 + def value; end end # Represents the use of the `redo` keyword. @@ -6534,78 +9269,83 @@ end # redo # ^^^^ # -# source://yarp//lib/yarp/node.rb#4248 +# source://yarp//lib/yarp/node.rb#6326 class YARP::RedoNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [RedoNode] a new instance of RedoNode # - # source://yarp//lib/yarp/node.rb#4250 + # source://yarp//lib/yarp/node.rb#6327 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4255 + # source://yarp//lib/yarp/node.rb#6332 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4260 + # source://yarp//lib/yarp/node.rb#6337 def child_nodes; end + # def copy: (**params) -> RedoNode + # + # source://yarp//lib/yarp/node.rb#6342 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4260 + # source://yarp//lib/yarp/node.rb#6337 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4268 + # source://yarp//lib/yarp/node.rb#6352 def deconstruct_keys(keys); end end -# source://yarp//lib/yarp/node.rb#5645 +# source://yarp//lib/yarp/node.rb#8011 module YARP::RegularExpressionFlags; end # n - forces the ASCII-8BIT encoding # -# source://yarp//lib/yarp/node.rb#5659 +# source://yarp//lib/yarp/node.rb#8025 YARP::RegularExpressionFlags::ASCII_8BIT = T.let(T.unsafe(nil), Integer) # e - forces the EUC-JP encoding # -# source://yarp//lib/yarp/node.rb#5656 +# source://yarp//lib/yarp/node.rb#8022 YARP::RegularExpressionFlags::EUC_JP = T.let(T.unsafe(nil), Integer) # x - ignores whitespace and allows comments in regular expressions # -# source://yarp//lib/yarp/node.rb#5653 +# source://yarp//lib/yarp/node.rb#8019 YARP::RegularExpressionFlags::EXTENDED = T.let(T.unsafe(nil), Integer) # i - ignores the case of characters when matching # -# source://yarp//lib/yarp/node.rb#5647 +# source://yarp//lib/yarp/node.rb#8013 YARP::RegularExpressionFlags::IGNORE_CASE = T.let(T.unsafe(nil), Integer) # m - allows $ to match the end of lines within strings # -# source://yarp//lib/yarp/node.rb#5650 +# source://yarp//lib/yarp/node.rb#8016 YARP::RegularExpressionFlags::MULTI_LINE = T.let(T.unsafe(nil), Integer) # o - only interpolates values into the regular expression once # -# source://yarp//lib/yarp/node.rb#5668 +# source://yarp//lib/yarp/node.rb#8034 YARP::RegularExpressionFlags::ONCE = T.let(T.unsafe(nil), Integer) # u - forces the UTF-8 encoding # -# source://yarp//lib/yarp/node.rb#5665 +# source://yarp//lib/yarp/node.rb#8031 YARP::RegularExpressionFlags::UTF_8 = T.let(T.unsafe(nil), Integer) # s - forces the Windows-31J encoding # -# source://yarp//lib/yarp/node.rb#5662 +# source://yarp//lib/yarp/node.rb#8028 YARP::RegularExpressionFlags::WINDOWS_31J = T.let(T.unsafe(nil), Integer) # Represents a regular expression literal with no interpolation. @@ -6613,130 +9353,135 @@ YARP::RegularExpressionFlags::WINDOWS_31J = T.let(T.unsafe(nil), Integer) # /foo/i # ^^^^^^ # -# source://yarp//lib/yarp/node.rb#4277 +# source://yarp//lib/yarp/node.rb#6362 class YARP::RegularExpressionNode < ::YARP::Node # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, flags: Integer, location: Location) -> void # # @return [RegularExpressionNode] a new instance of RegularExpressionNode # - # source://yarp//lib/yarp/node.rb#4294 + # source://yarp//lib/yarp/node.rb#6378 def initialize(opening_loc, content_loc, closing_loc, unescaped, flags, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4304 + # source://yarp//lib/yarp/node.rb#6388 def accept(visitor); end # def ascii_8bit?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4357 + # source://yarp//lib/yarp/node.rb#6453 def ascii_8bit?; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4309 + # source://yarp//lib/yarp/node.rb#6393 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#4332 + # source://yarp//lib/yarp/node.rb#6428 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#4285 + # source://yarp//lib/yarp/node.rb#6369 def closing_loc; end # def content: () -> String # - # source://yarp//lib/yarp/node.rb#4327 + # source://yarp//lib/yarp/node.rb#6423 def content; end # attr_reader content_loc: Location # - # source://yarp//lib/yarp/node.rb#4282 + # source://yarp//lib/yarp/node.rb#6366 def content_loc; end + # def copy: (**params) -> RegularExpressionNode + # + # source://yarp//lib/yarp/node.rb#6398 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4309 + # source://yarp//lib/yarp/node.rb#6393 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4317 + # source://yarp//lib/yarp/node.rb#6413 def deconstruct_keys(keys); end # def euc_jp?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4352 + # source://yarp//lib/yarp/node.rb#6448 def euc_jp?; end # def extended?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4347 + # source://yarp//lib/yarp/node.rb#6443 def extended?; end # attr_reader flags: Integer # - # source://yarp//lib/yarp/node.rb#4291 + # source://yarp//lib/yarp/node.rb#6375 def flags; end # def ignore_case?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4337 + # source://yarp//lib/yarp/node.rb#6433 def ignore_case?; end # def multi_line?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4342 + # source://yarp//lib/yarp/node.rb#6438 def multi_line?; end # def once?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4372 + # source://yarp//lib/yarp/node.rb#6468 def once?; end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#4322 + # source://yarp//lib/yarp/node.rb#6418 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#4279 + # source://yarp//lib/yarp/node.rb#6363 def opening_loc; end # attr_reader unescaped: String # - # source://yarp//lib/yarp/node.rb#4288 + # source://yarp//lib/yarp/node.rb#6372 def unescaped; end # def utf_8?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4367 + # source://yarp//lib/yarp/node.rb#6463 def utf_8?; end # def windows_31j?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#4362 + # source://yarp//lib/yarp/node.rb#6458 def windows_31j?; end end @@ -6746,59 +9491,64 @@ end # ^^^^^^^^^^ # end # -# source://yarp//lib/yarp/node.rb#4382 +# source://yarp//lib/yarp/node.rb#6479 class YARP::RequiredDestructuredParameterNode < ::YARP::Node # def initialize: (parameters: Array[Node], opening_loc: Location, closing_loc: Location, location: Location) -> void # # @return [RequiredDestructuredParameterNode] a new instance of RequiredDestructuredParameterNode # - # source://yarp//lib/yarp/node.rb#4393 + # source://yarp//lib/yarp/node.rb#6489 def initialize(parameters, opening_loc, closing_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4401 + # source://yarp//lib/yarp/node.rb#6497 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4406 + # source://yarp//lib/yarp/node.rb#6502 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#4424 + # source://yarp//lib/yarp/node.rb#6530 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#4390 + # source://yarp//lib/yarp/node.rb#6486 def closing_loc; end + # def copy: (**params) -> RequiredDestructuredParameterNode + # + # source://yarp//lib/yarp/node.rb#6507 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4406 + # source://yarp//lib/yarp/node.rb#6502 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4414 + # source://yarp//lib/yarp/node.rb#6520 def deconstruct_keys(keys); end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#4419 + # source://yarp//lib/yarp/node.rb#6525 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#4387 + # source://yarp//lib/yarp/node.rb#6483 def opening_loc; end # attr_reader parameters: Array[Node] # - # source://yarp//lib/yarp/node.rb#4384 + # source://yarp//lib/yarp/node.rb#6480 def parameters; end end @@ -6808,39 +9558,44 @@ end # ^ # end # -# source://yarp//lib/yarp/node.rb#4434 +# source://yarp//lib/yarp/node.rb#6541 class YARP::RequiredParameterNode < ::YARP::Node # def initialize: (constant_id: Symbol, location: Location) -> void # # @return [RequiredParameterNode] a new instance of RequiredParameterNode # - # source://yarp//lib/yarp/node.rb#4439 + # source://yarp//lib/yarp/node.rb#6545 def initialize(constant_id, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4445 + # source://yarp//lib/yarp/node.rb#6551 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4450 + # source://yarp//lib/yarp/node.rb#6556 def child_nodes; end # attr_reader constant_id: Symbol # - # source://yarp//lib/yarp/node.rb#4436 + # source://yarp//lib/yarp/node.rb#6542 def constant_id; end + # def copy: (**params) -> RequiredParameterNode + # + # source://yarp//lib/yarp/node.rb#6561 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4450 + # source://yarp//lib/yarp/node.rb#6556 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4458 + # source://yarp//lib/yarp/node.rb#6572 def deconstruct_keys(keys); end end @@ -6849,57 +9604,62 @@ end # foo rescue nil # ^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4467 +# source://yarp//lib/yarp/node.rb#6582 class YARP::RescueModifierNode < ::YARP::Node # def initialize: (expression: Node, keyword_loc: Location, rescue_expression: Node, location: Location) -> void # # @return [RescueModifierNode] a new instance of RescueModifierNode # - # source://yarp//lib/yarp/node.rb#4478 + # source://yarp//lib/yarp/node.rb#6592 def initialize(expression, keyword_loc, rescue_expression, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4486 + # source://yarp//lib/yarp/node.rb#6600 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4495 + # source://yarp//lib/yarp/node.rb#6609 def child_nodes; end + # def copy: (**params) -> RescueModifierNode + # + # source://yarp//lib/yarp/node.rb#6614 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4495 + # source://yarp//lib/yarp/node.rb#6609 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4503 + # source://yarp//lib/yarp/node.rb#6627 def deconstruct_keys(keys); end # attr_reader expression: Node # - # source://yarp//lib/yarp/node.rb#4469 + # source://yarp//lib/yarp/node.rb#6583 def expression; end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4508 + # source://yarp//lib/yarp/node.rb#6632 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4472 + # source://yarp//lib/yarp/node.rb#6586 def keyword_loc; end # attr_reader rescue_expression: Node # - # source://yarp//lib/yarp/node.rb#4475 + # source://yarp//lib/yarp/node.rb#6589 def rescue_expression; end - # source://yarp//lib/yarp/node.rb#4490 + # source://yarp//lib/yarp/node.rb#6604 def set_newline_flag(newline_marked); end end @@ -6914,74 +9674,79 @@ end # `Foo, *splat, Bar` are in the `exceptions` field. # `ex` is in the `exception` field. # -# source://yarp//lib/yarp/node.rb#4523 +# source://yarp//lib/yarp/node.rb#6648 class YARP::RescueNode < ::YARP::Node - # def initialize: (keyword_loc: Location, exceptions: Array[Node], operator_loc: Location?, reference: Node?, statements: Node?, consequent: Node?, location: Location) -> void + # def initialize: (keyword_loc: Location, exceptions: Array[Node], operator_loc: Location?, reference: Node?, statements: StatementsNode?, consequent: RescueNode?, location: Location) -> void # # @return [RescueNode] a new instance of RescueNode # - # source://yarp//lib/yarp/node.rb#4543 + # source://yarp//lib/yarp/node.rb#6667 def initialize(keyword_loc, exceptions, operator_loc, reference, statements, consequent, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4554 + # source://yarp//lib/yarp/node.rb#6678 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4559 + # source://yarp//lib/yarp/node.rb#6683 def child_nodes; end - # attr_reader consequent: Node? + # attr_reader consequent: RescueNode? # - # source://yarp//lib/yarp/node.rb#4540 + # source://yarp//lib/yarp/node.rb#6664 def consequent; end + # def copy: (**params) -> RescueNode + # + # source://yarp//lib/yarp/node.rb#6688 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4559 + # source://yarp//lib/yarp/node.rb#6683 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4567 + # source://yarp//lib/yarp/node.rb#6704 def deconstruct_keys(keys); end # attr_reader exceptions: Array[Node] # - # source://yarp//lib/yarp/node.rb#4528 + # source://yarp//lib/yarp/node.rb#6652 def exceptions; end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4572 + # source://yarp//lib/yarp/node.rb#6709 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4525 + # source://yarp//lib/yarp/node.rb#6649 def keyword_loc; end # def operator: () -> String? # - # source://yarp//lib/yarp/node.rb#4577 + # source://yarp//lib/yarp/node.rb#6714 def operator; end # attr_reader operator_loc: Location? # - # source://yarp//lib/yarp/node.rb#4531 + # source://yarp//lib/yarp/node.rb#6655 def operator_loc; end # attr_reader reference: Node? # - # source://yarp//lib/yarp/node.rb#4534 + # source://yarp//lib/yarp/node.rb#6658 def reference; end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#4537 + # source://yarp//lib/yarp/node.rb#6661 def statements; end end @@ -6991,54 +9756,59 @@ end # ^^ # end # -# source://yarp//lib/yarp/node.rb#4587 +# source://yarp//lib/yarp/node.rb#6725 class YARP::RestParameterNode < ::YARP::Node # def initialize: (operator_loc: Location, name_loc: Location?, location: Location) -> void # # @return [RestParameterNode] a new instance of RestParameterNode # - # source://yarp//lib/yarp/node.rb#4595 + # source://yarp//lib/yarp/node.rb#6732 def initialize(operator_loc, name_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4602 + # source://yarp//lib/yarp/node.rb#6739 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4607 + # source://yarp//lib/yarp/node.rb#6744 def child_nodes; end + # def copy: (**params) -> RestParameterNode + # + # source://yarp//lib/yarp/node.rb#6749 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4607 + # source://yarp//lib/yarp/node.rb#6744 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4615 + # source://yarp//lib/yarp/node.rb#6761 def deconstruct_keys(keys); end # def name: () -> String? # - # source://yarp//lib/yarp/node.rb#4625 + # source://yarp//lib/yarp/node.rb#6771 def name; end # attr_reader name_loc: Location? # - # source://yarp//lib/yarp/node.rb#4592 + # source://yarp//lib/yarp/node.rb#6729 def name_loc; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#4620 + # source://yarp//lib/yarp/node.rb#6766 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#4589 + # source://yarp//lib/yarp/node.rb#6726 def operator_loc; end end @@ -7047,34 +9817,39 @@ end # retry # ^^^^^ # -# source://yarp//lib/yarp/node.rb#4634 +# source://yarp//lib/yarp/node.rb#6781 class YARP::RetryNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [RetryNode] a new instance of RetryNode # - # source://yarp//lib/yarp/node.rb#4636 + # source://yarp//lib/yarp/node.rb#6782 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4641 + # source://yarp//lib/yarp/node.rb#6787 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4646 + # source://yarp//lib/yarp/node.rb#6792 def child_nodes; end + # def copy: (**params) -> RetryNode + # + # source://yarp//lib/yarp/node.rb#6797 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4646 + # source://yarp//lib/yarp/node.rb#6792 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4654 + # source://yarp//lib/yarp/node.rb#6807 def deconstruct_keys(keys); end end @@ -7083,49 +9858,54 @@ end # return 1 # ^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4663 +# source://yarp//lib/yarp/node.rb#6817 class YARP::ReturnNode < ::YARP::Node - # def initialize: (keyword_loc: Location, arguments: Node?, location: Location) -> void + # def initialize: (keyword_loc: Location, arguments: ArgumentsNode?, location: Location) -> void # # @return [ReturnNode] a new instance of ReturnNode # - # source://yarp//lib/yarp/node.rb#4671 + # source://yarp//lib/yarp/node.rb#6824 def initialize(keyword_loc, arguments, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4678 + # source://yarp//lib/yarp/node.rb#6831 def accept(visitor); end - # attr_reader arguments: Node? + # attr_reader arguments: ArgumentsNode? # - # source://yarp//lib/yarp/node.rb#4668 + # source://yarp//lib/yarp/node.rb#6821 def arguments; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4683 + # source://yarp//lib/yarp/node.rb#6836 def child_nodes; end + # def copy: (**params) -> ReturnNode + # + # source://yarp//lib/yarp/node.rb#6841 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4683 + # source://yarp//lib/yarp/node.rb#6836 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4691 + # source://yarp//lib/yarp/node.rb#6853 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4696 + # source://yarp//lib/yarp/node.rb#6858 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4665 + # source://yarp//lib/yarp/node.rb#6818 def keyword_loc; end end @@ -8474,34 +11254,39 @@ end # self # ^^^^ # -# source://yarp//lib/yarp/node.rb#4705 +# source://yarp//lib/yarp/node.rb#6868 class YARP::SelfNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [SelfNode] a new instance of SelfNode # - # source://yarp//lib/yarp/node.rb#4707 + # source://yarp//lib/yarp/node.rb#6869 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4712 + # source://yarp//lib/yarp/node.rb#6874 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4717 + # source://yarp//lib/yarp/node.rb#6879 def child_nodes; end + # def copy: (**params) -> SelfNode + # + # source://yarp//lib/yarp/node.rb#6884 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4717 + # source://yarp//lib/yarp/node.rb#6879 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4725 + # source://yarp//lib/yarp/node.rb#6894 def deconstruct_keys(keys); end end @@ -8548,12 +11333,24 @@ class YARP::Serialize::Loader # source://yarp//lib/yarp/serialize.rb#36 def io; end - # source://yarp//lib/yarp/serialize.rb#72 - def load; end - # source://yarp//lib/yarp/serialize.rb#53 + def load_encoding; end + + # source://yarp//lib/yarp/serialize.rb#57 + def load_metadata; end + + # source://yarp//lib/yarp/serialize.rb#90 + def load_nodes; end + + # source://yarp//lib/yarp/serialize.rb#105 + def load_result; end + + # source://yarp//lib/yarp/serialize.rb#64 def load_tokens; end + # source://yarp//lib/yarp/serialize.rb#77 + def load_tokens_result; end + # Returns the value of attribute serialized. # # source://yarp//lib/yarp/serialize.rb#36 @@ -8566,31 +11363,34 @@ class YARP::Serialize::Loader private - # source://yarp//lib/yarp/serialize.rb#132 + # source://yarp//lib/yarp/serialize.rb#162 def load_constant; end - # source://yarp//lib/yarp/serialize.rb#124 + # source://yarp//lib/yarp/serialize.rb#139 + def load_embedded_string; end + + # source://yarp//lib/yarp/serialize.rb#154 def load_location; end - # source://yarp//lib/yarp/serialize.rb#149 + # source://yarp//lib/yarp/serialize.rb#179 def load_node; end - # source://yarp//lib/yarp/serialize.rb#128 + # source://yarp//lib/yarp/serialize.rb#158 def load_optional_location; end - # source://yarp//lib/yarp/serialize.rb#113 + # source://yarp//lib/yarp/serialize.rb#132 def load_optional_node; end - # source://yarp//lib/yarp/serialize.rb#109 + # source://yarp//lib/yarp/serialize.rb#128 def load_serialized_length; end - # source://yarp//lib/yarp/serialize.rb#120 + # source://yarp//lib/yarp/serialize.rb#143 def load_string; end # variable-length integer using https://en.wikipedia.org/wiki/LEB128 # This is also what protobuf uses: https://protobuf.dev/programming-guides/encoding/#varints # - # source://yarp//lib/yarp/serialize.rb#95 + # source://yarp//lib/yarp/serialize.rb#114 def load_varint; end end @@ -8603,7 +11403,7 @@ YARP::Serialize::MINOR_VERSION = T.let(T.unsafe(nil), Integer) # source://yarp//lib/yarp/serialize.rb#25 YARP::Serialize::PATCH_VERSION = T.let(T.unsafe(nil), Integer) -# source://yarp//lib/yarp/serialize.rb#385 +# source://yarp//lib/yarp/serialize.rb#457 YARP::Serialize::TOKEN_TYPES = T.let(T.unsafe(nil), Array) # Represents a singleton class declaration involving the `class` keyword. @@ -8611,79 +11411,84 @@ YARP::Serialize::TOKEN_TYPES = T.let(T.unsafe(nil), Array) # class << self end # ^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4734 +# source://yarp//lib/yarp/node.rb#6904 class YARP::SingletonClassNode < ::YARP::Node # def initialize: (locals: Array[Symbol], class_keyword_loc: Location, operator_loc: Location, expression: Node, body: Node?, end_keyword_loc: Location, location: Location) -> void # # @return [SingletonClassNode] a new instance of SingletonClassNode # - # source://yarp//lib/yarp/node.rb#4754 + # source://yarp//lib/yarp/node.rb#6923 def initialize(locals, class_keyword_loc, operator_loc, expression, body, end_keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4765 + # source://yarp//lib/yarp/node.rb#6934 def accept(visitor); end # attr_reader body: Node? # - # source://yarp//lib/yarp/node.rb#4748 + # source://yarp//lib/yarp/node.rb#6917 def body; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4770 + # source://yarp//lib/yarp/node.rb#6939 def child_nodes; end # def class_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4783 + # source://yarp//lib/yarp/node.rb#6965 def class_keyword; end # attr_reader class_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4739 + # source://yarp//lib/yarp/node.rb#6908 def class_keyword_loc; end + # def copy: (**params) -> SingletonClassNode + # + # source://yarp//lib/yarp/node.rb#6944 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4770 + # source://yarp//lib/yarp/node.rb#6939 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4778 + # source://yarp//lib/yarp/node.rb#6960 def deconstruct_keys(keys); end # def end_keyword: () -> String # - # source://yarp//lib/yarp/node.rb#4793 + # source://yarp//lib/yarp/node.rb#6975 def end_keyword; end # attr_reader end_keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#4751 + # source://yarp//lib/yarp/node.rb#6920 def end_keyword_loc; end # attr_reader expression: Node # - # source://yarp//lib/yarp/node.rb#4745 + # source://yarp//lib/yarp/node.rb#6914 def expression; end # attr_reader locals: Array[Symbol] # - # source://yarp//lib/yarp/node.rb#4736 + # source://yarp//lib/yarp/node.rb#6905 def locals; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#4788 + # source://yarp//lib/yarp/node.rb#6970 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#4742 + # source://yarp//lib/yarp/node.rb#6911 def operator_loc; end end @@ -8728,34 +11533,39 @@ end # __ENCODING__ # ^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4802 +# source://yarp//lib/yarp/node.rb#6985 class YARP::SourceEncodingNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [SourceEncodingNode] a new instance of SourceEncodingNode # - # source://yarp//lib/yarp/node.rb#4804 + # source://yarp//lib/yarp/node.rb#6986 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4809 + # source://yarp//lib/yarp/node.rb#6991 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4814 + # source://yarp//lib/yarp/node.rb#6996 def child_nodes; end + # def copy: (**params) -> SourceEncodingNode + # + # source://yarp//lib/yarp/node.rb#7001 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4814 + # source://yarp//lib/yarp/node.rb#6996 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4822 + # source://yarp//lib/yarp/node.rb#7011 def deconstruct_keys(keys); end end @@ -8764,39 +11574,44 @@ end # __FILE__ # ^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4831 +# source://yarp//lib/yarp/node.rb#7021 class YARP::SourceFileNode < ::YARP::Node # def initialize: (filepath: String, location: Location) -> void # # @return [SourceFileNode] a new instance of SourceFileNode # - # source://yarp//lib/yarp/node.rb#4836 + # source://yarp//lib/yarp/node.rb#7025 def initialize(filepath, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4842 + # source://yarp//lib/yarp/node.rb#7031 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4847 + # source://yarp//lib/yarp/node.rb#7036 def child_nodes; end + # def copy: (**params) -> SourceFileNode + # + # source://yarp//lib/yarp/node.rb#7041 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4847 + # source://yarp//lib/yarp/node.rb#7036 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4855 + # source://yarp//lib/yarp/node.rb#7052 def deconstruct_keys(keys); end # attr_reader filepath: String # - # source://yarp//lib/yarp/node.rb#4833 + # source://yarp//lib/yarp/node.rb#7022 def filepath; end end @@ -8805,34 +11620,39 @@ end # __LINE__ # ^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4864 +# source://yarp//lib/yarp/node.rb#7062 class YARP::SourceLineNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [SourceLineNode] a new instance of SourceLineNode # - # source://yarp//lib/yarp/node.rb#4866 + # source://yarp//lib/yarp/node.rb#7063 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4871 + # source://yarp//lib/yarp/node.rb#7068 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4876 + # source://yarp//lib/yarp/node.rb#7073 def child_nodes; end + # def copy: (**params) -> SourceLineNode + # + # source://yarp//lib/yarp/node.rb#7078 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4876 + # source://yarp//lib/yarp/node.rb#7073 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4884 + # source://yarp//lib/yarp/node.rb#7088 def deconstruct_keys(keys); end end @@ -8841,49 +11661,54 @@ end # [*a] # ^^ # -# source://yarp//lib/yarp/node.rb#4893 +# source://yarp//lib/yarp/node.rb#7098 class YARP::SplatNode < ::YARP::Node # def initialize: (operator_loc: Location, expression: Node?, location: Location) -> void # # @return [SplatNode] a new instance of SplatNode # - # source://yarp//lib/yarp/node.rb#4901 + # source://yarp//lib/yarp/node.rb#7105 def initialize(operator_loc, expression, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4908 + # source://yarp//lib/yarp/node.rb#7112 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4913 + # source://yarp//lib/yarp/node.rb#7117 def child_nodes; end + # def copy: (**params) -> SplatNode + # + # source://yarp//lib/yarp/node.rb#7122 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4913 + # source://yarp//lib/yarp/node.rb#7117 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4921 + # source://yarp//lib/yarp/node.rb#7134 def deconstruct_keys(keys); end # attr_reader expression: Node? # - # source://yarp//lib/yarp/node.rb#4898 + # source://yarp//lib/yarp/node.rb#7102 def expression; end # def operator: () -> String # - # source://yarp//lib/yarp/node.rb#4926 + # source://yarp//lib/yarp/node.rb#7139 def operator; end # attr_reader operator_loc: Location # - # source://yarp//lib/yarp/node.rb#4895 + # source://yarp//lib/yarp/node.rb#7099 def operator_loc; end end @@ -8892,39 +11717,44 @@ end # foo; bar; baz # ^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4935 +# source://yarp//lib/yarp/node.rb#7149 class YARP::StatementsNode < ::YARP::Node # def initialize: (body: Array[Node], location: Location) -> void # # @return [StatementsNode] a new instance of StatementsNode # - # source://yarp//lib/yarp/node.rb#4940 + # source://yarp//lib/yarp/node.rb#7153 def initialize(body, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4946 + # source://yarp//lib/yarp/node.rb#7159 def accept(visitor); end # attr_reader body: Array[Node] # - # source://yarp//lib/yarp/node.rb#4937 + # source://yarp//lib/yarp/node.rb#7150 def body; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4951 + # source://yarp//lib/yarp/node.rb#7164 def child_nodes; end + # def copy: (**params) -> StatementsNode + # + # source://yarp//lib/yarp/node.rb#7169 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4951 + # source://yarp//lib/yarp/node.rb#7164 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4959 + # source://yarp//lib/yarp/node.rb#7180 def deconstruct_keys(keys); end end @@ -8933,44 +11763,49 @@ end # "foo" "bar" # ^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#4968 +# source://yarp//lib/yarp/node.rb#7190 class YARP::StringConcatNode < ::YARP::Node # def initialize: (left: Node, right: Node, location: Location) -> void # # @return [StringConcatNode] a new instance of StringConcatNode # - # source://yarp//lib/yarp/node.rb#4976 + # source://yarp//lib/yarp/node.rb#7197 def initialize(left, right, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#4983 + # source://yarp//lib/yarp/node.rb#7204 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4988 + # source://yarp//lib/yarp/node.rb#7209 def child_nodes; end + # def copy: (**params) -> StringConcatNode + # + # source://yarp//lib/yarp/node.rb#7214 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#4988 + # source://yarp//lib/yarp/node.rb#7209 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#4996 + # source://yarp//lib/yarp/node.rb#7226 def deconstruct_keys(keys); end # attr_reader left: Node # - # source://yarp//lib/yarp/node.rb#4970 + # source://yarp//lib/yarp/node.rb#7191 def left; end # attr_reader right: Node # - # source://yarp//lib/yarp/node.rb#4973 + # source://yarp//lib/yarp/node.rb#7194 def right; end end @@ -8986,69 +11821,74 @@ end # "foo #{bar} baz" # ^^^^ ^^^^ # -# source://yarp//lib/yarp/node.rb#5012 +# source://yarp//lib/yarp/node.rb#7243 class YARP::StringNode < ::YARP::Node # def initialize: (opening_loc: Location?, content_loc: Location, closing_loc: Location?, unescaped: String, location: Location) -> void # # @return [StringNode] a new instance of StringNode # - # source://yarp//lib/yarp/node.rb#5026 + # source://yarp//lib/yarp/node.rb#7256 def initialize(opening_loc, content_loc, closing_loc, unescaped, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5035 + # source://yarp//lib/yarp/node.rb#7265 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5040 + # source://yarp//lib/yarp/node.rb#7270 def child_nodes; end # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#5063 + # source://yarp//lib/yarp/node.rb#7304 def closing; end # attr_reader closing_loc: Location? # - # source://yarp//lib/yarp/node.rb#5020 + # source://yarp//lib/yarp/node.rb#7250 def closing_loc; end # def content: () -> String # - # source://yarp//lib/yarp/node.rb#5058 + # source://yarp//lib/yarp/node.rb#7299 def content; end # attr_reader content_loc: Location # - # source://yarp//lib/yarp/node.rb#5017 + # source://yarp//lib/yarp/node.rb#7247 def content_loc; end + # def copy: (**params) -> StringNode + # + # source://yarp//lib/yarp/node.rb#7275 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5040 + # source://yarp//lib/yarp/node.rb#7270 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5048 + # source://yarp//lib/yarp/node.rb#7289 def deconstruct_keys(keys); end # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#5053 + # source://yarp//lib/yarp/node.rb#7294 def opening; end # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#5014 + # source://yarp//lib/yarp/node.rb#7244 def opening_loc; end # attr_reader unescaped: String # - # source://yarp//lib/yarp/node.rb#5023 + # source://yarp//lib/yarp/node.rb#7253 def unescaped; end end @@ -9060,74 +11900,79 @@ end # super foo, bar # ^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#5075 +# source://yarp//lib/yarp/node.rb#7317 class YARP::SuperNode < ::YARP::Node - # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: Node?, rparen_loc: Location?, block: Node?, location: Location) -> void + # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: ArgumentsNode?, rparen_loc: Location?, block: BlockNode?, location: Location) -> void # # @return [SuperNode] a new instance of SuperNode # - # source://yarp//lib/yarp/node.rb#5092 + # source://yarp//lib/yarp/node.rb#7333 def initialize(keyword_loc, lparen_loc, arguments, rparen_loc, block, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5102 + # source://yarp//lib/yarp/node.rb#7343 def accept(visitor); end - # attr_reader arguments: Node? + # attr_reader arguments: ArgumentsNode? # - # source://yarp//lib/yarp/node.rb#5083 + # source://yarp//lib/yarp/node.rb#7324 def arguments; end - # attr_reader block: Node? + # attr_reader block: BlockNode? # - # source://yarp//lib/yarp/node.rb#5089 + # source://yarp//lib/yarp/node.rb#7330 def block; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5107 + # source://yarp//lib/yarp/node.rb#7348 def child_nodes; end + # def copy: (**params) -> SuperNode + # + # source://yarp//lib/yarp/node.rb#7353 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5107 + # source://yarp//lib/yarp/node.rb#7348 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5115 + # source://yarp//lib/yarp/node.rb#7368 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5120 + # source://yarp//lib/yarp/node.rb#7373 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5077 + # source://yarp//lib/yarp/node.rb#7318 def keyword_loc; end # def lparen: () -> String? # - # source://yarp//lib/yarp/node.rb#5125 + # source://yarp//lib/yarp/node.rb#7378 def lparen; end # attr_reader lparen_loc: Location? # - # source://yarp//lib/yarp/node.rb#5080 + # source://yarp//lib/yarp/node.rb#7321 def lparen_loc; end # def rparen: () -> String? # - # source://yarp//lib/yarp/node.rb#5130 + # source://yarp//lib/yarp/node.rb#7383 def rparen; end # attr_reader rparen_loc: Location? # - # source://yarp//lib/yarp/node.rb#5086 + # source://yarp//lib/yarp/node.rb#7327 def rparen_loc; end end @@ -9139,103 +11984,108 @@ end # %i[foo] # ^^^ # -# source://yarp//lib/yarp/node.rb#5142 +# source://yarp//lib/yarp/node.rb#7396 class YARP::SymbolNode < ::YARP::Node - # def initialize: (opening_loc: Location?, value_loc: Location, closing_loc: Location?, unescaped: String, location: Location) -> void + # def initialize: (opening_loc: Location?, value_loc: Location?, closing_loc: Location?, unescaped: String, location: Location) -> void # # @return [SymbolNode] a new instance of SymbolNode # - # source://yarp//lib/yarp/node.rb#5156 + # source://yarp//lib/yarp/node.rb#7409 def initialize(opening_loc, value_loc, closing_loc, unescaped, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5165 + # source://yarp//lib/yarp/node.rb#7418 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5170 + # source://yarp//lib/yarp/node.rb#7423 def child_nodes; end # def closing: () -> String? # - # source://yarp//lib/yarp/node.rb#5193 + # source://yarp//lib/yarp/node.rb#7457 def closing; end # attr_reader closing_loc: Location? # - # source://yarp//lib/yarp/node.rb#5150 + # source://yarp//lib/yarp/node.rb#7403 def closing_loc; end + # def copy: (**params) -> SymbolNode + # + # source://yarp//lib/yarp/node.rb#7428 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5170 + # source://yarp//lib/yarp/node.rb#7423 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5178 + # source://yarp//lib/yarp/node.rb#7442 def deconstruct_keys(keys); end # def opening: () -> String? # - # source://yarp//lib/yarp/node.rb#5183 + # source://yarp//lib/yarp/node.rb#7447 def opening; end # attr_reader opening_loc: Location? # - # source://yarp//lib/yarp/node.rb#5144 + # source://yarp//lib/yarp/node.rb#7397 def opening_loc; end # attr_reader unescaped: String # - # source://yarp//lib/yarp/node.rb#5153 + # source://yarp//lib/yarp/node.rb#7406 def unescaped; end - # def value: () -> String + # def value: () -> String? # - # source://yarp//lib/yarp/node.rb#5188 + # source://yarp//lib/yarp/node.rb#7452 def value; end - # attr_reader value_loc: Location + # attr_reader value_loc: Location? # - # source://yarp//lib/yarp/node.rb#5147 + # source://yarp//lib/yarp/node.rb#7400 def value_loc; end end # This represents a token from the Ruby source. # -# source://yarp//lib/yarp.rb#242 +# source://yarp//lib/yarp.rb#262 class YARP::Token # @return [Token] a new instance of Token # - # source://yarp//lib/yarp.rb#245 + # source://yarp//lib/yarp.rb#265 def initialize(type, value, location); end - # source://yarp//lib/yarp.rb#269 + # source://yarp//lib/yarp.rb#289 def ==(other); end - # source://yarp//lib/yarp.rb#251 + # source://yarp//lib/yarp.rb#271 def deconstruct_keys(keys); end # Returns the value of attribute location. # - # source://yarp//lib/yarp.rb#243 + # source://yarp//lib/yarp.rb#263 def location; end - # source://yarp//lib/yarp.rb#255 + # source://yarp//lib/yarp.rb#275 def pretty_print(q); end # Returns the value of attribute type. # - # source://yarp//lib/yarp.rb#243 + # source://yarp//lib/yarp.rb#263 def type; end # Returns the value of attribute value. # - # source://yarp//lib/yarp.rb#243 + # source://yarp//lib/yarp.rb#263 def value; end end @@ -9244,34 +12094,39 @@ end # true # ^^^^ # -# source://yarp//lib/yarp/node.rb#5202 +# source://yarp//lib/yarp/node.rb#7467 class YARP::TrueNode < ::YARP::Node # def initialize: (location: Location) -> void # # @return [TrueNode] a new instance of TrueNode # - # source://yarp//lib/yarp/node.rb#5204 + # source://yarp//lib/yarp/node.rb#7468 def initialize(location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5209 + # source://yarp//lib/yarp/node.rb#7473 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5214 + # source://yarp//lib/yarp/node.rb#7478 def child_nodes; end + # def copy: (**params) -> TrueNode + # + # source://yarp//lib/yarp/node.rb#7483 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5214 + # source://yarp//lib/yarp/node.rb#7478 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5222 + # source://yarp//lib/yarp/node.rb#7493 def deconstruct_keys(keys); end end @@ -9280,49 +12135,54 @@ end # undef :foo, :bar, :baz # ^^^^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#5231 +# source://yarp//lib/yarp/node.rb#7503 class YARP::UndefNode < ::YARP::Node # def initialize: (names: Array[Node], keyword_loc: Location, location: Location) -> void # # @return [UndefNode] a new instance of UndefNode # - # source://yarp//lib/yarp/node.rb#5239 + # source://yarp//lib/yarp/node.rb#7510 def initialize(names, keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5246 + # source://yarp//lib/yarp/node.rb#7517 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5251 + # source://yarp//lib/yarp/node.rb#7522 def child_nodes; end + # def copy: (**params) -> UndefNode + # + # source://yarp//lib/yarp/node.rb#7527 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5251 + # source://yarp//lib/yarp/node.rb#7522 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5259 + # source://yarp//lib/yarp/node.rb#7539 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5264 + # source://yarp//lib/yarp/node.rb#7544 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5236 + # source://yarp//lib/yarp/node.rb#7507 def keyword_loc; end # attr_reader names: Array[Node] # - # source://yarp//lib/yarp/node.rb#5233 + # source://yarp//lib/yarp/node.rb#7504 def names; end end @@ -9334,72 +12194,77 @@ end # unless foo then bar end # ^^^^^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#5276 +# source://yarp//lib/yarp/node.rb#7557 class YARP::UnlessNode < ::YARP::Node - # def initialize: (keyword_loc: Location, predicate: Node, statements: Node?, consequent: Node?, end_keyword_loc: Location?, location: Location) -> void + # def initialize: (keyword_loc: Location, predicate: Node, statements: StatementsNode?, consequent: ElseNode?, end_keyword_loc: Location?, location: Location) -> void # # @return [UnlessNode] a new instance of UnlessNode # - # source://yarp//lib/yarp/node.rb#5293 + # source://yarp//lib/yarp/node.rb#7573 def initialize(keyword_loc, predicate, statements, consequent, end_keyword_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5303 + # source://yarp//lib/yarp/node.rb#7583 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5312 + # source://yarp//lib/yarp/node.rb#7592 def child_nodes; end - # attr_reader consequent: Node? + # attr_reader consequent: ElseNode? # - # source://yarp//lib/yarp/node.rb#5287 + # source://yarp//lib/yarp/node.rb#7567 def consequent; end + # def copy: (**params) -> UnlessNode + # + # source://yarp//lib/yarp/node.rb#7597 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5312 + # source://yarp//lib/yarp/node.rb#7592 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5320 + # source://yarp//lib/yarp/node.rb#7612 def deconstruct_keys(keys); end # def end_keyword: () -> String? # - # source://yarp//lib/yarp/node.rb#5330 + # source://yarp//lib/yarp/node.rb#7622 def end_keyword; end # attr_reader end_keyword_loc: Location? # - # source://yarp//lib/yarp/node.rb#5290 + # source://yarp//lib/yarp/node.rb#7570 def end_keyword_loc; end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5325 + # source://yarp//lib/yarp/node.rb#7617 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5278 + # source://yarp//lib/yarp/node.rb#7558 def keyword_loc; end # attr_reader predicate: Node # - # source://yarp//lib/yarp/node.rb#5281 + # source://yarp//lib/yarp/node.rb#7561 def predicate; end - # source://yarp//lib/yarp/node.rb#5307 + # source://yarp//lib/yarp/node.rb#7587 def set_newline_flag(newline_marked); end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#5284 + # source://yarp//lib/yarp/node.rb#7564 def statements; end end @@ -9411,640 +12276,760 @@ end # until foo do bar end # ^^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#5342 +# source://yarp//lib/yarp/node.rb#7635 class YARP::UntilNode < ::YARP::Node - # def initialize: (keyword_loc: Location, predicate: Node, statements: Node?, flags: Integer, location: Location) -> void + # def initialize: (keyword_loc: Location, closing_loc: Location?, predicate: Node, statements: StatementsNode?, flags: Integer, location: Location) -> void # # @return [UntilNode] a new instance of UntilNode # - # source://yarp//lib/yarp/node.rb#5356 - def initialize(keyword_loc, predicate, statements, flags, location); end + # source://yarp//lib/yarp/node.rb#7651 + def initialize(keyword_loc, closing_loc, predicate, statements, flags, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5365 + # source://yarp//lib/yarp/node.rb#7661 def accept(visitor); end # def begin_modifier?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#5392 + # source://yarp//lib/yarp/node.rb#7705 def begin_modifier?; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5374 + # source://yarp//lib/yarp/node.rb#7670 def child_nodes; end + # def closing: () -> String? + # + # source://yarp//lib/yarp/node.rb#7700 + def closing; end + + # attr_reader closing_loc: Location? + # + # source://yarp//lib/yarp/node.rb#7639 + def closing_loc; end + + # def copy: (**params) -> UntilNode + # + # source://yarp//lib/yarp/node.rb#7675 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5374 + # source://yarp//lib/yarp/node.rb#7670 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5382 + # source://yarp//lib/yarp/node.rb#7690 def deconstruct_keys(keys); end # attr_reader flags: Integer # - # source://yarp//lib/yarp/node.rb#5353 + # source://yarp//lib/yarp/node.rb#7648 def flags; end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5387 + # source://yarp//lib/yarp/node.rb#7695 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5344 + # source://yarp//lib/yarp/node.rb#7636 def keyword_loc; end # attr_reader predicate: Node # - # source://yarp//lib/yarp/node.rb#5347 + # source://yarp//lib/yarp/node.rb#7642 def predicate; end - # source://yarp//lib/yarp/node.rb#5369 + # source://yarp//lib/yarp/node.rb#7665 def set_newline_flag(newline_marked); end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#5350 + # source://yarp//lib/yarp/node.rb#7645 def statements; end end # The version constant is set by reading the result of calling yp_version. YARP::VERSION = T.let(T.unsafe(nil), String) -# source://yarp//lib/yarp.rb#172 +# source://yarp//lib/yarp.rb#192 class YARP::Visitor < ::YARP::BasicVisitor # Visit a AliasNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_alias_node(node); end # Visit a AlternationPatternNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_alternation_pattern_node(node); end # Visit a AndNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_and_node(node); end - # Visit a AndWriteNode node - # - # source://yarp//lib/yarp.rb#167 - def visit_and_write_node(node); end - # Visit a ArgumentsNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_arguments_node(node); end # Visit a ArrayNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_array_node(node); end # Visit a ArrayPatternNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_array_pattern_node(node); end # Visit a AssocNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_assoc_node(node); end # Visit a AssocSplatNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_assoc_splat_node(node); end # Visit a BackReferenceReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_back_reference_read_node(node); end # Visit a BeginNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_begin_node(node); end # Visit a BlockArgumentNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_block_argument_node(node); end # Visit a BlockNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_block_node(node); end # Visit a BlockParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_block_parameter_node(node); end # Visit a BlockParametersNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_block_parameters_node(node); end # Visit a BreakNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_break_node(node); end # Visit a CallNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_call_node(node); end # Visit a CallOperatorAndWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_call_operator_and_write_node(node); end # Visit a CallOperatorOrWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_call_operator_or_write_node(node); end # Visit a CallOperatorWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_call_operator_write_node(node); end # Visit a CapturePatternNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_capture_pattern_node(node); end # Visit a CaseNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_case_node(node); end # Visit a ClassNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_class_node(node); end + # Visit a ClassVariableAndWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_class_variable_and_write_node(node); end + + # Visit a ClassVariableOperatorWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_class_variable_operator_write_node(node); end + + # Visit a ClassVariableOrWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_class_variable_or_write_node(node); end + # Visit a ClassVariableReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_class_variable_read_node(node); end + # Visit a ClassVariableTargetNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_class_variable_target_node(node); end + # Visit a ClassVariableWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_class_variable_write_node(node); end + # Visit a ConstantAndWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_and_write_node(node); end + + # Visit a ConstantOperatorWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_operator_write_node(node); end + + # Visit a ConstantOrWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_or_write_node(node); end + + # Visit a ConstantPathAndWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_path_and_write_node(node); end + # Visit a ConstantPathNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_constant_path_node(node); end + # Visit a ConstantPathOperatorWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_path_operator_write_node(node); end + + # Visit a ConstantPathOrWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_path_or_write_node(node); end + + # Visit a ConstantPathTargetNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_path_target_node(node); end + # Visit a ConstantPathWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_constant_path_write_node(node); end # Visit a ConstantReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_constant_read_node(node); end + # Visit a ConstantTargetNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_constant_target_node(node); end + # Visit a ConstantWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_constant_write_node(node); end # Visit a DefNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_def_node(node); end # Visit a DefinedNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_defined_node(node); end # Visit a ElseNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_else_node(node); end # Visit a EmbeddedStatementsNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_embedded_statements_node(node); end # Visit a EmbeddedVariableNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_embedded_variable_node(node); end # Visit a EnsureNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_ensure_node(node); end # Visit a FalseNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_false_node(node); end # Visit a FindPatternNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_find_pattern_node(node); end # Visit a FlipFlopNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_flip_flop_node(node); end # Visit a FloatNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_float_node(node); end # Visit a ForNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_for_node(node); end # Visit a ForwardingArgumentsNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_forwarding_arguments_node(node); end # Visit a ForwardingParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_forwarding_parameter_node(node); end # Visit a ForwardingSuperNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_forwarding_super_node(node); end + # Visit a GlobalVariableAndWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_global_variable_and_write_node(node); end + + # Visit a GlobalVariableOperatorWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_global_variable_operator_write_node(node); end + + # Visit a GlobalVariableOrWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_global_variable_or_write_node(node); end + # Visit a GlobalVariableReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_global_variable_read_node(node); end + # Visit a GlobalVariableTargetNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_global_variable_target_node(node); end + # Visit a GlobalVariableWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_global_variable_write_node(node); end # Visit a HashNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_hash_node(node); end # Visit a HashPatternNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_hash_pattern_node(node); end # Visit a IfNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_if_node(node); end # Visit a ImaginaryNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_imaginary_node(node); end # Visit a InNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_in_node(node); end + # Visit a InstanceVariableAndWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_instance_variable_and_write_node(node); end + + # Visit a InstanceVariableOperatorWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_instance_variable_operator_write_node(node); end + + # Visit a InstanceVariableOrWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_instance_variable_or_write_node(node); end + # Visit a InstanceVariableReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_instance_variable_read_node(node); end + # Visit a InstanceVariableTargetNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_instance_variable_target_node(node); end + # Visit a InstanceVariableWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_instance_variable_write_node(node); end # Visit a IntegerNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_integer_node(node); end # Visit a InterpolatedRegularExpressionNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_interpolated_regular_expression_node(node); end # Visit a InterpolatedStringNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_interpolated_string_node(node); end # Visit a InterpolatedSymbolNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_interpolated_symbol_node(node); end # Visit a InterpolatedXStringNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_interpolated_x_string_node(node); end # Visit a KeywordHashNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_keyword_hash_node(node); end # Visit a KeywordParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_keyword_parameter_node(node); end # Visit a KeywordRestParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_keyword_rest_parameter_node(node); end # Visit a LambdaNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_lambda_node(node); end + # Visit a LocalVariableAndWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_local_variable_and_write_node(node); end + + # Visit a LocalVariableOperatorWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_local_variable_operator_write_node(node); end + + # Visit a LocalVariableOrWriteNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_local_variable_or_write_node(node); end + # Visit a LocalVariableReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_local_variable_read_node(node); end + # Visit a LocalVariableTargetNode node + # + # source://yarp//lib/yarp.rb#187 + def visit_local_variable_target_node(node); end + # Visit a LocalVariableWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_local_variable_write_node(node); end # Visit a MatchPredicateNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_match_predicate_node(node); end # Visit a MatchRequiredNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_match_required_node(node); end # Visit a MissingNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_missing_node(node); end # Visit a ModuleNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_module_node(node); end # Visit a MultiWriteNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_multi_write_node(node); end # Visit a NextNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_next_node(node); end # Visit a NilNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_nil_node(node); end # Visit a NoKeywordsParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_no_keywords_parameter_node(node); end # Visit a NumberedReferenceReadNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_numbered_reference_read_node(node); end - # Visit a OperatorWriteNode node - # - # source://yarp//lib/yarp.rb#167 - def visit_operator_write_node(node); end - # Visit a OptionalParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_optional_parameter_node(node); end # Visit a OrNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_or_node(node); end - # Visit a OrWriteNode node - # - # source://yarp//lib/yarp.rb#167 - def visit_or_write_node(node); end - # Visit a ParametersNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_parameters_node(node); end # Visit a ParenthesesNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_parentheses_node(node); end # Visit a PinnedExpressionNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_pinned_expression_node(node); end # Visit a PinnedVariableNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_pinned_variable_node(node); end # Visit a PostExecutionNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_post_execution_node(node); end # Visit a PreExecutionNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_pre_execution_node(node); end # Visit a ProgramNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_program_node(node); end # Visit a RangeNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_range_node(node); end # Visit a RationalNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_rational_node(node); end # Visit a RedoNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_redo_node(node); end # Visit a RegularExpressionNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_regular_expression_node(node); end # Visit a RequiredDestructuredParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_required_destructured_parameter_node(node); end # Visit a RequiredParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_required_parameter_node(node); end # Visit a RescueModifierNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_rescue_modifier_node(node); end # Visit a RescueNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_rescue_node(node); end # Visit a RestParameterNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_rest_parameter_node(node); end # Visit a RetryNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_retry_node(node); end # Visit a ReturnNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_return_node(node); end # Visit a SelfNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_self_node(node); end # Visit a SingletonClassNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_singleton_class_node(node); end # Visit a SourceEncodingNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_source_encoding_node(node); end # Visit a SourceFileNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_source_file_node(node); end # Visit a SourceLineNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_source_line_node(node); end # Visit a SplatNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_splat_node(node); end # Visit a StatementsNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_statements_node(node); end # Visit a StringConcatNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_string_concat_node(node); end # Visit a StringNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_string_node(node); end # Visit a SuperNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_super_node(node); end # Visit a SymbolNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_symbol_node(node); end # Visit a TrueNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_true_node(node); end # Visit a UndefNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_undef_node(node); end # Visit a UnlessNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_unless_node(node); end # Visit a UntilNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_until_node(node); end # Visit a WhenNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_when_node(node); end # Visit a WhileNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_while_node(node); end # Visit a XStringNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_x_string_node(node); end # Visit a YieldNode node # - # source://yarp//lib/yarp.rb#167 + # source://yarp//lib/yarp.rb#187 def visit_yield_node(node); end end @@ -10055,54 +13040,59 @@ end # ^^^^^^^^^ # end # -# source://yarp//lib/yarp/node.rb#5403 +# source://yarp//lib/yarp/node.rb#7717 class YARP::WhenNode < ::YARP::Node - # def initialize: (keyword_loc: Location, conditions: Array[Node], statements: Node?, location: Location) -> void + # def initialize: (keyword_loc: Location, conditions: Array[Node], statements: StatementsNode?, location: Location) -> void # # @return [WhenNode] a new instance of WhenNode # - # source://yarp//lib/yarp/node.rb#5414 + # source://yarp//lib/yarp/node.rb#7727 def initialize(keyword_loc, conditions, statements, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5422 + # source://yarp//lib/yarp/node.rb#7735 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5427 + # source://yarp//lib/yarp/node.rb#7740 def child_nodes; end # attr_reader conditions: Array[Node] # - # source://yarp//lib/yarp/node.rb#5408 + # source://yarp//lib/yarp/node.rb#7721 def conditions; end + # def copy: (**params) -> WhenNode + # + # source://yarp//lib/yarp/node.rb#7745 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5427 + # source://yarp//lib/yarp/node.rb#7740 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5435 + # source://yarp//lib/yarp/node.rb#7758 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5440 + # source://yarp//lib/yarp/node.rb#7763 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5405 + # source://yarp//lib/yarp/node.rb#7718 def keyword_loc; end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#5411 + # source://yarp//lib/yarp/node.rb#7724 def statements; end end @@ -10114,69 +13104,84 @@ end # while foo do bar end # ^^^^^^^^^^^^^^^^^^^^ # -# source://yarp//lib/yarp/node.rb#5452 +# source://yarp//lib/yarp/node.rb#7776 class YARP::WhileNode < ::YARP::Node - # def initialize: (keyword_loc: Location, predicate: Node, statements: Node?, flags: Integer, location: Location) -> void + # def initialize: (keyword_loc: Location, closing_loc: Location?, predicate: Node, statements: StatementsNode?, flags: Integer, location: Location) -> void # # @return [WhileNode] a new instance of WhileNode # - # source://yarp//lib/yarp/node.rb#5466 - def initialize(keyword_loc, predicate, statements, flags, location); end + # source://yarp//lib/yarp/node.rb#7792 + def initialize(keyword_loc, closing_loc, predicate, statements, flags, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5475 + # source://yarp//lib/yarp/node.rb#7802 def accept(visitor); end # def begin_modifier?: () -> bool # # @return [Boolean] # - # source://yarp//lib/yarp/node.rb#5502 + # source://yarp//lib/yarp/node.rb#7846 def begin_modifier?; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5484 + # source://yarp//lib/yarp/node.rb#7811 def child_nodes; end + # def closing: () -> String? + # + # source://yarp//lib/yarp/node.rb#7841 + def closing; end + + # attr_reader closing_loc: Location? + # + # source://yarp//lib/yarp/node.rb#7780 + def closing_loc; end + + # def copy: (**params) -> WhileNode + # + # source://yarp//lib/yarp/node.rb#7816 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5484 + # source://yarp//lib/yarp/node.rb#7811 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5492 + # source://yarp//lib/yarp/node.rb#7831 def deconstruct_keys(keys); end # attr_reader flags: Integer # - # source://yarp//lib/yarp/node.rb#5463 + # source://yarp//lib/yarp/node.rb#7789 def flags; end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5497 + # source://yarp//lib/yarp/node.rb#7836 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5454 + # source://yarp//lib/yarp/node.rb#7777 def keyword_loc; end # attr_reader predicate: Node # - # source://yarp//lib/yarp/node.rb#5457 + # source://yarp//lib/yarp/node.rb#7783 def predicate; end - # source://yarp//lib/yarp/node.rb#5479 + # source://yarp//lib/yarp/node.rb#7806 def set_newline_flag(newline_marked); end - # attr_reader statements: Node? + # attr_reader statements: StatementsNode? # - # source://yarp//lib/yarp/node.rb#5460 + # source://yarp//lib/yarp/node.rb#7786 def statements; end end @@ -10185,69 +13190,74 @@ end # `foo` # ^^^^^ # -# source://yarp//lib/yarp/node.rb#5511 +# source://yarp//lib/yarp/node.rb#7856 class YARP::XStringNode < ::YARP::Node # def initialize: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, location: Location) -> void # # @return [XStringNode] a new instance of XStringNode # - # source://yarp//lib/yarp/node.rb#5525 + # source://yarp//lib/yarp/node.rb#7869 def initialize(opening_loc, content_loc, closing_loc, unescaped, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5534 + # source://yarp//lib/yarp/node.rb#7878 def accept(visitor); end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5539 + # source://yarp//lib/yarp/node.rb#7883 def child_nodes; end # def closing: () -> String # - # source://yarp//lib/yarp/node.rb#5562 + # source://yarp//lib/yarp/node.rb#7917 def closing; end # attr_reader closing_loc: Location # - # source://yarp//lib/yarp/node.rb#5519 + # source://yarp//lib/yarp/node.rb#7863 def closing_loc; end # def content: () -> String # - # source://yarp//lib/yarp/node.rb#5557 + # source://yarp//lib/yarp/node.rb#7912 def content; end # attr_reader content_loc: Location # - # source://yarp//lib/yarp/node.rb#5516 + # source://yarp//lib/yarp/node.rb#7860 def content_loc; end + # def copy: (**params) -> XStringNode + # + # source://yarp//lib/yarp/node.rb#7888 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5539 + # source://yarp//lib/yarp/node.rb#7883 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5547 + # source://yarp//lib/yarp/node.rb#7902 def deconstruct_keys(keys); end # def opening: () -> String # - # source://yarp//lib/yarp/node.rb#5552 + # source://yarp//lib/yarp/node.rb#7907 def opening; end # attr_reader opening_loc: Location # - # source://yarp//lib/yarp/node.rb#5513 + # source://yarp//lib/yarp/node.rb#7857 def opening_loc; end # attr_reader unescaped: String # - # source://yarp//lib/yarp/node.rb#5522 + # source://yarp//lib/yarp/node.rb#7866 def unescaped; end end @@ -10256,68 +13266,73 @@ end # yield 1 # ^^^^^^^ # -# source://yarp//lib/yarp/node.rb#5571 +# source://yarp//lib/yarp/node.rb#7927 class YARP::YieldNode < ::YARP::Node - # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: Node?, rparen_loc: Location?, location: Location) -> void + # def initialize: (keyword_loc: Location, lparen_loc: Location?, arguments: ArgumentsNode?, rparen_loc: Location?, location: Location) -> void # # @return [YieldNode] a new instance of YieldNode # - # source://yarp//lib/yarp/node.rb#5585 + # source://yarp//lib/yarp/node.rb#7940 def initialize(keyword_loc, lparen_loc, arguments, rparen_loc, location); end # def accept: (visitor: Visitor) -> void # - # source://yarp//lib/yarp/node.rb#5594 + # source://yarp//lib/yarp/node.rb#7949 def accept(visitor); end - # attr_reader arguments: Node? + # attr_reader arguments: ArgumentsNode? # - # source://yarp//lib/yarp/node.rb#5579 + # source://yarp//lib/yarp/node.rb#7934 def arguments; end # def child_nodes: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5599 + # source://yarp//lib/yarp/node.rb#7954 def child_nodes; end + # def copy: (**params) -> YieldNode + # + # source://yarp//lib/yarp/node.rb#7959 + def copy(**params); end + # def child_nodes: () -> Array[nil | Node] # def deconstruct: () -> Array[nil | Node] # - # source://yarp//lib/yarp/node.rb#5599 + # source://yarp//lib/yarp/node.rb#7954 def deconstruct; end # def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location] # - # source://yarp//lib/yarp/node.rb#5607 + # source://yarp//lib/yarp/node.rb#7973 def deconstruct_keys(keys); end # def keyword: () -> String # - # source://yarp//lib/yarp/node.rb#5612 + # source://yarp//lib/yarp/node.rb#7978 def keyword; end # attr_reader keyword_loc: Location # - # source://yarp//lib/yarp/node.rb#5573 + # source://yarp//lib/yarp/node.rb#7928 def keyword_loc; end # def lparen: () -> String? # - # source://yarp//lib/yarp/node.rb#5617 + # source://yarp//lib/yarp/node.rb#7983 def lparen; end # attr_reader lparen_loc: Location? # - # source://yarp//lib/yarp/node.rb#5576 + # source://yarp//lib/yarp/node.rb#7931 def lparen_loc; end # def rparen: () -> String? # - # source://yarp//lib/yarp/node.rb#5622 + # source://yarp//lib/yarp/node.rb#7988 def rparen; end # attr_reader rparen_loc: Location? # - # source://yarp//lib/yarp/node.rb#5582 + # source://yarp//lib/yarp/node.rb#7937 def rparen_loc; end end From 21866e64d48ee97792c1eb46105c42d4b6ed63d3 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Mon, 28 Aug 2023 14:12:29 -0400 Subject: [PATCH 17/20] Set YARP requirement to be >= 0.9 --- Gemfile.lock | 2 +- ruby-lsp.gemspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a42aebc18..8ff82b2fa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,7 +5,7 @@ PATH language_server-protocol (~> 3.17.0) sorbet-runtime syntax_tree (>= 6.1.1, < 7) - yarp (>= 0.8, < 0.10) + yarp (>= 0.9, < 0.10) GEM remote: https://rubygems.org/ diff --git a/ruby-lsp.gemspec b/ruby-lsp.gemspec index cef5f4a2a..69e0a0b93 100644 --- a/ruby-lsp.gemspec +++ b/ruby-lsp.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |s| s.add_dependency("language_server-protocol", "~> 3.17.0") s.add_dependency("sorbet-runtime") s.add_dependency("syntax_tree", ">= 6.1.1", "< 7") - s.add_dependency("yarp", ">= 0.8", "< 0.10") + s.add_dependency("yarp", ">= 0.9", "< 0.10") s.required_ruby_version = ">= 3.0" end From 7023b68006b8a1226a74ff58562df7973aa7a325 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Mon, 28 Aug 2023 15:07:34 -0400 Subject: [PATCH 18/20] Add missing workspace symbol comment to requests.rb --- lib/ruby_lsp/requests.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ruby_lsp/requests.rb b/lib/ruby_lsp/requests.rb index 77e726aa8..b46fa0752 100644 --- a/lib/ruby_lsp/requests.rb +++ b/lib/ruby_lsp/requests.rb @@ -21,6 +21,7 @@ module RubyLsp # - [CodeLens](rdoc-ref:RubyLsp::Requests::CodeLens) # - [Definition](rdoc-ref:RubyLsp::Requests::Definition) # - [ShowSyntaxTree](rdoc-ref:RubyLsp::Requests::ShowSyntaxTree) + # - [WorkspaceSymbol](rdoc-ref:RubyLsp::Requests::WorkspaceSymbol) module Requests autoload :BaseRequest, "ruby_lsp/requests/base_request" From e4f09672d7f64ba6fd8c717e881fbe5ce473ae79 Mon Sep 17 00:00:00 2001 From: Andy Waite <13400+andyw8@users.noreply.github.com> Date: Mon, 28 Aug 2023 15:57:55 -0400 Subject: [PATCH 19/20] Add expectation for namespaced hover (#941) Co-authored-by: Andy Waite --- .../documented_namespaced_class.exp.json | 24 +++++++++++++++++++ test/fixtures/documented_namespaced_class.rb | 13 ++++++++++ 2 files changed, 37 insertions(+) create mode 100644 test/expectations/hover/documented_namespaced_class.exp.json create mode 100644 test/fixtures/documented_namespaced_class.rb diff --git a/test/expectations/hover/documented_namespaced_class.exp.json b/test/expectations/hover/documented_namespaced_class.exp.json new file mode 100644 index 000000000..463f0294c --- /dev/null +++ b/test/expectations/hover/documented_namespaced_class.exp.json @@ -0,0 +1,24 @@ +{ + "params": [ + { + "line": 1, + "character": 6 + } + ], + "result": { + "contents": { + "kind": "markdown", + "value": "```ruby\nFoo::Bar\n```\n\n**Definitions**: [fake.rb](file:///fake.rb#L2,1-3,3) | [fake.rb](file:///fake.rb#L6,1-7,3) | [fake.rb](file:///fake.rb#L11,3-12,5)\n\n\n\nThis is the documentation for Foo::Bar\n\nThis is more documentation for Foo::Bar\n\nThis is even more documentation for Foo::Bar" + }, + "range": { + "start": { + "line": 1, + "character": 6 + }, + "end": { + "line": 1, + "character": 14 + } + } + } +} diff --git a/test/fixtures/documented_namespaced_class.rb b/test/fixtures/documented_namespaced_class.rb new file mode 100644 index 000000000..839ca5f4f --- /dev/null +++ b/test/fixtures/documented_namespaced_class.rb @@ -0,0 +1,13 @@ +# This is the documentation for Foo::Bar +class Foo::Bar +end + +# This is more documentation for Foo::Bar +class Foo::Bar +end + +class Foo + # This is even more documentation for Foo::Bar + class Bar + end +end From 5cb9407a2e1195df8233566ea2d72acd289119f4 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Mon, 28 Aug 2023 16:24:00 -0400 Subject: [PATCH 20/20] Prevent bundle check from printing to stdout (#942) * Prevent bundle check from printing to stdout * Bump version to v0.9.1 --- Gemfile.lock | 2 +- VERSION | 2 +- lib/ruby_lsp/setup_bundler.rb | 2 +- test/setup_bundler_test.rb | 33 ++++++++++++++++++++++++--------- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8ff82b2fa..c31461c57 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - ruby-lsp (0.9.0) + ruby-lsp (0.9.1) language_server-protocol (~> 3.17.0) sorbet-runtime syntax_tree (>= 6.1.1, < 7) diff --git a/VERSION b/VERSION index ac39a106c..f374f6662 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.0 +0.9.1 diff --git a/lib/ruby_lsp/setup_bundler.rb b/lib/ruby_lsp/setup_bundler.rb index 544e156e2..71c417ea7 100644 --- a/lib/ruby_lsp/setup_bundler.rb +++ b/lib/ruby_lsp/setup_bundler.rb @@ -179,7 +179,7 @@ def run_bundle_install(bundle_gemfile = @gemfile) if should_bundle_install? # Install gems using the custom bundle - command << "bundle check || bundle install " + command << "(bundle check || bundle install) " else # If ruby-lsp or debug are not in the Gemfile, try to update them to the latest version command << "bundle update " diff --git a/test/setup_bundler_test.rb b/test/setup_bundler_test.rb index a20a93449..ff163c60b 100644 --- a/test/setup_bundler_test.rb +++ b/test/setup_bundler_test.rb @@ -6,14 +6,14 @@ class SetupBundlerTest < Minitest::Test def test_does_nothing_if_both_ruby_lsp_and_debug_are_in_the_bundle - Object.any_instance.expects(:system).with(bundle_env, "bundle check || bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env, "(bundle check || bundle install) 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({ "ruby-lsp" => true, "debug" => true }) run_script refute_path_exists(".ruby-lsp") end def test_removes_ruby_lsp_folder_if_both_gems_were_added_to_the_bundle - Object.any_instance.expects(:system).with(bundle_env, "bundle check || bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env, "(bundle check || bundle install) 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({ "ruby-lsp" => true, "debug" => true }) FileUtils.mkdir(".ruby-lsp") run_script @@ -23,7 +23,7 @@ def test_removes_ruby_lsp_folder_if_both_gems_were_added_to_the_bundle end def test_creates_custom_bundle - Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle check || bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "(bundle check || bundle install) 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({}).at_least_once run_script @@ -77,7 +77,7 @@ def test_changing_lockfile_causes_custom_bundle_to_be_rebuilt # instead, which re-locks and adds the ruby-lsp Object.any_instance.expects(:system).with( bundle_env(".ruby-lsp/Gemfile"), - "bundle check || bundle install 1>&2", + "(bundle check || bundle install) 1>&2", ) Bundler.with_unbundled_env do run_script @@ -146,7 +146,7 @@ def test_does_only_updates_every_4_hours capture_subprocess_io do Object.any_instance.expects(:system).with( bundle_env(".ruby-lsp/Gemfile"), - "bundle check || bundle install 1>&2", + "(bundle check || bundle install) 1>&2", ) Bundler.with_unbundled_env do @@ -160,7 +160,7 @@ def test_does_only_updates_every_4_hours def test_uses_absolute_bundle_path_for_bundle_install Bundler.settings.set_global("path", "vendor/bundle") - Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "bundle check || bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env(".ruby-lsp/Gemfile"), "(bundle check || bundle install) 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({}).at_least_once run_script(expected_path: File.expand_path("vendor/bundle", Dir.pwd)) ensure @@ -176,7 +176,7 @@ def test_creates_custom_bundle_if_no_gemfile bundle_gemfile = Pathname.new(".ruby-lsp").expand_path(Dir.pwd) + "Gemfile" Object.any_instance.expects(:system).with( bundle_env(bundle_gemfile.to_s), - "bundle check || bundle install 1>&2", + "(bundle check || bundle install) 1>&2", ) Bundler.with_unbundled_env do @@ -239,7 +239,7 @@ def test_does_nothing_if_both_ruby_lsp_and_debug_are_gemspec_dependencies FileUtils.touch(File.join(dir, "Gemfile.lock")) Bundler.with_unbundled_env do - Object.any_instance.expects(:system).with(bundle_env, "bundle check || bundle install 1>&2") + Object.any_instance.expects(:system).with(bundle_env, "(bundle check || bundle install) 1>&2") Bundler::LockfileParser.any_instance.expects(:dependencies).returns({}) run_script end @@ -255,7 +255,7 @@ def test_creates_custom_bundle_with_specified_branch bundle_gemfile = Pathname.new(".ruby-lsp").expand_path(Dir.pwd) + "Gemfile" Object.any_instance.expects(:system).with( bundle_env(bundle_gemfile.to_s), - "bundle check || bundle install 1>&2", + "(bundle check || bundle install) 1>&2", ) Bundler.with_unbundled_env do @@ -270,6 +270,21 @@ def test_creates_custom_bundle_with_specified_branch end end + def test_does_not_print_to_stdout + # Create a temporary directory with no Gemfile or Gemfile.lock + Dir.mktmpdir do |dir| + Dir.chdir(dir) do + stdout, _stderr = capture_subprocess_io do + Bundler.with_unbundled_env do + run_script + end + end + + assert_empty(stdout) + end + end + end + private # This method runs the script and then immediately unloads it. This allows us to make assertions against the effects