From 880d70a2f0b70ddcb2268edecb0507d4aef44012 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 11 Oct 2026 15:56:48 -0700 Subject: [PATCH 1/5] Find violations in ERB templates ERB templates were replaced with a placeholder before parsing, so `count` returned 0 for their violations and every `sources*` method left them out. The same happened to the other files packwerk parses as Ruby (.builder, .gemspec, .ru, Gemfile, Rakefile). - Extract the Ruby from ERB templates with herb, blanking the HTML in place so line numbers still match the template. Context lines still come from the template itself. - Parse every file type that packwerk parses as Ruby. - Warn when a file can't be parsed. Files that can't be parsed, or that have no code, now have no references instead of raising a TypeError. Fixes #1 --- Gemfile.lock | 7 + lib/query_packwerk.rb | 1 + lib/query_packwerk/file_cache.rb | 30 +- lib/query_packwerk/violation.rb | 2 - query_packwerk.gemspec | 1 + sorbet/rbi/gems/herb@0.11.0.rbi | 8645 ++++++++++++++++++++++++ spec/query_packwerk/file_cache_spec.rb | 71 + spec/query_packwerk/violation_spec.rb | 43 + 8 files changed, 8794 insertions(+), 6 deletions(-) create mode 100644 sorbet/rbi/gems/herb@0.11.0.rbi create mode 100644 spec/query_packwerk/file_cache_spec.rb create mode 100644 spec/query_packwerk/violation_spec.rb diff --git a/Gemfile.lock b/Gemfile.lock index 1cf6386..8af3398 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,6 +3,7 @@ PATH specs: query_packwerk (0.1.25) coderay + herb (>= 0.9) packwerk parse_packwerk rubocop @@ -52,6 +53,12 @@ GEM diff-lcs (1.6.0) drb (2.2.1) erubi (1.13.1) + herb (0.11.0-aarch64-linux-gnu) + herb (0.11.0-aarch64-linux-musl) + herb (0.11.0-arm64-darwin) + herb (0.11.0-x86_64-darwin) + herb (0.11.0-x86_64-linux-gnu) + herb (0.11.0-x86_64-linux-musl) i18n (1.14.7) concurrent-ruby (~> 1.0) io-console (0.8.0) diff --git a/lib/query_packwerk.rb b/lib/query_packwerk.rb index 237ea64..66e2746 100644 --- a/lib/query_packwerk.rb +++ b/lib/query_packwerk.rb @@ -2,6 +2,7 @@ # frozen_string_literal: true require 'sorbet-runtime' +require 'herb' require 'parse_packwerk' require 'rubocop' diff --git a/lib/query_packwerk/file_cache.rb b/lib/query_packwerk/file_cache.rb index 54446f2..efd6f28 100644 --- a/lib/query_packwerk/file_cache.rb +++ b/lib/query_packwerk/file_cache.rb @@ -9,7 +9,9 @@ module QueryPackwerk class FileCache extend T::Sig - RUBY_FILE = T.let(/\.(rb|rake)\z/, Regexp) + # The files packwerk parses as Ruby, from Packwerk::Parsers::Factory + RUBY_FILE = T.let(/(\.(rb|rake|builder|gemspec|ru)|Gemfile|Rakefile)\z/, Regexp) + ERB_FILE = T.let(/\.erb\z/, Regexp) sig { void } def initialize @@ -62,12 +64,18 @@ def set(cache_name, key:, value:) sig { params(file_name: String).returns(RuboCop::AST::Node) } def get_file_ast(file_name) - @file_ast_cache[file_name] ||= ast_from(get_file(file_name)) + @file_ast_cache[file_name] ||= begin + source = processed_source(ruby_source(file_name)) + warn "Could not parse #{file_name}, so its violations are not included" unless source.valid_syntax? + + # Source with no code (only comments, or a template that's only HTML) has no AST either + source.ast || ast_from('x') + end end sig { params(file_name: String).returns(String) } def get_file(file_name) - @file_cache[file_name] ||= if RUBY_FILE.match?(file_name) && File.exist?(file_name) + @file_cache[file_name] ||= if (RUBY_FILE.match?(file_name) || ERB_FILE.match?(file_name)) && File.exist?(file_name) File.read(file_name) else 'x' @@ -133,10 +141,24 @@ def get_full_anonymous_sources(file_name:, class_name:) private + # Blanks out everything in an ERB template except its Ruby code, so line numbers still match the template + sig { params(file_name: String).returns(String) } + def ruby_source(file_name) + source = get_file(file_name) + return source unless ERB_FILE.match?(file_name) + + Herb.extract_ruby(source, semicolons: true, comments: false, preserve_positions: true) + end + + sig { params(string: String).returns(RuboCop::ProcessedSource) } + def processed_source(string) + RuboCop::ProcessedSource.new(string, RUBY_VERSION.to_f) + end + # Turns a string into a Ruby AST sig { params(string: String).returns(RuboCop::AST::Node) } def ast_from(string) - RuboCop::ProcessedSource.new(string, RUBY_VERSION.to_f).ast + processed_source(string).ast end # We can find a constant, but by going up its parents we can find the full call chain. diff --git a/lib/query_packwerk/violation.rb b/lib/query_packwerk/violation.rb index bf3a902..2aa586a 100644 --- a/lib/query_packwerk/violation.rb +++ b/lib/query_packwerk/violation.rb @@ -9,8 +9,6 @@ module QueryPackwerk class Violation extend T::Sig - # This does not play nicely with ERB files which may have violations - RUBY_FILE = T.let(/\.(rb|rake)\z/, Regexp) ALL_CAPS = T.let(/\A[A-Z_]+\z/, Regexp) sig { returns(QueryPackwerk::Package) } diff --git a/query_packwerk.gemspec b/query_packwerk.gemspec index 0e92850..626c3cf 100644 --- a/query_packwerk.gemspec +++ b/query_packwerk.gemspec @@ -34,6 +34,7 @@ Gem::Specification.new do |spec| spec.require_paths = ['lib'] spec.add_dependency 'coderay' + spec.add_dependency 'herb', '>= 0.9' spec.add_dependency 'packwerk' spec.add_dependency 'parse_packwerk' spec.add_dependency 'rubocop' diff --git a/sorbet/rbi/gems/herb@0.11.0.rbi b/sorbet/rbi/gems/herb@0.11.0.rbi new file mode 100644 index 0000000..7a49cc0 --- /dev/null +++ b/sorbet/rbi/gems/herb@0.11.0.rbi @@ -0,0 +1,8645 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `herb` gem. +# Please instead update this file by running `bin/tapioca gem herb`. + + +# source://herb//lib/herb/colors.rb#6 +module Herb + class << self + # : (?arena_stats: bool) -> untyped + # + # source://herb//lib/herb.rb#96 + def arena_stats(*_arg0, **_arg1, &_arg2); end + + # source://herb//lib/herb.rb#132 + def configuration(project_path = T.unsafe(nil)); end + + # source://herb//lib/herb.rb#138 + def configure(project_path = T.unsafe(nil)); end + + # : () -> Array[String] + # + # source://herb//lib/herb.rb#128 + def default_erb_openings; end + + # : (String old_source, String new_source, ?track_whitespace_changes: bool) -> Herb::Diff::Result + # + # source://herb//lib/herb.rb#91 + def diff(*_arg0, **_arg1, &_arg2); end + + # : (*String gems) -> void + # + # source://herb//lib/herb/ensure_installed.rb#5 + def ensure_installed(*gems); end + + # : (String source) -> String + # + # source://herb//lib/herb.rb#86 + def extract_html(*_arg0, **_arg1, &_arg2); end + + # : (String source, ?semicolons: bool, ?comments: bool, ?preserve_positions: bool, ?custom_tags: bool, ?erb_openers: Array[String]) -> String + # + # source://herb//lib/herb.rb#81 + def extract_ruby(*_arg0, **_arg1, &_arg2); end + + # : (String source) -> untyped + # + # source://herb//lib/herb.rb#101 + def leak_check(*_arg0, **_arg1, &_arg2); end + + # : (String input, ?erb_openers: Array[String], ?arena_stats: bool) -> LexResult + # + # source://herb//lib/herb.rb#76 + def lex(*_arg0, **_arg1, &_arg2); end + + # : (String path, ?arena_stats: bool) -> LexResult + # + # source://herb//lib/herb.rb#111 + def lex_file(path, arena_stats: T.unsafe(nil)); end + + # : (String input, ?track_whitespace: bool, ?track_locations: bool, ?analyze: bool, ?strict: bool, ?action_view_helpers: bool, ?transform_conditionals: bool, ?dot_notation_tags: bool, ?render_nodes: bool, ?strict_locals: bool, ?herb_directives: bool, ?iteration_nodes: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool, ?html: bool, ?erb_openers: Array[String], ?arena_stats: bool) -> ParseResult + # + # source://herb//lib/herb.rb#71 + def parse(*_arg0, **_arg1, &_arg2); end + + # : (String path, ?track_whitespace: bool, ?track_locations: bool, ?analyze: bool, ?strict: bool, ?action_view_helpers: bool, ?transform_conditionals: bool, ?strict_locals: bool, ?herb_directives: bool, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool, ?arena_stats: bool) -> ParseResult + # + # source://herb//lib/herb.rb#116 + def parse_file(path, track_locations: T.unsafe(nil), track_whitespace: T.unsafe(nil), analyze: T.unsafe(nil), strict: T.unsafe(nil), action_view_helpers: T.unsafe(nil), transform_conditionals: T.unsafe(nil), strict_locals: T.unsafe(nil), herb_directives: T.unsafe(nil), prism_nodes: T.unsafe(nil), prism_nodes_deep: T.unsafe(nil), prism_program: T.unsafe(nil), arena_stats: T.unsafe(nil)); end + + # : (String source) -> Prism::ParseResult + # + # source://herb//lib/herb.rb#121 + def parse_ruby(source); end + + # source://herb//lib/herb.rb#144 + def reset_configuration!; end + + # : () -> String + # + # source://herb//lib/herb.rb#106 + def version; end + + private + + # : (Array[String]) -> void + # + # @raise [LoadError] + # + # source://herb//lib/herb/ensure_installed.rb#35 + def refuse_bundle_replacement(missing); end + end +end + +# : type serialized_node = { +# | type: String, +# | location: serialized_location?, +# | errors: Array[serialized_error] +# | } +# +# source://herb//lib/herb/ast/node.rb#12 +module Herb::AST; end + +# : type serialized_cdata_node = { +# | tag_opening: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1884 +class Herb::AST::CDATANode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Array[Herb::AST::Node], Herb::Token?) -> void + # + # @return [CDATANode] a new instance of CDATANode + # + # source://herb//lib/herb/ast/nodes.rb#1892 + def initialize(type, location, errors, tag_opening, children, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1919 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1924 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1888 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1929 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1934 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1889 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1887 + def tag_opening; end + + # : () -> serialized_cdata_node + # + # source://herb//lib/herb/ast/nodes.rb#1910 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1939 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?children: Array[Herb::AST::Node], ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> CDATANode + # + # source://herb//lib/herb/ast/nodes.rb#1905 + def build(tag_opening: T.unsafe(nil), children: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1900 + def type; end + end +end + +# : type serialized_document_node = { +# | children: Array[Herb::AST::Node], +# | prism_context: nil, +# | prism_node: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#16 +class Herb::AST::DocumentNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Array[Herb::AST::Node], nil, String?) -> void + # + # @return [DocumentNode] a new instance of DocumentNode + # + # source://herb//lib/herb/ast/nodes.rb#24 + def initialize(type, location, errors, children, prism_context, prism_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#67 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#72 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#19 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#77 + def compact_child_nodes; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#42 + def deserialized_prism_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#82 + def inspect; end + + # : nil + # + # source://herb//lib/herb/ast/nodes.rb#20 + def prism_context; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#21 + def prism_node; end + + # : () -> serialized_document_node + # + # source://herb//lib/herb/ast/nodes.rb#58 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#87 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?children: Array[Herb::AST::Node], ?prism_context: nil, ?prism_node: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> DocumentNode + # + # source://herb//lib/herb/ast/nodes.rb#37 + def build(children: T.unsafe(nil), prism_context: T.unsafe(nil), prism_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#32 + def type; end + end +end + +# : type serialized_erb_begin_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | prism_node: String?, +# | statements: Array[Herb::AST::Node], +# | rescue_clause: Herb::AST::ERBRescueNode?, +# | else_clause: Herb::AST::ERBElseNode?, +# | ensure_clause: Herb::AST::ERBEnsureNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3935 +class Herb::AST::ERBBeginNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, String?, Array[Herb::AST::Node], Herb::AST::ERBRescueNode?, Herb::AST::ERBElseNode?, Herb::AST::ERBEnsureNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBBeginNode] a new instance of ERBBeginNode + # + # source://herb//lib/herb/ast/nodes.rb#3949 + def initialize(type, location, errors, tag_opening, content, tag_closing, prism_node, statements, rescue_clause, else_clause, ensure_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4004 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4009 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4014 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3939 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#3973 + def deserialized_prism_node; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#3944 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#3946 + def end_node; end + + # : Herb::AST::ERBEnsureNode? + # + # source://herb//lib/herb/ast/nodes.rb#3945 + def ensure_clause; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4019 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#3941 + def prism_node; end + + # : Herb::AST::ERBRescueNode? + # + # source://herb//lib/herb/ast/nodes.rb#3943 + def rescue_clause; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3942 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3940 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3938 + def tag_opening; end + + # : () -> serialized_erb_begin_node + # + # source://herb//lib/herb/ast/nodes.rb#3989 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4024 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?prism_node: String?, ?statements: Array[Herb::AST::Node], ?rescue_clause: Herb::AST::ERBRescueNode?, ?else_clause: Herb::AST::ERBElseNode?, ?ensure_clause: Herb::AST::ERBEnsureNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBBeginNode + # + # source://herb//lib/herb/ast/nodes.rb#3968 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), prism_node: T.unsafe(nil), statements: T.unsafe(nil), rescue_clause: T.unsafe(nil), else_clause: T.unsafe(nil), ensure_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3963 + def type; end + end +end + +# : type serialized_erb_block_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | prism_node: String?, +# | body: Array[Herb::AST::Node], +# | block_arguments: Array[Herb::AST::RubyParameterNode]?, +# | rescue_clause: Herb::AST::ERBRescueNode?, +# | else_clause: Herb::AST::ERBElseNode?, +# | ensure_clause: Herb::AST::ERBEnsureNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2534 +class Herb::AST::ERBBlockNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, String?, Array[Herb::AST::Node], Array[Herb::AST::RubyParameterNode]?, Herb::AST::ERBRescueNode?, Herb::AST::ERBElseNode?, Herb::AST::ERBEnsureNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBBlockNode] a new instance of ERBBlockNode + # + # source://herb//lib/herb/ast/nodes.rb#2549 + def initialize(type, location, errors, tag_opening, content, tag_closing, prism_node, body, block_arguments, rescue_clause, else_clause, ensure_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2606 + def accept(visitor); end + + # : Array[Herb::AST::RubyParameterNode]? + # + # source://herb//lib/herb/ast/nodes.rb#2542 + def block_arguments; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2541 + def body; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2611 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2616 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2538 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#2574 + def deserialized_prism_node; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#2544 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#2546 + def end_node; end + + # : Herb::AST::ERBEnsureNode? + # + # source://herb//lib/herb/ast/nodes.rb#2545 + def ensure_clause; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2621 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#2540 + def prism_node; end + + # : Herb::AST::ERBRescueNode? + # + # source://herb//lib/herb/ast/nodes.rb#2543 + def rescue_clause; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2539 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2537 + def tag_opening; end + + # : () -> serialized_erb_block_node + # + # source://herb//lib/herb/ast/nodes.rb#2590 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2626 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?prism_node: String?, ?body: Array[Herb::AST::Node], ?block_arguments: Array[Herb::AST::RubyParameterNode]?, ?rescue_clause: Herb::AST::ERBRescueNode?, ?else_clause: Herb::AST::ERBElseNode?, ?ensure_clause: Herb::AST::ERBEnsureNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBBlockNode + # + # source://herb//lib/herb/ast/nodes.rb#2569 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), prism_node: T.unsafe(nil), body: T.unsafe(nil), block_arguments: T.unsafe(nil), rescue_clause: T.unsafe(nil), else_clause: T.unsafe(nil), ensure_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2564 + def type; end + end +end + +# : type serialized_erb_case_match_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | prism_node: String?, +# | conditions: Array[Herb::AST::ERBInNode], +# | else_clause: Herb::AST::ERBElseNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3174 +class Herb::AST::ERBCaseMatchNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node], String?, Array[Herb::AST::ERBInNode], Herb::AST::ERBElseNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBCaseMatchNode] a new instance of ERBCaseMatchNode + # + # source://herb//lib/herb/ast/nodes.rb#3187 + def initialize(type, location, errors, tag_opening, content, tag_closing, children, prism_node, conditions, else_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3240 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3245 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3180 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3250 + def compact_child_nodes; end + + # : Array[Herb::AST::ERBInNode] + # + # source://herb//lib/herb/ast/nodes.rb#3182 + def conditions; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3178 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#3210 + def deserialized_prism_node; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#3183 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#3184 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3255 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#3181 + def prism_node; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3179 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3177 + def tag_opening; end + + # : () -> serialized_erb_case_match_node + # + # source://herb//lib/herb/ast/nodes.rb#3226 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3260 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?children: Array[Herb::AST::Node], ?prism_node: String?, ?conditions: Array[Herb::AST::ERBInNode], ?else_clause: Herb::AST::ERBElseNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBCaseMatchNode + # + # source://herb//lib/herb/ast/nodes.rb#3205 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), children: T.unsafe(nil), prism_node: T.unsafe(nil), conditions: T.unsafe(nil), else_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3200 + def type; end + end +end + +# : type serialized_erb_case_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | prism_node: String?, +# | conditions: Array[Herb::AST::ERBWhenNode], +# | else_clause: Herb::AST::ERBElseNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3022 +class Herb::AST::ERBCaseNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node], String?, Array[Herb::AST::ERBWhenNode], Herb::AST::ERBElseNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBCaseNode] a new instance of ERBCaseNode + # + # source://herb//lib/herb/ast/nodes.rb#3035 + def initialize(type, location, errors, tag_opening, content, tag_closing, children, prism_node, conditions, else_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3088 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3093 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3028 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3098 + def compact_child_nodes; end + + # : Array[Herb::AST::ERBWhenNode] + # + # source://herb//lib/herb/ast/nodes.rb#3030 + def conditions; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3026 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#3058 + def deserialized_prism_node; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#3031 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#3032 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3103 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#3029 + def prism_node; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3027 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3025 + def tag_opening; end + + # : () -> serialized_erb_case_node + # + # source://herb//lib/herb/ast/nodes.rb#3074 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3108 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?children: Array[Herb::AST::Node], ?prism_node: String?, ?conditions: Array[Herb::AST::ERBWhenNode], ?else_clause: Herb::AST::ERBElseNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBCaseNode + # + # source://herb//lib/herb/ast/nodes.rb#3053 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), children: T.unsafe(nil), prism_node: T.unsafe(nil), conditions: T.unsafe(nil), else_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3048 + def type; end + end +end + +# : type serialized_erb_comment_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#5473 +class Herb::AST::ERBCommentNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?) -> void + # + # @return [ERBCommentNode] a new instance of ERBCommentNode + # + # source://herb//lib/herb/ast/nodes.rb#5481 + def initialize(type, location, errors, tag_opening, content, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#5508 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#5513 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5518 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5477 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5523 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5478 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5476 + def tag_opening; end + + # : () -> serialized_erb_comment_node + # + # source://herb//lib/herb/ast/nodes.rb#5499 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#5528 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBCommentNode + # + # source://herb//lib/herb/ast/nodes.rb#5494 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5489 + def type; end + end +end + +# : type serialized_erb_content_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | analyzed_ruby: nil, +# | parsed: bool, +# | valid: bool, +# | prism_node: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2055 +class Herb::AST::ERBContentNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, nil, bool, bool, String?) -> void + # + # @return [ERBContentNode] a new instance of ERBContentNode + # + # source://herb//lib/herb/ast/nodes.rb#2067 + def initialize(type, location, errors, tag_opening, content, tag_closing, analyzed_ruby, parsed, valid, prism_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2118 + def accept(visitor); end + + # : nil + # + # source://herb//lib/herb/ast/nodes.rb#2061 + def analyzed_ruby; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2123 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2128 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2059 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#2089 + def deserialized_prism_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2133 + def inspect; end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#2062 + def parsed; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/erb_content_node.rb#8 + def parsed_prism_node; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/erb_content_node.rb#25 + def prism; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#2064 + def prism_node; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2060 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2058 + def tag_opening; end + + # : () -> serialized_erb_content_node + # + # source://herb//lib/herb/ast/nodes.rb#2105 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2138 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#2063 + def valid; end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?analyzed_ruby: nil, ?parsed: bool, ?valid: bool, ?prism_node: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBContentNode + # + # source://herb//lib/herb/ast/nodes.rb#2084 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), analyzed_ruby: T.unsafe(nil), parsed: T.unsafe(nil), valid: T.unsafe(nil), prism_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2079 + def type; end + end +end + +# : type serialized_erb_else_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | statements: Array[Herb::AST::Node], +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2278 +class Herb::AST::ERBElseNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node]) -> void + # + # @return [ERBElseNode] a new instance of ERBElseNode + # + # source://herb//lib/herb/ast/nodes.rb#2287 + def initialize(type, location, errors, tag_opening, content, tag_closing, statements); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2316 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2321 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2326 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2282 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2331 + def inspect; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2284 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2283 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2281 + def tag_opening; end + + # : () -> serialized_erb_else_node + # + # source://herb//lib/herb/ast/nodes.rb#2306 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2336 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?statements: Array[Herb::AST::Node], ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBElseNode + # + # source://herb//lib/herb/ast/nodes.rb#2301 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), statements: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2296 + def type; end + end +end + +# : type serialized_erb_end_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2186 +class Herb::AST::ERBEndNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?) -> void + # + # @return [ERBEndNode] a new instance of ERBEndNode + # + # source://herb//lib/herb/ast/nodes.rb#2194 + def initialize(type, location, errors, tag_opening, content, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2221 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2226 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2231 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2190 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2236 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2191 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2189 + def tag_opening; end + + # : () -> serialized_erb_end_node + # + # source://herb//lib/herb/ast/nodes.rb#2212 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2241 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBEndNode + # + # source://herb//lib/herb/ast/nodes.rb#2207 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2202 + def type; end + end +end + +# : type serialized_erb_ensure_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | statements: Array[Herb::AST::Node], +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3833 +class Herb::AST::ERBEnsureNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node]) -> void + # + # @return [ERBEnsureNode] a new instance of ERBEnsureNode + # + # source://herb//lib/herb/ast/nodes.rb#3842 + def initialize(type, location, errors, tag_opening, content, tag_closing, statements); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3871 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3876 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3881 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3837 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3886 + def inspect; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3839 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3838 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3836 + def tag_opening; end + + # : () -> serialized_erb_ensure_node + # + # source://herb//lib/herb/ast/nodes.rb#3861 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3891 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?statements: Array[Herb::AST::Node], ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBEnsureNode + # + # source://herb//lib/herb/ast/nodes.rb#3856 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), statements: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3851 + def type; end + end +end + +# : type serialized_erb_for_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | prism_node: String?, +# | statements: Array[Herb::AST::Node], +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3592 +class Herb::AST::ERBForNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, String?, Array[Herb::AST::Node], Herb::AST::ERBEndNode?) -> void + # + # @return [ERBForNode] a new instance of ERBForNode + # + # source://herb//lib/herb/ast/nodes.rb#3603 + def initialize(type, location, errors, tag_opening, content, tag_closing, prism_node, statements, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3652 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3657 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3662 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3596 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#3624 + def deserialized_prism_node; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#3600 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3667 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#3598 + def prism_node; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3599 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3597 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3595 + def tag_opening; end + + # : () -> serialized_erb_for_node + # + # source://herb//lib/herb/ast/nodes.rb#3640 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3672 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?prism_node: String?, ?statements: Array[Herb::AST::Node], ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBForNode + # + # source://herb//lib/herb/ast/nodes.rb#3619 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), prism_node: T.unsafe(nil), statements: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3614 + def type; end + end +end + +# : type serialized_erb_if_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | then_keyword: Herb::Location?, +# | prism_node: String?, +# | statements: Array[Herb::AST::Node], +# | subsequent: (Herb::AST::ERBIfNode | Herb::AST::ERBElseNode)?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2379 +class Herb::AST::ERBIfNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Location?, String?, Array[Herb::AST::Node], (Herb::AST::ERBIfNode | Herb::AST::ERBElseNode)?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBIfNode] a new instance of ERBIfNode + # + # source://herb//lib/herb/ast/nodes.rb#2392 + def initialize(type, location, errors, tag_opening, content, tag_closing, then_keyword, prism_node, statements, subsequent, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2445 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2450 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2455 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2383 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#2415 + def deserialized_prism_node; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#2389 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2460 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#2386 + def prism_node; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2387 + def statements; end + + # : (Herb::AST::ERBIfNode | Herb::AST::ERBElseNode)? + # + # source://herb//lib/herb/ast/nodes.rb#2388 + def subsequent; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2384 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2382 + def tag_opening; end + + # : Herb::Location? + # + # source://herb//lib/herb/ast/nodes.rb#2385 + def then_keyword; end + + # : () -> serialized_erb_if_node + # + # source://herb//lib/herb/ast/nodes.rb#2431 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2465 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?then_keyword: Herb::Location?, ?prism_node: String?, ?statements: Array[Herb::AST::Node], ?subsequent: (Herb::AST::ERBIfNode | Herb::AST::ERBElseNode)?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBIfNode + # + # source://herb//lib/herb/ast/nodes.rb#2410 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), then_keyword: T.unsafe(nil), prism_node: T.unsafe(nil), statements: T.unsafe(nil), subsequent: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2405 + def type; end + end +end + +# : type serialized_erb_in_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | then_keyword: Herb::Location?, +# | statements: Array[Herb::AST::Node], +# | } +# +# source://herb//lib/herb/ast/nodes.rb#5061 +class Herb::AST::ERBInNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Location?, Array[Herb::AST::Node]) -> void + # + # @return [ERBInNode] a new instance of ERBInNode + # + # source://herb//lib/herb/ast/nodes.rb#5071 + def initialize(type, location, errors, tag_opening, content, tag_closing, then_keyword, statements); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#5102 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#5107 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5112 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5065 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5117 + def inspect; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5068 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5066 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5064 + def tag_opening; end + + # : Herb::Location? + # + # source://herb//lib/herb/ast/nodes.rb#5067 + def then_keyword; end + + # : () -> serialized_erb_in_node + # + # source://herb//lib/herb/ast/nodes.rb#5091 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#5122 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?then_keyword: Herb::Location?, ?statements: Array[Herb::AST::Node], ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBInNode + # + # source://herb//lib/herb/ast/nodes.rb#5086 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), then_keyword: T.unsafe(nil), statements: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5081 + def type; end + end +end + +# : type serialized_erb_iteration_block_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | prism_node: String?, +# | receiver: Herb::Token?, +# | call_operator: Herb::Token?, +# | message: Herb::Token?, +# | arguments: Array[Herb::AST::RubyLiteralNode]?, +# | block_opening: Herb::Token?, +# | body: Array[Herb::AST::Node], +# | block_arguments: Array[Herb::AST::RubyParameterNode]?, +# | rescue_clause: Herb::AST::ERBRescueNode?, +# | else_clause: Herb::AST::ERBElseNode?, +# | ensure_clause: Herb::AST::ERBEnsureNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2715 +class Herb::AST::ERBIterationBlockNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, String?, Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::RubyLiteralNode]?, Herb::Token?, Array[Herb::AST::Node], Array[Herb::AST::RubyParameterNode]?, Herb::AST::ERBRescueNode?, Herb::AST::ERBElseNode?, Herb::AST::ERBEnsureNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBIterationBlockNode] a new instance of ERBIterationBlockNode + # + # source://herb//lib/herb/ast/nodes.rb#2735 + def initialize(type, location, errors, tag_opening, content, tag_closing, prism_node, receiver, call_operator, message, arguments, block_opening, body, block_arguments, rescue_clause, else_clause, ensure_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2802 + def accept(visitor); end + + # : Array[Herb::AST::RubyLiteralNode]? + # + # source://herb//lib/herb/ast/nodes.rb#2725 + def arguments; end + + # : Array[Herb::AST::RubyParameterNode]? + # + # source://herb//lib/herb/ast/nodes.rb#2728 + def block_arguments; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2726 + def block_opening; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2727 + def body; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2723 + def call_operator; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2807 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2812 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2719 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#2765 + def deserialized_prism_node; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#2730 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#2732 + def end_node; end + + # : Herb::AST::ERBEnsureNode? + # + # source://herb//lib/herb/ast/nodes.rb#2731 + def ensure_clause; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2817 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2724 + def message; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#2721 + def prism_node; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2722 + def receiver; end + + # : Herb::AST::ERBRescueNode? + # + # source://herb//lib/herb/ast/nodes.rb#2729 + def rescue_clause; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2720 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2718 + def tag_opening; end + + # : () -> serialized_erb_iteration_block_node + # + # source://herb//lib/herb/ast/nodes.rb#2781 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2822 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?prism_node: String?, ?receiver: Herb::Token?, ?call_operator: Herb::Token?, ?message: Herb::Token?, ?arguments: Array[Herb::AST::RubyLiteralNode]?, ?block_opening: Herb::Token?, ?body: Array[Herb::AST::Node], ?block_arguments: Array[Herb::AST::RubyParameterNode]?, ?rescue_clause: Herb::AST::ERBRescueNode?, ?else_clause: Herb::AST::ERBElseNode?, ?ensure_clause: Herb::AST::ERBEnsureNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBIterationBlockNode + # + # source://herb//lib/herb/ast/nodes.rb#2760 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), prism_node: T.unsafe(nil), receiver: T.unsafe(nil), call_operator: T.unsafe(nil), message: T.unsafe(nil), arguments: T.unsafe(nil), block_opening: T.unsafe(nil), body: T.unsafe(nil), block_arguments: T.unsafe(nil), rescue_clause: T.unsafe(nil), else_clause: T.unsafe(nil), ensure_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2755 + def type; end + end +end + +# : type serialized_erb_open_tag_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | tag_name: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1340 +class Herb::AST::ERBOpenTagNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node]) -> void + # + # @return [ERBOpenTagNode] a new instance of ERBOpenTagNode + # + # source://herb//lib/herb/ast/nodes.rb#1350 + def initialize(type, location, errors, tag_opening, content, tag_closing, tag_name, children); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1381 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1386 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1347 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1391 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1344 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1396 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1345 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1346 + def tag_name; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1343 + def tag_opening; end + + # : () -> serialized_erb_open_tag_node + # + # source://herb//lib/herb/ast/nodes.rb#1370 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1401 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?tag_name: Herb::Token?, ?children: Array[Herb::AST::Node], ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBOpenTagNode + # + # source://herb//lib/herb/ast/nodes.rb#1365 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), tag_name: T.unsafe(nil), children: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1360 + def type; end + end +end + +# : type serialized_erb_render_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | analyzed_ruby: nil, +# | prism_node: String?, +# | keywords: Herb::AST::RubyRenderKeywordsNode?, +# | body: Array[Herb::AST::Node], +# | block_arguments: Array[Herb::AST::RubyParameterNode]?, +# | rescue_clause: Herb::AST::ERBRescueNode?, +# | else_clause: Herb::AST::ERBElseNode?, +# | ensure_clause: Herb::AST::ERBEnsureNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4558 +class Herb::AST::ERBRenderNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, nil, String?, Herb::AST::RubyRenderKeywordsNode?, Array[Herb::AST::Node], Array[Herb::AST::RubyParameterNode]?, Herb::AST::ERBRescueNode?, Herb::AST::ERBElseNode?, Herb::AST::ERBEnsureNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBRenderNode] a new instance of ERBRenderNode + # + # source://herb//lib/herb/ast/nodes.rb#4575 + def initialize(type, location, errors, tag_opening, content, tag_closing, analyzed_ruby, prism_node, keywords, body, block_arguments, rescue_clause, else_clause, ensure_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4636 + def accept(visitor); end + + # : nil + # + # source://herb//lib/herb/ast/nodes.rb#4564 + def analyzed_ruby; end + + # : Array[Herb::AST::RubyParameterNode]? + # + # source://herb//lib/herb/ast/nodes.rb#4568 + def block_arguments; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4567 + def body; end + + # @return [Boolean] + # + # source://herb//lib/herb/ast/erb_render_node.rb#38 + def bound_state?; end + + # source://herb//lib/herb/ast/erb_render_node.rb#50 + def candidate_paths(name = T.unsafe(nil), view_root = T.unsafe(nil), source_directory = T.unsafe(nil)); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4641 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4646 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4562 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#4602 + def deserialized_prism_node; end + + # @return [Boolean] + # + # source://herb//lib/herb/ast/erb_render_node.rb#14 + def dynamic?; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#4570 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#4572 + def end_node; end + + # : Herb::AST::ERBEnsureNode? + # + # source://herb//lib/herb/ast/nodes.rb#4571 + def ensure_clause; end + + # source://herb//lib/herb/ast/erb_render_node.rb#66 + def find_non_partial_matches(name = T.unsafe(nil), view_root = T.unsafe(nil), source_directory = T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4651 + def inspect; end + + # : Herb::AST::RubyRenderKeywordsNode? + # + # source://herb//lib/herb/ast/nodes.rb#4566 + def keywords; end + + # source://herb//lib/herb/ast/erb_render_node.rb#26 + def layout_name; end + + # source://herb//lib/herb/ast/erb_render_node.rb#30 + def local_names; end + + # source://herb//lib/herb/ast/erb_render_node.rb#18 + def partial_path; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#4565 + def prism_node; end + + # : Herb::AST::ERBRescueNode? + # + # source://herb//lib/herb/ast/nodes.rb#4569 + def rescue_clause; end + + # source://herb//lib/herb/ast/erb_render_node.rb#42 + def resolve(view_root: T.unsafe(nil), source_directory: T.unsafe(nil)); end + + # source://herb//lib/herb/ast/erb_render_node.rb#58 + def similar_partials(view_root: T.unsafe(nil), source_directory: T.unsafe(nil), limit: T.unsafe(nil)); end + + # source://herb//lib/herb/ast/erb_render_node.rb#34 + def state_names; end + + # @return [Boolean] + # + # source://herb//lib/herb/ast/erb_render_node.rb#10 + def static_partial?; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4563 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4561 + def tag_opening; end + + # source://herb//lib/herb/ast/erb_render_node.rb#22 + def template_name; end + + # : () -> serialized_erb_render_node + # + # source://herb//lib/herb/ast/nodes.rb#4618 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4656 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + private + + # source://herb//lib/herb/ast/erb_render_node.rb#80 + def coerce_directory(directory); end + + # source://herb//lib/herb/ast/erb_render_node.rb#76 + def resolver_for(view_root); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?analyzed_ruby: nil, ?prism_node: String?, ?keywords: Herb::AST::RubyRenderKeywordsNode?, ?body: Array[Herb::AST::Node], ?block_arguments: Array[Herb::AST::RubyParameterNode]?, ?rescue_clause: Herb::AST::ERBRescueNode?, ?else_clause: Herb::AST::ERBElseNode?, ?ensure_clause: Herb::AST::ERBEnsureNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBRenderNode + # + # source://herb//lib/herb/ast/nodes.rb#4597 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), analyzed_ruby: T.unsafe(nil), prism_node: T.unsafe(nil), keywords: T.unsafe(nil), body: T.unsafe(nil), block_arguments: T.unsafe(nil), rescue_clause: T.unsafe(nil), else_clause: T.unsafe(nil), ensure_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4592 + def type; end + end +end + +# : type serialized_erb_rescue_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | statements: Array[Herb::AST::Node], +# | subsequent: Herb::AST::ERBRescueNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3725 +class Herb::AST::ERBRescueNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node], Herb::AST::ERBRescueNode?) -> void + # + # @return [ERBRescueNode] a new instance of ERBRescueNode + # + # source://herb//lib/herb/ast/nodes.rb#3735 + def initialize(type, location, errors, tag_opening, content, tag_closing, statements, subsequent); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3766 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3771 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3776 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3729 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3781 + def inspect; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3731 + def statements; end + + # : Herb::AST::ERBRescueNode? + # + # source://herb//lib/herb/ast/nodes.rb#3732 + def subsequent; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3730 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3728 + def tag_opening; end + + # : () -> serialized_erb_rescue_node + # + # source://herb//lib/herb/ast/nodes.rb#3755 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3786 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?statements: Array[Herb::AST::Node], ?subsequent: Herb::AST::ERBRescueNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBRescueNode + # + # source://herb//lib/herb/ast/nodes.rb#3750 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), statements: T.unsafe(nil), subsequent: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3745 + def type; end + end +end + +# : type serialized_erb_strict_locals_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | analyzed_ruby: nil, +# | prism_node: String?, +# | locals: Array[Herb::AST::RubyParameterNode]?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4845 +class Herb::AST::ERBStrictLocalsNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, nil, String?, Array[Herb::AST::RubyParameterNode]?) -> void + # + # @return [ERBStrictLocalsNode] a new instance of ERBStrictLocalsNode + # + # source://herb//lib/herb/ast/nodes.rb#4856 + def initialize(type, location, errors, tag_opening, content, tag_closing, analyzed_ruby, prism_node, locals); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4905 + def accept(visitor); end + + # : nil + # + # source://herb//lib/herb/ast/nodes.rb#4851 + def analyzed_ruby; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4910 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4915 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4849 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#4877 + def deserialized_prism_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4920 + def inspect; end + + # : Array[Herb::AST::RubyParameterNode]? + # + # source://herb//lib/herb/ast/nodes.rb#4853 + def locals; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#4852 + def prism_node; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4850 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4848 + def tag_opening; end + + # : () -> serialized_erb_strict_locals_node + # + # source://herb//lib/herb/ast/nodes.rb#4893 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4925 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?analyzed_ruby: nil, ?prism_node: String?, ?locals: Array[Herb::AST::RubyParameterNode]?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBStrictLocalsNode + # + # source://herb//lib/herb/ast/nodes.rb#4872 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), analyzed_ruby: T.unsafe(nil), prism_node: T.unsafe(nil), locals: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4867 + def type; end + end +end + +# : type serialized_erb_unless_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | then_keyword: Herb::Location?, +# | prism_node: String?, +# | statements: Array[Herb::AST::Node], +# | else_clause: Herb::AST::ERBElseNode?, +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4104 +class Herb::AST::ERBUnlessNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Location?, String?, Array[Herb::AST::Node], Herb::AST::ERBElseNode?, Herb::AST::ERBEndNode?) -> void + # + # @return [ERBUnlessNode] a new instance of ERBUnlessNode + # + # source://herb//lib/herb/ast/nodes.rb#4117 + def initialize(type, location, errors, tag_opening, content, tag_closing, then_keyword, prism_node, statements, else_clause, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4170 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4175 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4180 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4108 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#4140 + def deserialized_prism_node; end + + # : Herb::AST::ERBElseNode? + # + # source://herb//lib/herb/ast/nodes.rb#4113 + def else_clause; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#4114 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4185 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#4111 + def prism_node; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4112 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4109 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4107 + def tag_opening; end + + # : Herb::Location? + # + # source://herb//lib/herb/ast/nodes.rb#4110 + def then_keyword; end + + # : () -> serialized_erb_unless_node + # + # source://herb//lib/herb/ast/nodes.rb#4156 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4190 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?then_keyword: Herb::Location?, ?prism_node: String?, ?statements: Array[Herb::AST::Node], ?else_clause: Herb::AST::ERBElseNode?, ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBUnlessNode + # + # source://herb//lib/herb/ast/nodes.rb#4135 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), then_keyword: T.unsafe(nil), prism_node: T.unsafe(nil), statements: T.unsafe(nil), else_clause: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4130 + def type; end + end +end + +# : type serialized_erb_until_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | prism_node: String?, +# | statements: Array[Herb::AST::Node], +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3458 +class Herb::AST::ERBUntilNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, String?, Array[Herb::AST::Node], Herb::AST::ERBEndNode?) -> void + # + # @return [ERBUntilNode] a new instance of ERBUntilNode + # + # source://herb//lib/herb/ast/nodes.rb#3469 + def initialize(type, location, errors, tag_opening, content, tag_closing, prism_node, statements, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3518 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3523 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3528 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3462 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#3490 + def deserialized_prism_node; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#3466 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3533 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#3464 + def prism_node; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3465 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3463 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3461 + def tag_opening; end + + # : () -> serialized_erb_until_node + # + # source://herb//lib/herb/ast/nodes.rb#3506 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3538 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?prism_node: String?, ?statements: Array[Herb::AST::Node], ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBUntilNode + # + # source://herb//lib/herb/ast/nodes.rb#3485 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), prism_node: T.unsafe(nil), statements: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3480 + def type; end + end +end + +# : type serialized_erb_when_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | then_keyword: Herb::Location?, +# | statements: Array[Herb::AST::Node], +# | } +# +# source://herb//lib/herb/ast/nodes.rb#2915 +class Herb::AST::ERBWhenNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Location?, Array[Herb::AST::Node]) -> void + # + # @return [ERBWhenNode] a new instance of ERBWhenNode + # + # source://herb//lib/herb/ast/nodes.rb#2925 + def initialize(type, location, errors, tag_opening, content, tag_closing, then_keyword, statements); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2956 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2961 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2966 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2919 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2971 + def inspect; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2922 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2920 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#2918 + def tag_opening; end + + # : Herb::Location? + # + # source://herb//lib/herb/ast/nodes.rb#2921 + def then_keyword; end + + # : () -> serialized_erb_when_node + # + # source://herb//lib/herb/ast/nodes.rb#2945 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2976 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?then_keyword: Herb::Location?, ?statements: Array[Herb::AST::Node], ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBWhenNode + # + # source://herb//lib/herb/ast/nodes.rb#2940 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), then_keyword: T.unsafe(nil), statements: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2935 + def type; end + end +end + +# : type serialized_erb_while_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | prism_node: String?, +# | statements: Array[Herb::AST::Node], +# | end_node: Herb::AST::ERBEndNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#3324 +class Herb::AST::ERBWhileNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, String?, Array[Herb::AST::Node], Herb::AST::ERBEndNode?) -> void + # + # @return [ERBWhileNode] a new instance of ERBWhileNode + # + # source://herb//lib/herb/ast/nodes.rb#3335 + def initialize(type, location, errors, tag_opening, content, tag_closing, prism_node, statements, end_node); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#3384 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#3389 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3394 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3328 + def content; end + + # : () -> Prism::node? + # + # source://herb//lib/herb/ast/nodes.rb#3356 + def deserialized_prism_node; end + + # : Herb::AST::ERBEndNode? + # + # source://herb//lib/herb/ast/nodes.rb#3332 + def end_node; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3399 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#3330 + def prism_node; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#3331 + def statements; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3329 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#3327 + def tag_opening; end + + # : () -> serialized_erb_while_node + # + # source://herb//lib/herb/ast/nodes.rb#3372 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#3404 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?prism_node: String?, ?statements: Array[Herb::AST::Node], ?end_node: Herb::AST::ERBEndNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBWhileNode + # + # source://herb//lib/herb/ast/nodes.rb#3351 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), prism_node: T.unsafe(nil), statements: T.unsafe(nil), end_node: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#3346 + def type; end + end +end + +# : type serialized_erb_yield_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4968 +class Herb::AST::ERBYieldNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?) -> void + # + # @return [ERBYieldNode] a new instance of ERBYieldNode + # + # source://herb//lib/herb/ast/nodes.rb#4976 + def initialize(type, location, errors, tag_opening, content, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#5003 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#5008 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5013 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4972 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5018 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4973 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4971 + def tag_opening; end + + # : () -> serialized_erb_yield_node + # + # source://herb//lib/herb/ast/nodes.rb#4994 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#5023 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> ERBYieldNode + # + # source://herb//lib/herb/ast/nodes.rb#4989 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4984 + def type; end + end +end + +# : type serialized_html_attribute_name_node = { +# | children: Array[(Herb::AST::LiteralNode | Herb::AST::ERBContentNode | Herb::AST::ERBCommentNode)]?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1004 +class Herb::AST::HTMLAttributeNameNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Array[(Herb::AST::LiteralNode | Herb::AST::ERBContentNode | Herb::AST::ERBCommentNode)]?) -> void + # + # @return [HTMLAttributeNameNode] a new instance of HTMLAttributeNameNode + # + # source://herb//lib/herb/ast/nodes.rb#1010 + def initialize(type, location, errors, children); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1033 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1038 + def child_nodes; end + + # : Array[(Herb::AST::LiteralNode | Herb::AST::ERBContentNode | Herb::AST::ERBCommentNode)]? + # + # source://herb//lib/herb/ast/nodes.rb#1007 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1043 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1048 + def inspect; end + + # : () -> serialized_html_attribute_name_node + # + # source://herb//lib/herb/ast/nodes.rb#1026 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1053 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?children: Array[(Herb::AST::LiteralNode | Herb::AST::ERBContentNode | Herb::AST::ERBCommentNode)]?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLAttributeNameNode + # + # source://herb//lib/herb/ast/nodes.rb#1021 + def build(children: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1016 + def type; end + end +end + +# : type serialized_html_attribute_node = { +# | name: Herb::AST::HTMLAttributeNameNode?, +# | equals: Herb::Token?, +# | value: Herb::AST::HTMLAttributeValueNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1082 +class Herb::AST::HTMLAttributeNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::AST::HTMLAttributeNameNode?, Herb::Token?, Herb::AST::HTMLAttributeValueNode?) -> void + # + # @return [HTMLAttributeNode] a new instance of HTMLAttributeNode + # + # source://herb//lib/herb/ast/nodes.rb#1090 + def initialize(type, location, errors, name, equals, value); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1117 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1122 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1127 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1086 + def equals; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1132 + def inspect; end + + # : Herb::AST::HTMLAttributeNameNode? + # + # source://herb//lib/herb/ast/nodes.rb#1085 + def name; end + + # : () -> serialized_html_attribute_node + # + # source://herb//lib/herb/ast/nodes.rb#1108 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1137 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : Herb::AST::HTMLAttributeValueNode? + # + # source://herb//lib/herb/ast/nodes.rb#1087 + def value; end + + class << self + # : (?name: Herb::AST::HTMLAttributeNameNode?, ?equals: Herb::Token?, ?value: Herb::AST::HTMLAttributeValueNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLAttributeNode + # + # source://herb//lib/herb/ast/nodes.rb#1103 + def build(name: T.unsafe(nil), equals: T.unsafe(nil), value: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1098 + def type; end + end +end + +# : type serialized_html_attribute_value_node = { +# | open_quote: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | close_quote: Herb::Token?, +# | quoted: bool, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#910 +class Herb::AST::HTMLAttributeValueNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Array[Herb::AST::Node], Herb::Token?, bool) -> void + # + # @return [HTMLAttributeValueNode] a new instance of HTMLAttributeValueNode + # + # source://herb//lib/herb/ast/nodes.rb#919 + def initialize(type, location, errors, open_quote, children, close_quote, quoted); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#948 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#953 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#914 + def children; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#915 + def close_quote; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#958 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#963 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#913 + def open_quote; end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#916 + def quoted; end + + # : () -> serialized_html_attribute_value_node + # + # source://herb//lib/herb/ast/nodes.rb#938 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#968 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?open_quote: Herb::Token?, ?children: Array[Herb::AST::Node], ?close_quote: Herb::Token?, ?quoted: bool, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLAttributeValueNode + # + # source://herb//lib/herb/ast/nodes.rb#933 + def build(open_quote: T.unsafe(nil), children: T.unsafe(nil), close_quote: T.unsafe(nil), quoted: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#928 + def type; end + end +end + +# : type serialized_html_close_tag_node = { +# | tag_opening: Herb::Token?, +# | tag_name: Herb::Token?, +# | children: Array[Herb::AST::WhitespaceNode]?, +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#399 +class Herb::AST::HTMLCloseTagNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Array[Herb::AST::WhitespaceNode]?, Herb::Token?) -> void + # + # @return [HTMLCloseTagNode] a new instance of HTMLCloseTagNode + # + # source://herb//lib/herb/ast/nodes.rb#408 + def initialize(type, location, errors, tag_opening, tag_name, children, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#437 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#442 + def child_nodes; end + + # : Array[Herb::AST::WhitespaceNode]? + # + # source://herb//lib/herb/ast/nodes.rb#404 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#447 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#452 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#405 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#403 + def tag_name; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#402 + def tag_opening; end + + # : () -> serialized_html_close_tag_node + # + # source://herb//lib/herb/ast/nodes.rb#427 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#457 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?tag_name: Herb::Token?, ?children: Array[Herb::AST::WhitespaceNode]?, ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLCloseTagNode + # + # source://herb//lib/herb/ast/nodes.rb#422 + def build(tag_opening: T.unsafe(nil), tag_name: T.unsafe(nil), children: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#417 + def type; end + end +end + +# : type serialized_html_comment_node = { +# | comment_start: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | comment_end: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1517 +class Herb::AST::HTMLCommentNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Array[Herb::AST::Node], Herb::Token?) -> void + # + # @return [HTMLCommentNode] a new instance of HTMLCommentNode + # + # source://herb//lib/herb/ast/nodes.rb#1525 + def initialize(type, location, errors, comment_start, children, comment_end); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1552 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1557 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1521 + def children; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1522 + def comment_end; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1520 + def comment_start; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1562 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1567 + def inspect; end + + # : () -> serialized_html_comment_node + # + # source://herb//lib/herb/ast/nodes.rb#1543 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1572 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?comment_start: Herb::Token?, ?children: Array[Herb::AST::Node], ?comment_end: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLCommentNode + # + # source://herb//lib/herb/ast/nodes.rb#1538 + def build(comment_start: T.unsafe(nil), children: T.unsafe(nil), comment_end: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1533 + def type; end + end +end + +# : type serialized_html_conditional_element_node = { +# | condition: String?, +# | open_conditional: (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, +# | open_tag: Herb::AST::HTMLOpenTagNode?, +# | body: Array[Herb::AST::Node], +# | close_tag: (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode)?, +# | close_conditional: (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, +# | tag_name: Herb::Token?, +# | element_source: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#773 +class Herb::AST::HTMLConditionalElementNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], String?, (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, Herb::AST::HTMLOpenTagNode?, Array[Herb::AST::Node], (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode)?, (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, Herb::Token?, String?) -> void + # + # @return [HTMLConditionalElementNode] a new instance of HTMLConditionalElementNode + # + # source://herb//lib/herb/ast/nodes.rb#786 + def initialize(type, location, errors, condition, open_conditional, open_tag, body, close_tag, close_conditional, tag_name, element_source); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#823 + def accept(visitor); end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#779 + def body; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#828 + def child_nodes; end + + # : (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)? + # + # source://herb//lib/herb/ast/nodes.rb#781 + def close_conditional; end + + # : (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode)? + # + # source://herb//lib/herb/ast/nodes.rb#780 + def close_tag; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#833 + def compact_child_nodes; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#776 + def condition; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#783 + def element_source; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#838 + def inspect; end + + # : (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)? + # + # source://herb//lib/herb/ast/nodes.rb#777 + def open_conditional; end + + # : Herb::AST::HTMLOpenTagNode? + # + # source://herb//lib/herb/ast/nodes.rb#778 + def open_tag; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#782 + def tag_name; end + + # : () -> serialized_html_conditional_element_node + # + # source://herb//lib/herb/ast/nodes.rb#809 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#843 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?condition: String?, ?open_conditional: (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, ?open_tag: Herb::AST::HTMLOpenTagNode?, ?body: Array[Herb::AST::Node], ?close_tag: (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode)?, ?close_conditional: (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, ?tag_name: Herb::Token?, ?element_source: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLConditionalElementNode + # + # source://herb//lib/herb/ast/nodes.rb#804 + def build(condition: T.unsafe(nil), open_conditional: T.unsafe(nil), open_tag: T.unsafe(nil), body: T.unsafe(nil), close_tag: T.unsafe(nil), close_conditional: T.unsafe(nil), tag_name: T.unsafe(nil), element_source: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#799 + def type; end + end +end + +# : type serialized_html_conditional_open_tag_node = { +# | conditional: (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, +# | tag_name: Herb::Token?, +# | is_void: bool, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#302 +class Herb::AST::HTMLConditionalOpenTagNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, Herb::Token?, bool) -> void + # + # @return [HTMLConditionalOpenTagNode] a new instance of HTMLConditionalOpenTagNode + # + # source://herb//lib/herb/ast/nodes.rb#310 + def initialize(type, location, errors, conditional, tag_name, is_void); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#337 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#342 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#347 + def compact_child_nodes; end + + # : (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)? + # + # source://herb//lib/herb/ast/nodes.rb#305 + def conditional; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#352 + def inspect; end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#307 + def is_void; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#306 + def tag_name; end + + # : () -> serialized_html_conditional_open_tag_node + # + # source://herb//lib/herb/ast/nodes.rb#328 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#357 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?conditional: (Herb::AST::ERBIfNode | Herb::AST::ERBUnlessNode)?, ?tag_name: Herb::Token?, ?is_void: bool, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLConditionalOpenTagNode + # + # source://herb//lib/herb/ast/nodes.rb#323 + def build(conditional: T.unsafe(nil), tag_name: T.unsafe(nil), is_void: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#318 + def type; end + end +end + +# : type serialized_html_doctype_node = { +# | tag_opening: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1607 +class Herb::AST::HTMLDoctypeNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Array[Herb::AST::Node], Herb::Token?) -> void + # + # @return [HTMLDoctypeNode] a new instance of HTMLDoctypeNode + # + # source://herb//lib/herb/ast/nodes.rb#1615 + def initialize(type, location, errors, tag_opening, children, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1642 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1647 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1611 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1652 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1657 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1612 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1610 + def tag_opening; end + + # : () -> serialized_html_doctype_node + # + # source://herb//lib/herb/ast/nodes.rb#1633 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1662 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?children: Array[Herb::AST::Node], ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLDoctypeNode + # + # source://herb//lib/herb/ast/nodes.rb#1628 + def build(tag_opening: T.unsafe(nil), children: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1623 + def type; end + end +end + +# : type serialized_html_element_node = { +# | open_tag: (Herb::AST::HTMLOpenTagNode | Herb::AST::HTMLConditionalOpenTagNode | Herb::AST::ERBOpenTagNode)?, +# | tag_name: Herb::Token?, +# | body: Array[Herb::AST::Node], +# | close_tag: (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode | Herb::AST::HTMLVirtualCloseTagNode | Herb::AST::ERBEndNode)?, +# | is_void: bool, +# | element_source: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#652 +class Herb::AST::HTMLElementNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], (Herb::AST::HTMLOpenTagNode | Herb::AST::HTMLConditionalOpenTagNode | Herb::AST::ERBOpenTagNode)?, Herb::Token?, Array[Herb::AST::Node], (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode | Herb::AST::HTMLVirtualCloseTagNode | Herb::AST::ERBEndNode)?, bool, String?) -> void + # + # @return [HTMLElementNode] a new instance of HTMLElementNode + # + # source://herb//lib/herb/ast/nodes.rb#663 + def initialize(type, location, errors, open_tag, tag_name, body, close_tag, is_void, element_source); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#696 + def accept(visitor); end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#657 + def body; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#701 + def child_nodes; end + + # : (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode | Herb::AST::HTMLVirtualCloseTagNode | Herb::AST::ERBEndNode)? + # + # source://herb//lib/herb/ast/nodes.rb#658 + def close_tag; end + + # : (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode | Herb::AST::HTMLVirtualCloseTagNode | Herb::AST::ERBEndNode)? + # + # source://herb//lib/herb/ast/nodes.rb#658 + def close_tag=(_arg0); end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#706 + def compact_child_nodes; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#660 + def element_source; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#711 + def inspect; end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#659 + def is_void; end + + # : (Herb::AST::HTMLOpenTagNode | Herb::AST::HTMLConditionalOpenTagNode | Herb::AST::ERBOpenTagNode)? + # + # source://herb//lib/herb/ast/nodes.rb#655 + def open_tag; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#656 + def tag_name; end + + # : () -> serialized_html_element_node + # + # source://herb//lib/herb/ast/nodes.rb#684 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#716 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?open_tag: (Herb::AST::HTMLOpenTagNode | Herb::AST::HTMLConditionalOpenTagNode | Herb::AST::ERBOpenTagNode)?, ?tag_name: Herb::Token?, ?body: Array[Herb::AST::Node], ?close_tag: (Herb::AST::HTMLCloseTagNode | Herb::AST::HTMLOmittedCloseTagNode | Herb::AST::HTMLVirtualCloseTagNode | Herb::AST::ERBEndNode)?, ?is_void: bool, ?element_source: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLElementNode + # + # source://herb//lib/herb/ast/nodes.rb#679 + def build(open_tag: T.unsafe(nil), tag_name: T.unsafe(nil), body: T.unsafe(nil), close_tag: T.unsafe(nil), is_void: T.unsafe(nil), element_source: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#674 + def type; end + end +end + +# : type serialized_html_omitted_close_tag_node = { +# | tag_name: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#493 +class Herb::AST::HTMLOmittedCloseTagNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?) -> void + # + # @return [HTMLOmittedCloseTagNode] a new instance of HTMLOmittedCloseTagNode + # + # source://herb//lib/herb/ast/nodes.rb#499 + def initialize(type, location, errors, tag_name); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#522 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#527 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#532 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#537 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#496 + def tag_name; end + + # : () -> serialized_html_omitted_close_tag_node + # + # source://herb//lib/herb/ast/nodes.rb#515 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#542 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_name: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLOmittedCloseTagNode + # + # source://herb//lib/herb/ast/nodes.rb#510 + def build(tag_name: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#505 + def type; end + end +end + +# : type serialized_html_open_tag_node = { +# | tag_opening: Herb::Token?, +# | tag_name: Herb::Token?, +# | tag_closing: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | is_void: bool, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#200 +class Herb::AST::HTMLOpenTagNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::Node], bool) -> void + # + # @return [HTMLOpenTagNode] a new instance of HTMLOpenTagNode + # + # source://herb//lib/herb/ast/nodes.rb#210 + def initialize(type, location, errors, tag_opening, tag_name, tag_closing, children, is_void); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#241 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#246 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#206 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#251 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#256 + def inspect; end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#207 + def is_void; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#205 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#204 + def tag_name; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#203 + def tag_opening; end + + # : () -> serialized_html_open_tag_node + # + # source://herb//lib/herb/ast/nodes.rb#230 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#261 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?tag_name: Herb::Token?, ?tag_closing: Herb::Token?, ?children: Array[Herb::AST::Node], ?is_void: bool, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLOpenTagNode + # + # source://herb//lib/herb/ast/nodes.rb#225 + def build(tag_opening: T.unsafe(nil), tag_name: T.unsafe(nil), tag_closing: T.unsafe(nil), children: T.unsafe(nil), is_void: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#220 + def type; end + end +end + +# : type serialized_html_text_node = { +# | content: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1440 +class Herb::AST::HTMLTextNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], String?) -> void + # + # @return [HTMLTextNode] a new instance of HTMLTextNode + # + # source://herb//lib/herb/ast/nodes.rb#1446 + def initialize(type, location, errors, content); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1469 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1474 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1479 + def compact_child_nodes; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#1443 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1484 + def inspect; end + + # : () -> serialized_html_text_node + # + # source://herb//lib/herb/ast/nodes.rb#1462 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1489 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?content: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLTextNode + # + # source://herb//lib/herb/ast/nodes.rb#1457 + def build(content: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1452 + def type; end + end +end + +# : type serialized_html_virtual_close_tag_node = { +# | tag_name: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#570 +class Herb::AST::HTMLVirtualCloseTagNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?) -> void + # + # @return [HTMLVirtualCloseTagNode] a new instance of HTMLVirtualCloseTagNode + # + # source://herb//lib/herb/ast/nodes.rb#576 + def initialize(type, location, errors, tag_name); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#599 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#604 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#609 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#614 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#573 + def tag_name; end + + # : () -> serialized_html_virtual_close_tag_node + # + # source://herb//lib/herb/ast/nodes.rb#592 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#619 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_name: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HTMLVirtualCloseTagNode + # + # source://herb//lib/herb/ast/nodes.rb#587 + def build(tag_name: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#582 + def type; end + end +end + +# source://herb//lib/herb/ast/helpers.rb#6 +module Herb::AST::Helpers + # : (Herb::AST::Node?) -> Array[untyped] + # + # source://herb//lib/herb/ast/helpers.rb#100 + def branch_open_tags(node); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#39 + def erb_comment?(opening); end + + # : (Herb::AST::Node?) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#44 + def erb_comment_node?(node); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#52 + def erb_custom_opening?(opening); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#62 + def erb_escaped?(opening); end + + # : (Herb::AST::Node?) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#8 + def erb_node?(node); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#57 + def erb_omitted?(opening); end + + # : (Herb::AST::Node?) -> String + # + # source://herb//lib/herb/ast/helpers.rb#13 + def erb_opening(node); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#67 + def erb_output?(opening); end + + # : (Herb::AST::Node?) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#23 + def erb_outputs?(node); end + + # : (Herb::AST::Node?) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#30 + def erb_statement?(node); end + + # : (Herb::AST::ERBContentNode) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#109 + def inline_ruby_comment?(node); end + + # : (Herb::AST::Node?) -> Herb::AST::HTMLOmittedCloseTagNode? + # + # source://herb//lib/herb/ast/helpers.rb#72 + def omitted_close_tag(node); end + + # : (Herb::AST::Node?) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/helpers.rb#83 + def omitted_close_tag?(node); end + + # : (Herb::AST::Node?) -> Array[untyped] + # + # source://herb//lib/herb/ast/helpers.rb#88 + def open_tags_for(open_tag); end +end + +# : type serialized_herb_directive_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | key: Herb::Token?, +# | arguments: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#5165 +class Herb::AST::HerbDirectiveNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?) -> void + # + # @return [HerbDirectiveNode] a new instance of HerbDirectiveNode + # + # source://herb//lib/herb/ast/nodes.rb#5175 + def initialize(type, location, errors, tag_opening, content, tag_closing, key, arguments); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#5206 + def accept(visitor); end + + # : () -> String + # + # source://herb//lib/herb/ast/herb_directive_node.rb#13 + def argument; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5172 + def arguments; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#5211 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5216 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5169 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/herb_directive_node.rb#8 + def directive; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5221 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5171 + def key; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5170 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5168 + def tag_opening; end + + # : () -> serialized_herb_directive_node + # + # source://herb//lib/herb/ast/nodes.rb#5195 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#5226 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?key: Herb::Token?, ?arguments: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HerbDirectiveNode + # + # source://herb//lib/herb/ast/nodes.rb#5190 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), key: T.unsafe(nil), arguments: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5185 + def type; end + end +end + +# : type serialized_herb_state_declaration_node = { +# | name: Herb::Token?, +# | default_value: Herb::AST::RubyLiteralNode?, +# | kind: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#5268 +class Herb::AST::HerbStateDeclarationNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::AST::RubyLiteralNode?, String?) -> void + # + # @return [HerbStateDeclarationNode] a new instance of HerbStateDeclarationNode + # + # source://herb//lib/herb/ast/nodes.rb#5276 + def initialize(type, location, errors, name, default_value, kind); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#5303 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#5308 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5313 + def compact_child_nodes; end + + # : Herb::AST::RubyLiteralNode? + # + # source://herb//lib/herb/ast/nodes.rb#5272 + def default_value; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5318 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#5273 + def kind; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5271 + def name; end + + # : () -> serialized_herb_state_declaration_node + # + # source://herb//lib/herb/ast/nodes.rb#5294 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#5323 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?name: Herb::Token?, ?default_value: Herb::AST::RubyLiteralNode?, ?kind: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HerbStateDeclarationNode + # + # source://herb//lib/herb/ast/nodes.rb#5289 + def build(name: T.unsafe(nil), default_value: T.unsafe(nil), kind: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5284 + def type; end + end +end + +# : type serialized_herb_state_directive_node = { +# | tag_opening: Herb::Token?, +# | content: Herb::Token?, +# | tag_closing: Herb::Token?, +# | key: Herb::Token?, +# | signature: Herb::Token?, +# | states: Array[Herb::AST::HerbStateDeclarationNode]?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#5365 +class Herb::AST::HerbStateDirectiveNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::HerbStateDeclarationNode]?) -> void + # + # @return [HerbStateDirectiveNode] a new instance of HerbStateDirectiveNode + # + # source://herb//lib/herb/ast/nodes.rb#5376 + def initialize(type, location, errors, tag_opening, content, tag_closing, key, signature, states); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#5409 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#5414 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#5419 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5369 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5424 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5371 + def key; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5372 + def signature; end + + # : Array[Herb::AST::HerbStateDeclarationNode]? + # + # source://herb//lib/herb/ast/nodes.rb#5373 + def states; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5370 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#5368 + def tag_opening; end + + # : () -> serialized_herb_state_directive_node + # + # source://herb//lib/herb/ast/nodes.rb#5397 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#5429 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?content: Herb::Token?, ?tag_closing: Herb::Token?, ?key: Herb::Token?, ?signature: Herb::Token?, ?states: Array[Herb::AST::HerbStateDeclarationNode]?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> HerbStateDirectiveNode + # + # source://herb//lib/herb/ast/nodes.rb#5392 + def build(tag_opening: T.unsafe(nil), content: T.unsafe(nil), tag_closing: T.unsafe(nil), key: T.unsafe(nil), signature: T.unsafe(nil), states: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#5387 + def type; end + end +end + +# : type serialized_literal_node = { +# | content: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#121 +class Herb::AST::LiteralNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], String?) -> void + # + # @return [LiteralNode] a new instance of LiteralNode + # + # source://herb//lib/herb/ast/nodes.rb#127 + def initialize(type, location, errors, content); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#150 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#155 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#160 + def compact_child_nodes; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#124 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#165 + def inspect; end + + # : () -> serialized_literal_node + # + # source://herb//lib/herb/ast/nodes.rb#143 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#170 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?content: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> LiteralNode + # + # source://herb//lib/herb/ast/nodes.rb#138 + def build(content: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#133 + def type; end + end +end + +# source://herb//lib/herb/ast/node.rb#13 +class Herb::AST::Node + # : (String, Location, ?Array[Herb::Errors::Error]) -> void + # + # @return [Node] a new instance of Node + # + # source://herb//lib/herb/ast/node.rb#20 + def initialize(type, location, errors = T.unsafe(nil)); end + + # : (Visitor) -> void + # + # @raise [NoMethodError] + # + # source://herb//lib/herb/ast/node.rb#104 + def accept(_visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # @raise [NoMethodError] + # + # source://herb//lib/herb/ast/node.rb#109 + def child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/node.rb#43 + def class_name; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/node.rb#116 + def compact_child_nodes; end + + # : () -> Array[Herb::AST::Node?] + # + # @raise [NoMethodError] + # + # source://herb//lib/herb/ast/node.rb#109 + def deconstruct; end + + # : Array[Herb::Errors::Error] + # + # source://herb//lib/herb/ast/node.rb#16 + def errors; end + + # : ( + # | Array[Herb::AST::Node|Herb::Errors::Error], + # | ?item_name: String, + # | ?prefix: String, + # | ?indent: Integer, + # | ?depth: Integer, + # | ?depth_limit: Integer + # | ) -> String + # + # source://herb//lib/herb/ast/node.rb#72 + def inspect_array(array, item_name: T.unsafe(nil), prefix: T.unsafe(nil), indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : (?prefix: String) -> String + # + # source://herb//lib/herb/ast/node.rb#58 + def inspect_errors(prefix: T.unsafe(nil)); end + + # : (Herb::Position) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/ast/node.rb#126 + def locatable?(position); end + + # : (Herb::Position) -> Herb::Locate::Result? + # + # source://herb//lib/herb/ast/node.rb#121 + def locate(position); end + + # : Location + # + # source://herb//lib/herb/ast/node.rb#15 + def location; end + + # : () -> String + # + # source://herb//lib/herb/ast/node.rb#48 + def node_name; end + + # : () -> Array[Herb::Errors::Error] + # + # source://herb//lib/herb/ast/node.rb#131 + def recursive_errors; end + + # : String? + # + # source://herb//lib/herb/ast/node.rb#17 + def source; end + + # : (String?) -> void + # + # source://herb//lib/herb/ast/node.rb#28 + def source=(source); end + + # : () -> serialized_node + # + # source://herb//lib/herb/ast/node.rb#34 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/ast/node.rb#53 + def to_json(state = T.unsafe(nil)); end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # @raise [NotImplementedError] + # + # source://herb//lib/herb/ast/node.rb#99 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : String + # + # source://herb//lib/herb/ast/node.rb#14 + def type; end + + protected + + # : (Array[Herb::Errors::Error] accumulator) -> void + # + # source://herb//lib/herb/ast/node.rb#140 + def collect_errors(accumulator); end +end + +# : type serialized_ruby_html_attributes_splat_node = { +# | content: String?, +# | prefix: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1257 +class Herb::AST::RubyHTMLAttributesSplatNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], String?, String?) -> void + # + # @return [RubyHTMLAttributesSplatNode] a new instance of RubyHTMLAttributesSplatNode + # + # source://herb//lib/herb/ast/nodes.rb#1264 + def initialize(type, location, errors, content, prefix); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1289 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1294 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1299 + def compact_child_nodes; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#1260 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1304 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#1261 + def prefix; end + + # : () -> serialized_ruby_html_attributes_splat_node + # + # source://herb//lib/herb/ast/nodes.rb#1281 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1309 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?content: String?, ?prefix: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> RubyHTMLAttributesSplatNode + # + # source://herb//lib/herb/ast/nodes.rb#1276 + def build(content: T.unsafe(nil), prefix: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1271 + def type; end + end +end + +# : type serialized_ruby_literal_node = { +# | content: String?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1181 +class Herb::AST::RubyLiteralNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], String?) -> void + # + # @return [RubyLiteralNode] a new instance of RubyLiteralNode + # + # source://herb//lib/herb/ast/nodes.rb#1187 + def initialize(type, location, errors, content); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1210 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1215 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1220 + def compact_child_nodes; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#1184 + def content; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1225 + def inspect; end + + # : () -> serialized_ruby_literal_node + # + # source://herb//lib/herb/ast/nodes.rb#1203 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1230 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?content: String?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> RubyLiteralNode + # + # source://herb//lib/herb/ast/nodes.rb#1198 + def build(content: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1193 + def type; end + end +end + +# : type serialized_ruby_parameter_node = { +# | name: Herb::Token?, +# | default_value: Herb::AST::RubyLiteralNode?, +# | kind: String?, +# | required: bool, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4742 +class Herb::AST::RubyParameterNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::AST::RubyLiteralNode?, String?, bool) -> void + # + # @return [RubyParameterNode] a new instance of RubyParameterNode + # + # source://herb//lib/herb/ast/nodes.rb#4751 + def initialize(type, location, errors, name, default_value, kind, required); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4780 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4785 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4790 + def compact_child_nodes; end + + # : Herb::AST::RubyLiteralNode? + # + # source://herb//lib/herb/ast/nodes.rb#4746 + def default_value; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4795 + def inspect; end + + # : String? + # + # source://herb//lib/herb/ast/nodes.rb#4747 + def kind; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4745 + def name; end + + # : bool + # + # source://herb//lib/herb/ast/nodes.rb#4748 + def required; end + + # : () -> serialized_ruby_parameter_node + # + # source://herb//lib/herb/ast/nodes.rb#4770 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4800 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?name: Herb::Token?, ?default_value: Herb::AST::RubyLiteralNode?, ?kind: String?, ?required: bool, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> RubyParameterNode + # + # source://herb//lib/herb/ast/nodes.rb#4765 + def build(name: T.unsafe(nil), default_value: T.unsafe(nil), kind: T.unsafe(nil), required: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4760 + def type; end + end +end + +# : type serialized_ruby_render_keywords_node = { +# | partial: Herb::Token?, +# | template_path: Herb::Token?, +# | layout: Herb::Token?, +# | file: Herb::Token?, +# | inline_template: Herb::Token?, +# | body: Herb::Token?, +# | plain: Herb::Token?, +# | html: Herb::Token?, +# | renderable: Herb::Token?, +# | collection: Herb::Token?, +# | object: Herb::Token?, +# | as_name: Herb::Token?, +# | spacer_template: Herb::Token?, +# | formats: Herb::Token?, +# | variants: Herb::Token?, +# | handlers: Herb::Token?, +# | content_type: Herb::Token?, +# | locals: Array[Herb::AST::RubyRenderLocalNode]?, +# | state: Array[Herb::AST::HerbStateDeclarationNode]?, +# | state_location: Herb::Location?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4358 +class Herb::AST::RubyRenderKeywordsNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Herb::Token?, Array[Herb::AST::RubyRenderLocalNode]?, Array[Herb::AST::HerbStateDeclarationNode]?, Herb::Location?) -> void + # + # @return [RubyRenderKeywordsNode] a new instance of RubyRenderKeywordsNode + # + # source://herb//lib/herb/ast/nodes.rb#4383 + def initialize(type, location, errors, partial, template_path, layout, file, inline_template, body, plain, html, renderable, collection, object, as_name, spacer_template, formats, variants, handlers, content_type, locals, state, state_location); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4444 + def accept(visitor); end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4372 + def as_name; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4366 + def body; end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4449 + def child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4370 + def collection; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4454 + def compact_child_nodes; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4377 + def content_type; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4364 + def file; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4374 + def formats; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4376 + def handlers; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4368 + def html; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4365 + def inline_template; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4459 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4363 + def layout; end + + # : Array[Herb::AST::RubyRenderLocalNode]? + # + # source://herb//lib/herb/ast/nodes.rb#4378 + def locals; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4371 + def object; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4361 + def partial; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4367 + def plain; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4369 + def renderable; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4373 + def spacer_template; end + + # : Array[Herb::AST::HerbStateDeclarationNode]? + # + # source://herb//lib/herb/ast/nodes.rb#4379 + def state; end + + # : Herb::Location? + # + # source://herb//lib/herb/ast/nodes.rb#4380 + def state_location; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4362 + def template_path; end + + # : () -> serialized_ruby_render_keywords_node + # + # source://herb//lib/herb/ast/nodes.rb#4418 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4464 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4375 + def variants; end + + class << self + # : (?partial: Herb::Token?, ?template_path: Herb::Token?, ?layout: Herb::Token?, ?file: Herb::Token?, ?inline_template: Herb::Token?, ?body: Herb::Token?, ?plain: Herb::Token?, ?html: Herb::Token?, ?renderable: Herb::Token?, ?collection: Herb::Token?, ?object: Herb::Token?, ?as_name: Herb::Token?, ?spacer_template: Herb::Token?, ?formats: Herb::Token?, ?variants: Herb::Token?, ?handlers: Herb::Token?, ?content_type: Herb::Token?, ?locals: Array[Herb::AST::RubyRenderLocalNode]?, ?state: Array[Herb::AST::HerbStateDeclarationNode]?, ?state_location: Herb::Location?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> RubyRenderKeywordsNode + # + # source://herb//lib/herb/ast/nodes.rb#4413 + def build(partial: T.unsafe(nil), template_path: T.unsafe(nil), layout: T.unsafe(nil), file: T.unsafe(nil), inline_template: T.unsafe(nil), body: T.unsafe(nil), plain: T.unsafe(nil), html: T.unsafe(nil), renderable: T.unsafe(nil), collection: T.unsafe(nil), object: T.unsafe(nil), as_name: T.unsafe(nil), spacer_template: T.unsafe(nil), formats: T.unsafe(nil), variants: T.unsafe(nil), handlers: T.unsafe(nil), content_type: T.unsafe(nil), locals: T.unsafe(nil), state: T.unsafe(nil), state_location: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4408 + def type; end + end +end + +# : type serialized_ruby_render_local_node = { +# | name: Herb::Token?, +# | value: Herb::AST::RubyLiteralNode?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#4251 +class Herb::AST::RubyRenderLocalNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::AST::RubyLiteralNode?) -> void + # + # @return [RubyRenderLocalNode] a new instance of RubyRenderLocalNode + # + # source://herb//lib/herb/ast/nodes.rb#4258 + def initialize(type, location, errors, name, value); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#4283 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#4288 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#4293 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4298 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#4254 + def name; end + + # : () -> serialized_ruby_render_local_node + # + # source://herb//lib/herb/ast/nodes.rb#4275 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#4303 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : Herb::AST::RubyLiteralNode? + # + # source://herb//lib/herb/ast/nodes.rb#4255 + def value; end + + class << self + # : (?name: Herb::Token?, ?value: Herb::AST::RubyLiteralNode?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> RubyRenderLocalNode + # + # source://herb//lib/herb/ast/nodes.rb#4270 + def build(name: T.unsafe(nil), value: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#4265 + def type; end + end +end + +# : type serialized_whitespace_node = { +# | value: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1972 +class Herb::AST::WhitespaceNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?) -> void + # + # @return [WhitespaceNode] a new instance of WhitespaceNode + # + # source://herb//lib/herb/ast/nodes.rb#1978 + def initialize(type, location, errors, value); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#2001 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#2006 + def child_nodes; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#2011 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#2016 + def inspect; end + + # : () -> serialized_whitespace_node + # + # source://herb//lib/herb/ast/nodes.rb#1994 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#2021 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1975 + def value; end + + class << self + # : (?value: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> WhitespaceNode + # + # source://herb//lib/herb/ast/nodes.rb#1989 + def build(value: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1984 + def type; end + end +end + +# : type serialized_xml_declaration_node = { +# | tag_opening: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1697 +class Herb::AST::XMLDeclarationNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Array[Herb::AST::Node], Herb::Token?) -> void + # + # @return [XMLDeclarationNode] a new instance of XMLDeclarationNode + # + # source://herb//lib/herb/ast/nodes.rb#1705 + def initialize(type, location, errors, tag_opening, children, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1732 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1737 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1701 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1742 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1747 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1702 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1700 + def tag_opening; end + + # : () -> serialized_xml_declaration_node + # + # source://herb//lib/herb/ast/nodes.rb#1723 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1752 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?children: Array[Herb::AST::Node], ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> XMLDeclarationNode + # + # source://herb//lib/herb/ast/nodes.rb#1718 + def build(tag_opening: T.unsafe(nil), children: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1713 + def type; end + end +end + +# : type serialized_xml_processing_instruction_node = { +# | tag_opening: Herb::Token?, +# | target: Herb::Token?, +# | children: Array[Herb::AST::Node], +# | tag_closing: Herb::Token?, +# | } +# +# source://herb//lib/herb/ast/nodes.rb#1788 +class Herb::AST::XMLProcessingInstructionNode < ::Herb::AST::Node + include ::Herb::Colors + + # : (String, Location, Array[Herb::Errors::Error], Herb::Token?, Herb::Token?, Array[Herb::AST::Node], Herb::Token?) -> void + # + # @return [XMLProcessingInstructionNode] a new instance of XMLProcessingInstructionNode + # + # source://herb//lib/herb/ast/nodes.rb#1797 + def initialize(type, location, errors, tag_opening, target, children, tag_closing); end + + # : (Visitor) -> void + # + # source://herb//lib/herb/ast/nodes.rb#1826 + def accept(visitor); end + + # : () -> Array[Herb::AST::Node?] + # + # source://herb//lib/herb/ast/nodes.rb#1831 + def child_nodes; end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1793 + def children; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/ast/nodes.rb#1836 + def compact_child_nodes; end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1841 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1794 + def tag_closing; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1791 + def tag_opening; end + + # : Herb::Token? + # + # source://herb//lib/herb/ast/nodes.rb#1792 + def target; end + + # : () -> serialized_xml_processing_instruction_node + # + # source://herb//lib/herb/ast/nodes.rb#1816 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/ast/nodes.rb#1846 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + class << self + # : (?tag_opening: Herb::Token?, ?target: Herb::Token?, ?children: Array[Herb::AST::Node], ?tag_closing: Herb::Token?, ?location: Location, ?errors: Array[Herb::Errors::Error]) -> XMLProcessingInstructionNode + # + # source://herb//lib/herb/ast/nodes.rb#1811 + def build(tag_opening: T.unsafe(nil), target: T.unsafe(nil), children: T.unsafe(nil), tag_closing: T.unsafe(nil), location: T.unsafe(nil), errors: T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/ast/nodes.rb#1806 + def type; end + end +end + +# source://herb//lib/herb/analysis/partial_resolution.rb#6 +module Herb::Analysis; end + +# source://herb//lib/herb/analysis/partial_resolution.rb#7 +module Herb::Analysis::PartialResolution + class << self + # : (Array[String]) -> Array[String] + # + # source://herb//lib/herb/analysis/partial_resolution.rb#83 + def by_precedence(files); end + + # : (String, String | Pathname) -> Array[String] + # + # source://herb//lib/herb/analysis/partial_resolution.rb#104 + def layout_candidates_for(template_file, view_root); end + + # : (String, String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/analysis/partial_resolution.rb#73 + def outranks_template?(candidate, incumbent); end + + # : (String, String | Pathname) -> String? + # + # source://herb//lib/herb/analysis/partial_resolution.rb#130 + def partial_name_for(file, view_root); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/analysis/partial_resolution.rb#52 + def partial_path?(file); end + + # : (String, String | Pathname) -> String? + # + # source://herb//lib/herb/analysis/partial_resolution.rb#88 + def template_name_for(file, view_root); end + + # : (String) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/analysis/partial_resolution.rb#45 + def template_path?(file); end + + # : (String) -> Integer + # + # source://herb//lib/herb/analysis/partial_resolution.rb#61 + def template_rank(file); end + + # : (String | Pathname) -> Pathname + # + # source://herb//lib/herb/analysis/partial_resolution.rb#33 + def view_root_for(project_path); end + + private + + # : (String, String | Pathname) -> String? + # + # source://herb//lib/herb/analysis/partial_resolution.rb#148 + def relative_to_view_root(file, view_root); end + end +end + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#27 +Herb::Analysis::PartialResolution::APPLICATION_LAYOUT = T.let(T.unsafe(nil), String) + +# source://herb//lib/herb/analysis/partial_resolution.rb#10 +Herb::Analysis::PartialResolution::EXTENSIONS = T.let(T.unsafe(nil), Array) + +# : Array[String] +# +# source://herb//lib/herb/analysis/partial_resolution.rb#19 +Herb::Analysis::PartialResolution::EXTENSION_ALTERNATIVES = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#26 +Herb::Analysis::PartialResolution::LAYOUTS_DIRECTORY = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#28 +Herb::Analysis::PartialResolution::MAILER_LAYOUT = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#29 +Herb::Analysis::PartialResolution::MAILER_SUFFIX = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#22 +Herb::Analysis::PartialResolution::PARTIAL_GLOB_PATTERN = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#8 +Herb::Analysis::PartialResolution::PARTIAL_PREFIX = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#21 +Herb::Analysis::PartialResolution::TEMPLATE_GLOB_PATTERN = T.let(T.unsafe(nil), String) + +# : String +# +# source://herb//lib/herb/analysis/partial_resolution.rb#24 +Herb::Analysis::PartialResolution::VIEW_ROOT = T.let(T.unsafe(nil), String) + +# Finds the file a render call names, and what the compile of that file calls itself. +# +# The engine resolves partials at compile time in more than one place, the render +# validator and the inliner among them, and each used to walk the filesystem on its own +# from the project's view root. This is the one object they ask instead, and the one an +# application can replace through `Herb::Engine.new(source, resolver: ...)` with a lookup +# that knows its real view paths, an engine's or a gem's, and how it names its templates. +# +# The default answers from the filesystem the way the engine always has. A name with a +# directory is looked up under the view root, a bare name next to the calling template +# and then under the view root, and the identifier is the path relative to the project, +# which is what the compile of that template reports as its own relative file path. +# +# source://herb//lib/herb/analysis/partial_resolver.rb#24 +class Herb::Analysis::PartialResolver + # : (?(String | Pathname)?, ?view_root: (String | Pathname | false)?) -> void + # + # @return [PartialResolver] a new instance of PartialResolver + # + # source://herb//lib/herb/analysis/partial_resolver.rb#36 + def initialize(project_path = T.unsafe(nil), view_root: T.unsafe(nil)); end + + # : (String, Pathname?) -> Array[Pathname] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#74 + def candidate_paths(name, source_directory); end + + # : (String, ?from: (String | Pathname)?) -> Array[Pathname] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#57 + def candidates(name, from: T.unsafe(nil)); end + + # : (Pathname) -> String + # + # source://herb//lib/herb/analysis/partial_resolver.rb#67 + def identifier_for(path); end + + # : (String, Pathname?) -> Array[String] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#92 + def non_partial_matches(name, source_directory); end + + # : Pathname + # + # source://herb//lib/herb/analysis/partial_resolver.rb#32 + def project_path; end + + # : (String, ?from: (String | Pathname)?, ?format: String?) -> Resolved? + # + # source://herb//lib/herb/analysis/partial_resolver.rb#46 + def resolve(name, from: T.unsafe(nil), format: T.unsafe(nil)); end + + # : (String, ?from: (String | Pathname)?, ?limit: Integer) -> Array[String] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#62 + def similar(name, from: T.unsafe(nil), limit: T.unsafe(nil)); end + + # : (String, Pathname?, ?limit: Integer) -> Array[String] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#84 + def similar_partials(name, source_directory, limit: T.unsafe(nil)); end + + # : Pathname? + # + # source://herb//lib/herb/analysis/partial_resolver.rb#33 + def view_root; end + + private + + # : (String, Pathname?) -> Array[Pathname] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#106 + def lookup_directories(name, source_directory); end + + # : (Pathname?) -> Array[String] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#115 + def partial_names(source_directory); end + + # : (Array[Pathname], String) -> Array[Pathname] + # + # source://herb//lib/herb/analysis/partial_resolver.rb#137 + def prefer_format(paths, format); end + + # : ((String | Pathname)?) -> Pathname? + # + # source://herb//lib/herb/analysis/partial_resolver.rb#127 + def source_directory(from); end +end + +class Herb::Analysis::PartialResolver::Resolved < ::Data + # Returns the value of attribute identifier + # + # @return [Object] the current value of identifier + def identifier; end + + # Returns the value of attribute path + # + # @return [Object] the current value of path + def path; end + + class << self + def [](*_arg0); end + def inspect; end + def members; end + def new(*_arg0); end + end +end + +# : String +# +# source://herb//lib/herb/analysis/partial_resolver.rb#30 +Herb::Analysis::PartialResolver::TEMPLATE_HINT = T.let(T.unsafe(nil), String) + +# What the native extension defines, declared in Ruby so that it can be read without reading C. +# +# Loading the extension reopens this module and defines each method for real, so nothing here +# runs in a working install. What is left when the extension does not load is a set of methods +# that say so, instead of the `NoMethodError` a missing definition would raise: +# +# Herb::Backend.parse(source) +# #=> NotImplementedError: Herb::Backend.parse is defined by the native extension, which did not load +# +# The public API is `Herb.parse` and its neighbours, which are Ruby and live in `lib/herb.rb`. +# This is only the seam they call through. +# +# source://herb//lib/herb/backend.rb#16 +module Herb::Backend + extend ::Herb::Backend::Unavailable + + class << self + def arena_stats(*_arg0); end + def default_erb_openings; end + def diff(*_arg0); end + def extract_html(_arg0); end + def extract_ruby(*_arg0); end + def leak_check(_arg0); end + def lex(*_arg0); end + def parse(*_arg0); end + def version; end + end +end + +# source://herb//lib/herb/backend.rb#17 +module Herb::Backend::Unavailable + # : (**untyped) -> untyped + # + # source://herb//lib/herb/backend.rb#44 + def arena_stats(**_arg0); end + + # : () -> Array[String] + # + # source://herb//lib/herb/backend.rb#54 + def default_erb_openings; end + + # : (String, String, **untyped) -> Herb::Diff::Result + # + # source://herb//lib/herb/backend.rb#39 + def diff(_old_source, _new_source, **_arg2); end + + # : (String) -> String + # + # source://herb//lib/herb/backend.rb#34 + def extract_html(_source); end + + # : (String, **untyped) -> String + # + # source://herb//lib/herb/backend.rb#29 + def extract_ruby(_source, **_arg1); end + + # : (String) -> untyped + # + # source://herb//lib/herb/backend.rb#49 + def leak_check(_source); end + + # : (String, **untyped) -> Herb::LexResult + # + # source://herb//lib/herb/backend.rb#24 + def lex(_source, **_arg1); end + + # : (String, **untyped) -> Herb::ParseResult + # + # source://herb//lib/herb/backend.rb#19 + def parse(_source, **_arg1); end + + # : () -> String + # + # source://herb//lib/herb/backend.rb#59 + def version; end + + private + + # : (Symbol?) -> bot + # + # @raise [NotImplementedError] + # + # source://herb//lib/herb/backend.rb#66 + def unavailable(name); end +end + +# source://herb//lib/herb/colors.rb#7 +module Herb::Colors + private + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#94 + def bold(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#80 + def bright_magenta(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#73 + def cyan(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#87 + def dimmed(string); end + + # : () -> bool + # + # source://herb//lib/herb/colors.rb#25 + def enabled?; end + + # : (String, Integer) -> String + # + # source://herb//lib/herb/colors.rb#101 + def fg(string, color); end + + # : (String, Integer, Integer) -> String + # + # source://herb//lib/herb/colors.rb#108 + def fg_bg(string, foreground, background); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#52 + def green(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#66 + def magenta(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#59 + def red(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#38 + def white(string); end + + # : [T] (bool) { () -> T } -> T + # + # source://herb//lib/herb/colors.rb#15 + def with_color(enabled); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#45 + def yellow(string); end + + class << self + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#94 + def bold(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#80 + def bright_magenta(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#73 + def cyan(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#87 + def dimmed(string); end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/colors.rb#25 + def enabled?; end + + # : (String, Integer) -> String + # + # source://herb//lib/herb/colors.rb#101 + def fg(string, color); end + + # : (String, Integer, Integer) -> String + # + # source://herb//lib/herb/colors.rb#108 + def fg_bg(string, foreground, background); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#52 + def green(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#66 + def magenta(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#59 + def red(string); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#38 + def white(string); end + + # : [T] (bool) { () -> T } -> T + # + # source://herb//lib/herb/colors.rb#15 + def with_color(enabled); end + + # : (String) -> String + # + # source://herb//lib/herb/colors.rb#45 + def yellow(string); end + end +end + +# source://herb//lib/herb/colors.rb#10 +Herb::Colors::CLEAR_SCREEN = T.let(T.unsafe(nil), String) + +# source://herb//lib/herb/colors.rb#8 +Herb::Colors::HIDE_CURSOR = T.let(T.unsafe(nil), String) + +# source://herb//lib/herb/colors.rb#9 +Herb::Colors::SHOW_CURSOR = T.let(T.unsafe(nil), String) + +# source://herb//lib/herb/diagnostic.rb#8 +class Herb::Diagnostic + # : (template: String, message: String, ?severity: Symbol?, ?kind: Symbol, ?origin: String, ?node: String?, ?code: String?, ?location: Herb::Location?, ?suggestion: String?, ?description: String?, ?docs_url: String?, ?value: String?, ?overlay: Symbol?, ?phase: Symbol, ?data: Hash[Symbol, untyped], ?error_class: Class?) -> void + # + # @return [Diagnostic] a new instance of Diagnostic + # + # source://herb//lib/herb/diagnostic.rb#29 + def initialize(template:, message:, severity: T.unsafe(nil), kind: T.unsafe(nil), origin: T.unsafe(nil), node: T.unsafe(nil), code: T.unsafe(nil), location: T.unsafe(nil), suggestion: T.unsafe(nil), description: T.unsafe(nil), docs_url: T.unsafe(nil), value: T.unsafe(nil), overlay: T.unsafe(nil), phase: T.unsafe(nil), data: T.unsafe(nil), error_class: T.unsafe(nil)); end + + # : String? + # + # source://herb//lib/herb/diagnostic.rb#14 + def code; end + + # : Hash[Symbol, untyped] + # + # source://herb//lib/herb/diagnostic.rb#25 + def data; end + + # : String? + # + # source://herb//lib/herb/diagnostic.rb#20 + def description; end + + # : String? + # + # source://herb//lib/herb/diagnostic.rb#21 + def docs_url; end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/diagnostic.rb#72 + def error?; end + + # : Class? + # + # source://herb//lib/herb/diagnostic.rb#26 + def error_class; end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/diagnostic.rb#87 + def hint?; end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/diagnostic.rb#82 + def info?; end + + # : () -> Array[untyped] + # + # source://herb//lib/herb/diagnostic.rb#99 + def key; end + + # : Symbol + # + # source://herb//lib/herb/diagnostic.rb#16 + def kind; end + + # : Herb::Location? + # + # source://herb//lib/herb/diagnostic.rb#18 + def location; end + + # : String + # + # source://herb//lib/herb/diagnostic.rb#12 + def message; end + + # : String? + # + # source://herb//lib/herb/diagnostic.rb#13 + def node; end + + # : String + # + # source://herb//lib/herb/diagnostic.rb#17 + def origin; end + + # : Symbol? + # + # source://herb//lib/herb/diagnostic.rb#23 + def overlay; end + + # : Symbol + # + # source://herb//lib/herb/diagnostic.rb#24 + def phase; end + + # : Symbol? + # + # source://herb//lib/herb/diagnostic.rb#15 + def severity; end + + # : String? + # + # source://herb//lib/herb/diagnostic.rb#19 + def suggestion; end + + # : String + # + # source://herb//lib/herb/diagnostic.rb#11 + def template; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diagnostic.rb#104 + def to_h; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diagnostic.rb#104 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/diagnostic.rb#146 + def to_json(state = T.unsafe(nil)); end + + # : (?String?) -> String + # + # source://herb//lib/herb/diagnostic.rb#126 + def to_ruby(compiled = T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/diagnostic.rb#153 + def to_s; end + + # : String? + # + # source://herb//lib/herb/diagnostic.rb#22 + def value; end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/diagnostic.rb#77 + def warning?; end + + # : (String?) -> Diagnostic + # + # source://herb//lib/herb/diagnostic.rb#92 + def with_node(node); end + + private + + # : (Herb::Location) -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diagnostic.rb#163 + def serialized_location(location); end + + # : (Herb::Position) -> Hash[Symbol, Integer] + # + # source://herb//lib/herb/diagnostic.rb#168 + def serialized_position(position); end + + class << self + # : (String, Hash[Symbol, untyped]) -> Diagnostic + # + # source://herb//lib/herb/diagnostic.rb#54 + def from_compiled(template, entry); end + + # : (Array[Herb::Errors::Error], template: String, ?origin: String) -> Array[Diagnostic] + # + # source://herb//lib/herb/diagnostic.rb#49 + def from_errors(errors, template:, origin: T.unsafe(nil)); end + end +end + +# : String +# +# source://herb//lib/herb/diagnostic.rb#9 +Herb::Diagnostic::UNKNOWN_ORIGIN = T.let(T.unsafe(nil), String) + +# source://herb//lib/herb/diff/operation.rb#5 +module Herb::Diff; end + +# source://herb//lib/herb/diff/operation.rb#15 +class Herb::Diff::Operation < ::Data + # : () -> String + # + # source://herb//lib/herb/diff/operation.rb#31 + def inspect; end + + # Returns the value of attribute new_index + # + # @return [Object] the current value of new_index + def new_index; end + + # Returns the value of attribute new_node + # + # @return [Object] the current value of new_node + def new_node; end + + # Returns the value of attribute old_index + # + # @return [Object] the current value of old_index + def old_index; end + + # Returns the value of attribute old_node + # + # @return [Object] the current value of old_node + def old_node; end + + # Returns the value of attribute path + # + # @return [Object] the current value of path + def path; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diff/operation.rb#17 + def to_h; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diff/operation.rb#17 + def to_hash; end + + # Returns the value of attribute type + # + # @return [Object] the current value of type + def type; end + + class << self + def [](*_arg0); end + def inspect; end + def members; end + def new(*_arg0); end + end +end + +# source://herb//lib/herb/diff/result.rb#6 +class Herb::Diff::Result + include ::Enumerable + + # : (bool, Array[Herb::Diff::Operation]) -> void + # + # @return [Result] a new instance of Result + # + # source://herb//lib/herb/diff/result.rb#12 + def initialize(identical, operations); end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/diff/result.rb#38 + def changed?; end + + # : () { (Herb::Diff::Operation) -> void } -> void + # : () -> Enumerator[Herb::Diff::Operation, void] + # + # source://herb//lib/herb/diff/result.rb#21 + def each(&block); end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/diff/result.rb#28 + def identical?; end + + # : () -> String + # + # source://herb//lib/herb/diff/result.rb#53 + def inspect; end + + # : () -> Integer + # + # source://herb//lib/herb/diff/result.rb#33 + def operation_count; end + + # : Array[Herb::Diff::Operation] + # + # source://herb//lib/herb/diff/result.rb#9 + def operations; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diff/result.rb#43 + def to_h; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/diff/result.rb#43 + def to_hash; end +end + +# : type serialized_error = { +# | type: String, +# | location: serialized_location?, +# | message: String +# | } +# +# source://herb//lib/herb/errors.rb#13 +module Herb::Errors; end + +# source://herb//lib/herb/errors.rb#616 +class Herb::Errors::ConditionalElementConditionMismatchError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, String, Integer, Integer, String, Integer, Integer) -> void + # + # @return [ConditionalElementConditionMismatchError] a new instance of ConditionalElementConditionMismatchError + # + # source://herb//lib/herb/errors.rb#628 + def initialize(type, location, message, tag_name, open_condition, open_line, open_column, close_condition, close_line, close_column); end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#625 + def close_column; end + + # : String? + # + # source://herb//lib/herb/errors.rb#623 + def close_condition; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#624 + def close_line; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#640 + def inspect; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#622 + def open_column; end + + # : String? + # + # source://herb//lib/herb/errors.rb#620 + def open_condition; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#621 + def open_line; end + + # : String? + # + # source://herb//lib/herb/errors.rb#619 + def tag_name; end + + # : () -> serialized_conditional_element_condition_mismatch_error + # + # source://herb//lib/herb/errors.rb#645 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#658 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#576 +class Herb::Errors::ConditionalElementMultipleTagsError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Integer, Integer) -> void + # + # @return [ConditionalElementMultipleTagsError] a new instance of ConditionalElementMultipleTagsError + # + # source://herb//lib/herb/errors.rb#583 + def initialize(type, location, message, line, column); end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#580 + def column; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#590 + def inspect; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#579 + def line; end + + # : () -> serialized_conditional_element_multiple_tags_error + # + # source://herb//lib/herb/errors.rb#595 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#603 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1983 +class Herb::Errors::DotNotationCasingError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [DotNotationCasingError] a new instance of DotNotationCasingError + # + # source://herb//lib/herb/errors.rb#1989 + def initialize(type, location, message, segment); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1995 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1986 + def segment; end + + # : () -> serialized_dot_notation_casing_error + # + # source://herb//lib/herb/errors.rb#2000 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#2007 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#556 +class Herb::Errors::ERBCaseInlinePatternMatchError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#560 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#565 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#536 +class Herb::Errors::ERBCaseWithConditionsError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#540 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#545 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#444 +class Herb::Errors::ERBControlFlowScopeError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [ERBControlFlowScopeError] a new instance of ERBControlFlowScopeError + # + # source://herb//lib/herb/errors.rb#450 + def initialize(type, location, message, keyword); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#456 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#447 + def keyword; end + + # : () -> serialized_erb_control_flow_scope_error + # + # source://herb//lib/herb/errors.rb#461 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#468 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#516 +class Herb::Errors::ERBMultipleBlocksInTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#520 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#525 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#926 +class Herb::Errors::EndTagWithTrailingSolidusError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [EndTagWithTrailingSolidusError] a new instance of EndTagWithTrailingSolidusError + # + # source://herb//lib/herb/errors.rb#932 + def initialize(type, location, message, tag_name); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#943 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#938 + def suggestion; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#929 + def tag_name; end + + # : () -> serialized_end_tag_with_trailing_solidus_error + # + # source://herb//lib/herb/errors.rb#948 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#955 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#14 +class Herb::Errors::Error + # : (String, Location?, String) -> void + # + # @return [Error] a new instance of Error + # + # source://herb//lib/herb/errors.rb#20 + def initialize(type, location, message); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#56 + def class_name; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#61 + def error_name; end + + # : Location? + # + # source://herb//lib/herb/errors.rb#16 + def location; end + + # : String + # + # source://herb//lib/herb/errors.rb#17 + def message; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#27 + def suggestion; end + + # : (template: String, ?origin: String) -> Herb::Diagnostic + # + # source://herb//lib/herb/errors.rb#32 + def to_diagnostic(template:, origin: T.unsafe(nil)); end + + # : () -> serialized_error + # + # source://herb//lib/herb/errors.rb#47 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/errors.rb#66 + def to_json(state = T.unsafe(nil)); end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # @raise [NotImplementedError] + # + # source://herb//lib/herb/errors.rb#71 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end + + # : String + # + # source://herb//lib/herb/errors.rb#15 + def type; end +end + +# source://herb//lib/herb/errors.rb#1917 +class Herb::Errors::HerbStateDuplicateDeclarationError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1921 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1926 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1881 +class Herb::Errors::HerbStateInvalidParameterError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [HerbStateInvalidParameterError] a new instance of HerbStateInvalidParameterError + # + # source://herb//lib/herb/errors.rb#1887 + def initialize(type, location, message, parameter); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1893 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1884 + def parameter; end + + # : () -> serialized_herb_state_invalid_parameter_error + # + # source://herb//lib/herb/errors.rb#1898 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1905 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1805 +class Herb::Errors::HerbStateMissingParenthesisError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [HerbStateMissingParenthesisError] a new instance of HerbStateMissingParenthesisError + # + # source://herb//lib/herb/errors.rb#1811 + def initialize(type, location, message, rest); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1817 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1808 + def rest; end + + # : () -> serialized_herb_state_missing_parenthesis_error + # + # source://herb//lib/herb/errors.rb#1822 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1829 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1841 +class Herb::Errors::HerbStateNonCanonicalDirectiveError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, String) -> void + # + # @return [HerbStateNonCanonicalDirectiveError] a new instance of HerbStateNonCanonicalDirectiveError + # + # source://herb//lib/herb/errors.rb#1848 + def initialize(type, location, message, found, expected); end + + # : String? + # + # source://herb//lib/herb/errors.rb#1845 + def expected; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1844 + def found; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1855 + def inspect; end + + # : () -> serialized_herb_state_non_canonical_directive_error + # + # source://herb//lib/herb/errors.rb#1860 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1868 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#768 +class Herb::Errors::InvalidCommentClosingTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [InvalidCommentClosingTagError] a new instance of InvalidCommentClosingTagError + # + # source://herb//lib/herb/errors.rb#774 + def initialize(type, location, message, closing_tag); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#771 + def closing_tag; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#780 + def inspect; end + + # : () -> serialized_invalid_comment_closing_tag_error + # + # source://herb//lib/herb/errors.rb#785 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#792 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1303 +class Herb::Errors::MalformedERBClosingTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, Herb::Token) -> void + # + # @return [MalformedERBClosingTagError] a new instance of MalformedERBClosingTagError + # + # source://herb//lib/herb/errors.rb#1310 + def initialize(type, location, message, opening_tag, closing_tag); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1307 + def closing_tag; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1317 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1306 + def opening_tag; end + + # : () -> serialized_malformed_erb_closing_tag_error + # + # source://herb//lib/herb/errors.rb#1322 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1330 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1007 +class Herb::Errors::MissingAttributeValueError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [MissingAttributeValueError] a new instance of MissingAttributeValueError + # + # source://herb//lib/herb/errors.rb#1013 + def initialize(type, location, message, attribute_name); end + + # : String? + # + # source://herb//lib/herb/errors.rb#1010 + def attribute_name; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1026 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#1019 + def suggestion; end + + # : () -> serialized_missing_attribute_value_error + # + # source://herb//lib/herb/errors.rb#1031 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1038 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#205 +class Herb::Errors::MissingClosingTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [MissingClosingTagError] a new instance of MissingClosingTagError + # + # source://herb//lib/herb/errors.rb#211 + def initialize(type, location, message, opening_tag); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#222 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#208 + def opening_tag; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#217 + def suggestion; end + + # : () -> serialized_missing_closing_tag_error + # + # source://herb//lib/herb/errors.rb#227 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#234 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#480 +class Herb::Errors::MissingERBEndTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [MissingERBEndTagError] a new instance of MissingERBEndTagError + # + # source://herb//lib/herb/errors.rb#486 + def initialize(type, location, message, keyword); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#492 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#483 + def keyword; end + + # : () -> serialized_missing_erb_end_tag_error + # + # source://herb//lib/herb/errors.rb#497 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#504 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#162 +class Herb::Errors::MissingOpeningTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [MissingOpeningTagError] a new instance of MissingOpeningTagError + # + # source://herb//lib/herb/errors.rb#168 + def initialize(type, location, message, closing_tag); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#165 + def closing_tag; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#179 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#174 + def suggestion; end + + # : () -> serialized_missing_opening_tag_error + # + # source://herb//lib/herb/errors.rb#184 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#191 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1050 +class Herb::Errors::MissingWhitespaceBetweenAttributesError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [MissingWhitespaceBetweenAttributesError] a new instance of MissingWhitespaceBetweenAttributesError + # + # source://herb//lib/herb/errors.rb#1056 + def initialize(type, location, message, found); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1053 + def found; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1067 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#1062 + def suggestion; end + + # : () -> serialized_missing_whitespace_between_attributes_error + # + # source://herb//lib/herb/errors.rb#1072 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1079 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#719 +class Herb::Errors::NestedCommentError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, Herb::Token) -> void + # + # @return [NestedCommentError] a new instance of NestedCommentError + # + # source://herb//lib/herb/errors.rb#726 + def initialize(type, location, message, comment_start, nested_start); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#722 + def comment_start; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#738 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#723 + def nested_start; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#733 + def suggestion; end + + # : () -> serialized_nested_comment_error + # + # source://herb//lib/herb/errors.rb#743 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#751 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1367 +class Herb::Errors::NestedERBTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, Integer, Integer) -> void + # + # @return [NestedERBTagError] a new instance of NestedERBTagError + # + # source://herb//lib/herb/errors.rb#1375 + def initialize(type, location, message, opening_tag, nested_tag_line, nested_tag_column); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1383 + def inspect; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#1372 + def nested_tag_column; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#1371 + def nested_tag_line; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1370 + def opening_tag; end + + # : () -> serialized_nested_erb_tag_error + # + # source://herb//lib/herb/errors.rb#1388 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1397 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#806 +class Herb::Errors::OmittedClosingTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, Herb::Position) -> void + # + # @return [OmittedClosingTagError] a new instance of OmittedClosingTagError + # + # source://herb//lib/herb/errors.rb#813 + def initialize(type, location, message, opening_tag, insertion_point); end + + # : Herb::Position? + # + # source://herb//lib/herb/errors.rb#810 + def insertion_point; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#820 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#809 + def opening_tag; end + + # : () -> serialized_omitted_closing_tag_error + # + # source://herb//lib/herb/errors.rb#825 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#833 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1413 +class Herb::Errors::RenderAmbiguousLocalsError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [RenderAmbiguousLocalsError] a new instance of RenderAmbiguousLocalsError + # + # source://herb//lib/herb/errors.rb#1419 + def initialize(type, location, message, partial); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1425 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1416 + def partial; end + + # : () -> serialized_render_ambiguous_locals_error + # + # source://herb//lib/herb/errors.rb#1430 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1437 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1509 +class Herb::Errors::RenderConflictingPartialError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, String) -> void + # + # @return [RenderConflictingPartialError] a new instance of RenderConflictingPartialError + # + # source://herb//lib/herb/errors.rb#1516 + def initialize(type, location, message, positional_partial, keyword_partial); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1523 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1513 + def keyword_partial; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1512 + def positional_partial; end + + # : () -> serialized_render_conflicting_partial_error + # + # source://herb//lib/herb/errors.rb#1528 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1536 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1549 +class Herb::Errors::RenderInvalidAsOptionError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [RenderInvalidAsOptionError] a new instance of RenderInvalidAsOptionError + # + # source://herb//lib/herb/errors.rb#1555 + def initialize(type, location, message, as_value); end + + # : String? + # + # source://herb//lib/herb/errors.rb#1552 + def as_value; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1561 + def inspect; end + + # : () -> serialized_render_invalid_as_option_error + # + # source://herb//lib/herb/errors.rb#1566 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1573 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1605 +class Herb::Errors::RenderLayoutWithoutBlockError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [RenderLayoutWithoutBlockError] a new instance of RenderLayoutWithoutBlockError + # + # source://herb//lib/herb/errors.rb#1611 + def initialize(type, location, message, layout); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1617 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1608 + def layout; end + + # : () -> serialized_render_layout_without_block_error + # + # source://herb//lib/herb/errors.rb#1622 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1629 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1449 +class Herb::Errors::RenderMissingLocalsError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, String) -> void + # + # @return [RenderMissingLocalsError] a new instance of RenderMissingLocalsError + # + # source://herb//lib/herb/errors.rb#1456 + def initialize(type, location, message, partial, keywords); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1463 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1453 + def keywords; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1452 + def partial; end + + # : () -> serialized_render_missing_locals_error + # + # source://herb//lib/herb/errors.rb#1468 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1476 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1489 +class Herb::Errors::RenderNoArgumentsError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1493 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1498 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1585 +class Herb::Errors::RenderObjectAndCollectionError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1589 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1594 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#395 +class Herb::Errors::RubyParseError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, String, String) -> void + # + # @return [RubyParseError] a new instance of RubyParseError + # + # source://herb//lib/herb/errors.rb#403 + def initialize(type, location, message, error_message, diagnostic_id, level); end + + # : String? + # + # source://herb//lib/herb/errors.rb#399 + def diagnostic_id; end + + # : String? + # + # source://herb//lib/herb/errors.rb#398 + def error_message; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#416 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#400 + def level; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#411 + def suggestion; end + + # : () -> serialized_ruby_parse_error + # + # source://herb//lib/herb/errors.rb#421 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#430 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1347 +class Herb::Errors::StrayERBClosingTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1351 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1356 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1677 +class Herb::Errors::StrictLocalsBlockArgumentError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [StrictLocalsBlockArgumentError] a new instance of StrictLocalsBlockArgumentError + # + # source://herb//lib/herb/errors.rb#1683 + def initialize(type, location, message, name); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1689 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1680 + def name; end + + # : () -> serialized_strict_locals_block_argument_error + # + # source://herb//lib/herb/errors.rb#1694 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1701 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1785 +class Herb::Errors::StrictLocalsDuplicateDeclarationError < ::Herb::Errors::Error + include ::Herb::Colors + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1789 + def inspect; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1794 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1749 +class Herb::Errors::StrictLocalsMissingParenthesisError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [StrictLocalsMissingParenthesisError] a new instance of StrictLocalsMissingParenthesisError + # + # source://herb//lib/herb/errors.rb#1755 + def initialize(type, location, message, rest); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1761 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1752 + def rest; end + + # : () -> serialized_strict_locals_missing_parenthesis_error + # + # source://herb//lib/herb/errors.rb#1766 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1773 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1641 +class Herb::Errors::StrictLocalsPositionalArgumentError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [StrictLocalsPositionalArgumentError] a new instance of StrictLocalsPositionalArgumentError + # + # source://herb//lib/herb/errors.rb#1647 + def initialize(type, location, message, name); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1653 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1644 + def name; end + + # : () -> serialized_strict_locals_positional_argument_error + # + # source://herb//lib/herb/errors.rb#1658 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1665 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1713 +class Herb::Errors::StrictLocalsSplatArgumentError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String) -> void + # + # @return [StrictLocalsSplatArgumentError] a new instance of StrictLocalsSplatArgumentError + # + # source://herb//lib/herb/errors.rb#1719 + def initialize(type, location, message, name); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1725 + def inspect; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1716 + def name; end + + # : () -> serialized_strict_locals_splat_argument_error + # + # source://herb//lib/herb/errors.rb#1730 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1737 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#248 +class Herb::Errors::TagNamesMismatchError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, Herb::Token) -> void + # + # @return [TagNamesMismatchError] a new instance of TagNamesMismatchError + # + # source://herb//lib/herb/errors.rb#255 + def initialize(type, location, message, opening_tag, closing_tag); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#252 + def closing_tag; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#269 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#251 + def opening_tag; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#262 + def suggestion; end + + # : () -> serialized_tag_names_mismatch_error + # + # source://herb//lib/herb/errors.rb#274 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#282 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#2021 +class Herb::Errors::TimeoutError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Integer) -> void + # + # @return [TimeoutError] a new instance of TimeoutError + # + # source://herb//lib/herb/errors.rb#2027 + def initialize(type, location, message, timeout_ms); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#2033 + def inspect; end + + # : Integer? + # + # source://herb//lib/herb/errors.rb#2024 + def timeout_ms; end + + # : () -> serialized_timeout_error + # + # source://herb//lib/herb/errors.rb#2038 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#2045 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#888 +class Herb::Errors::UnclosedCloseTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnclosedCloseTagError] a new instance of UnclosedCloseTagError + # + # source://herb//lib/herb/errors.rb#894 + def initialize(type, location, message, tag_name); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#900 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#891 + def tag_name; end + + # : () -> serialized_unclosed_close_tag_error + # + # source://herb//lib/herb/errors.rb#905 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#912 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#676 +class Herb::Errors::UnclosedCommentError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnclosedCommentError] a new instance of UnclosedCommentError + # + # source://herb//lib/herb/errors.rb#682 + def initialize(type, location, message, comment_start); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#679 + def comment_start; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#693 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#688 + def suggestion; end + + # : () -> serialized_unclosed_comment_error + # + # source://herb//lib/herb/errors.rb#698 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#705 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1265 +class Herb::Errors::UnclosedERBTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnclosedERBTagError] a new instance of UnclosedERBTagError + # + # source://herb//lib/herb/errors.rb#1271 + def initialize(type, location, message, opening_tag); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1277 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1268 + def opening_tag; end + + # : () -> serialized_unclosed_erb_tag_error + # + # source://herb//lib/herb/errors.rb#1282 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1289 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#352 +class Herb::Errors::UnclosedElementError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnclosedElementError] a new instance of UnclosedElementError + # + # source://herb//lib/herb/errors.rb#358 + def initialize(type, location, message, opening_tag); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#369 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#355 + def opening_tag; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#364 + def suggestion; end + + # : () -> serialized_unclosed_element_error + # + # source://herb//lib/herb/errors.rb#374 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#381 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#850 +class Herb::Errors::UnclosedOpenTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnclosedOpenTagError] a new instance of UnclosedOpenTagError + # + # source://herb//lib/herb/errors.rb#856 + def initialize(type, location, message, tag_name); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#862 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#853 + def tag_name; end + + # : () -> serialized_unclosed_open_tag_error + # + # source://herb//lib/herb/errors.rb#867 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#874 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#969 +class Herb::Errors::UnclosedQuoteError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnclosedQuoteError] a new instance of UnclosedQuoteError + # + # source://herb//lib/herb/errors.rb#975 + def initialize(type, location, message, opening_quote); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#981 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#972 + def opening_quote; end + + # : () -> serialized_unclosed_quote_error + # + # source://herb//lib/herb/errors.rb#986 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#993 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1093 +class Herb::Errors::UnexpectedCharacterInAttributeNameError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnexpectedCharacterInAttributeNameError] a new instance of UnexpectedCharacterInAttributeNameError + # + # source://herb//lib/herb/errors.rb#1099 + def initialize(type, location, message, character); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1096 + def character; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1110 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#1105 + def suggestion; end + + # : () -> serialized_unexpected_character_in_attribute_name_error + # + # source://herb//lib/herb/errors.rb#1115 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1122 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1136 +class Herb::Errors::UnexpectedCharacterInUnquotedAttributeValueError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnexpectedCharacterInUnquotedAttributeValueError] a new instance of UnexpectedCharacterInUnquotedAttributeValueError + # + # source://herb//lib/herb/errors.rb#1142 + def initialize(type, location, message, character); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1139 + def character; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1153 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#1148 + def suggestion; end + + # : () -> serialized_unexpected_character_in_unquoted_attribute_value_error + # + # source://herb//lib/herb/errors.rb#1158 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1165 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1179 +class Herb::Errors::UnexpectedEqualsSignBeforeAttributeNameError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnexpectedEqualsSignBeforeAttributeNameError] a new instance of UnexpectedEqualsSignBeforeAttributeNameError + # + # source://herb//lib/herb/errors.rb#1185 + def initialize(type, location, message, equals); end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1182 + def equals; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1196 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#1191 + def suggestion; end + + # : () -> serialized_unexpected_equals_sign_before_attribute_name_error + # + # source://herb//lib/herb/errors.rb#1201 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1208 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#76 +class Herb::Errors::UnexpectedError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, String, String) -> void + # + # @return [UnexpectedError] a new instance of UnexpectedError + # + # source://herb//lib/herb/errors.rb#84 + def initialize(type, location, message, description, expected, found); end + + # : String? + # + # source://herb//lib/herb/errors.rb#79 + def description; end + + # : String? + # + # source://herb//lib/herb/errors.rb#80 + def expected; end + + # : String? + # + # source://herb//lib/herb/errors.rb#81 + def found; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#92 + def inspect; end + + # : () -> serialized_unexpected_error + # + # source://herb//lib/herb/errors.rb#97 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#106 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1222 +class Herb::Errors::UnexpectedSolidusInTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token) -> void + # + # @return [UnexpectedSolidusInTagError] a new instance of UnexpectedSolidusInTagError + # + # source://herb//lib/herb/errors.rb#1228 + def initialize(type, location, message, solidus); end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1239 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1225 + def solidus; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#1234 + def suggestion; end + + # : () -> serialized_unexpected_solidus_in_tag_error + # + # source://herb//lib/herb/errors.rb#1244 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1251 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#120 +class Herb::Errors::UnexpectedTokenError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, String, Herb::Token) -> void + # + # @return [UnexpectedTokenError] a new instance of UnexpectedTokenError + # + # source://herb//lib/herb/errors.rb#127 + def initialize(type, location, message, expected_type, found); end + + # : String? + # + # source://herb//lib/herb/errors.rb#123 + def expected_type; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#124 + def found; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#134 + def inspect; end + + # : () -> serialized_unexpected_token_error + # + # source://herb//lib/herb/errors.rb#139 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#147 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#299 +class Herb::Errors::VoidElementClosingTagError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, String, String) -> void + # + # @return [VoidElementClosingTagError] a new instance of VoidElementClosingTagError + # + # source://herb//lib/herb/errors.rb#307 + def initialize(type, location, message, tag_name, expected, found); end + + # : String? + # + # source://herb//lib/herb/errors.rb#303 + def expected; end + + # : String? + # + # source://herb//lib/herb/errors.rb#304 + def found; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#322 + def inspect; end + + # : () -> String? + # + # source://herb//lib/herb/errors.rb#315 + def suggestion; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#302 + def tag_name; end + + # : () -> serialized_void_element_closing_tag_error + # + # source://herb//lib/herb/errors.rb#327 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#336 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# source://herb//lib/herb/errors.rb#1937 +class Herb::Errors::VoidElementContentError < ::Herb::Errors::Error + include ::Herb::Colors + + # : (String, Location?, String, Herb::Token, String, String) -> void + # + # @return [VoidElementContentError] a new instance of VoidElementContentError + # + # source://herb//lib/herb/errors.rb#1945 + def initialize(type, location, message, tag_name, helper_name, content_type); end + + # : String? + # + # source://herb//lib/herb/errors.rb#1942 + def content_type; end + + # : String? + # + # source://herb//lib/herb/errors.rb#1941 + def helper_name; end + + # : () -> String + # + # source://herb//lib/herb/errors.rb#1953 + def inspect; end + + # : Herb::Token? + # + # source://herb//lib/herb/errors.rb#1940 + def tag_name; end + + # : () -> serialized_void_element_content_error + # + # source://herb//lib/herb/errors.rb#1958 + def to_hash; end + + # : (?indent: Integer, ?depth: Integer, ?depth_limit: Integer) -> String + # + # source://herb//lib/herb/errors.rb#1967 + def tree_inspect(indent: T.unsafe(nil), depth: T.unsafe(nil), depth_limit: T.unsafe(nil)); end +end + +# Identifies content by what it is instead of by where it lives or when it was touched. +# +# Herb::Fingerprint.file(asset) #=> "9f2a1c4e…" +# Herb::Fingerprint.template(source) #=> "d242d277…" +# +# source://herb//lib/herb/fingerprint.rb#12 +module Herb::Fingerprint + class << self + # : () -> Hash[Array[untyped], String] + # + # source://herb//lib/herb/fingerprint.rb#71 + def cache; end + + # : () -> void + # + # source://herb//lib/herb/fingerprint.rb#64 + def clear_cache; end + + # : ((String | Pathname)?) -> String? + # + # source://herb//lib/herb/fingerprint.rb#24 + def file(path); end + + # : (String?) -> String? + # + # source://herb//lib/herb/fingerprint.rb#17 + def of(content); end + + # : (String?) -> String? + # + # source://herb//lib/herb/fingerprint.rb#59 + def short(digest); end + + # : (String) -> String + # + # source://herb//lib/herb/fingerprint.rb#76 + def strip_bom(bytes); end + + # : (String?) -> String? + # + # source://herb//lib/herb/fingerprint.rb#33 + def template(source); end + + # : ((String | Pathname)?) -> String? + # + # source://herb//lib/herb/fingerprint.rb#40 + def template_file(path); end + end +end + +# : String +# +# source://herb//lib/herb/fingerprint.rb#13 +Herb::Fingerprint::BOM = T.let(T.unsafe(nil), String) + +# : Integer +# +# source://herb//lib/herb/fingerprint.rb#14 +Herb::Fingerprint::SHORT_LENGTH = T.let(T.unsafe(nil), Integer) + +# source://herb//lib/herb/lex_result.rb#5 +class Herb::LexResult < ::Herb::Result + # : (Array[Herb::Token], String, Array[Herb::Warnings::Warning], Array[Herb::Errors::Error]) -> void + # + # @return [LexResult] a new instance of LexResult + # + # source://herb//lib/herb/lex_result.rb#9 + def initialize(value, source, warnings, errors); end + + # : TokenList + # + # source://herb//lib/herb/lex_result.rb#6 + def value; end +end + +# Finds the most specific node at a position, and the nodes it sits inside. +# +# result = document.locate(Herb::Position.from(2, 7)) +# +# result.node #=> the innermost node whose location contains the position +# result.ancestors #=> every node it sits inside, nearest first +# +# A node and a parse result both answer, so a walk starts from whichever one a caller already +# holds. `Herb::AST::Node#locate` and `Herb::ParseResult#locate` are the same walk from different +# starting points. +# +# Everything that reads a position back from a rendered page, an editor, or a diagnostic needs +# this, and every caller was writing its own descent. A finding at `2:7` is a node before it is +# anything a person can act on. +# +# `ancestors` reads nearest first, the way `caller` does, so the enclosing element a caller wants +# is the first one that answers: +# +# result.ancestors.find { |node| node.is_a?(Herb::AST::HTMLElementNode) } +# +# A node's location contains its start and stops short of its end, so two nodes sitting next to +# each other never both answer for the character between them. A position past the end of the +# source belongs to no node, and the answer is `nil`. +# +# Columns are 0-based character offsets into their line, which is what the parser reports. +# `Herb::Position#to_one_based` is what turns one into what an editor shows. +# +# `Herb::Locate::Result` holds what was found, and what it was found inside. +# +# result.node #=> # +# result.ancestors #=> [#<...HTMLAttributeNameNode>, #<...HTMLAttributeNode>, ...] +# +# source://herb//lib/herb/locate.rb#37 +class Herb::Locate + # : (Herb::Position) -> void + # + # @return [Locate] a new instance of Locate + # + # source://herb//lib/herb/locate.rb#84 + def initialize(position); end + + # : ((Herb::AST::Node | Herb::ParseResult)) -> Result? + # + # source://herb//lib/herb/locate.rb#93 + def call(node); end + + # : ((Herb::AST::Node | Herb::ParseResult)) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/locate.rb#102 + def locatable?(node); end + + private + + # : (Herb::AST::Node) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/locate.rb#123 + def contains?(node); end + + # : (Herb::AST::Node, Array[Herb::AST::Node]) -> Result? + # + # source://herb//lib/herb/locate.rb#109 + def descend(node, ancestors); end + + # : (Herb::AST::Node) -> Herb::Location? + # + # source://herb//lib/herb/locate.rb#140 + def extent(node); end + + # : (Herb::Location?, Herb::Location) -> Herb::Location + # + # source://herb//lib/herb/locate.rb#154 + def union(first, second); end + + # : (Herb::AST::Node) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/locate.rb#133 + def within_extent?(node); end + + class << self + # : ((Herb::AST::Node | Herb::ParseResult), Herb::Position) -> Result? + # + # source://herb//lib/herb/locate.rb#69 + def call(node, position); end + + # : ((Herb::AST::Node | Herb::ParseResult), Herb::Position) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/locate.rb#74 + def locatable?(node, position); end + + # : ((Herb::AST::Node | Herb::ParseResult)) -> Herb::AST::Node + # + # source://herb//lib/herb/locate.rb#79 + def root(node); end + end +end + +# source://herb//lib/herb/locate.rb#38 +class Herb::Locate::Result + # : (Herb::AST::Node, Array[Herb::AST::Node]) -> void + # + # @return [Result] a new instance of Result + # + # source://herb//lib/herb/locate.rb#43 + def initialize(node, ancestors); end + + # : Array[Herb::AST::Node] + # + # source://herb//lib/herb/locate.rb#40 + def ancestors; end + + # : (untyped) -> Herb::AST::Node? + # + # source://herb//lib/herb/locate.rb#51 + def innermost(kind); end + + # : () -> String + # + # source://herb//lib/herb/locate.rb#63 + def inspect; end + + # : Herb::AST::Node + # + # source://herb//lib/herb/locate.rb#39 + def node; end + + # : () -> Array[Herb::AST::Node] + # + # source://herb//lib/herb/locate.rb#58 + def path; end +end + +# : type serialized_location = { +# | start: serialized_position, +# | end: serialized_position +# | } +# +# source://herb//lib/herb/location.rb#9 +class Herb::Location + # : (Position, Position) -> void + # + # @return [Location] a new instance of Location + # + # source://herb//lib/herb/location.rb#14 + def initialize(start_position, end_position); end + + # : (Position) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/location.rb#38 + def contains?(position); end + + # : (Location) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/location.rb#43 + def covers?(other); end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/location.rb#48 + def empty?; end + + # : Position + # + # source://herb//lib/herb/location.rb#11 + def end; end + + # : () -> String + # + # source://herb//lib/herb/location.rb#71 + def inspect; end + + # : Position + # + # source://herb//lib/herb/location.rb#10 + def start; end + + # : () -> serialized_location + # + # source://herb//lib/herb/location.rb#53 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/location.rb#61 + def to_json(state = T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/location.rb#66 + def tree_inspect; end + + class << self + # : (Integer, Integer, Integer, Integer) -> Location + # + # source://herb//lib/herb/location.rb#28 + def [](start_line, start_column, end_line, end_column); end + + # : (Integer, Integer, Integer, Integer) -> Location + # + # source://herb//lib/herb/location.rb#20 + def from(start_line, start_column, end_line, end_column); end + + # : () -> Location + # + # source://herb//lib/herb/location.rb#33 + def zero; end + end +end + +# source://herb//lib/herb/parse_result.rb#9 +class Herb::ParseResult < ::Herb::Result + # : (Herb::AST::DocumentNode, String, Array[Herb::Warnings::Warning], Array[Herb::Errors::Error], Herb::ParserOptions, ?Integer?) -> void + # + # @return [ParseResult] a new instance of ParseResult + # + # source://herb//lib/herb/parse_result.rb#15 + def initialize(value, source, warnings, errors, options, error_count = T.unsafe(nil)); end + + # : Integer? + # + # source://herb//lib/herb/parse_result.rb#12 + def error_count; end + + # : () -> Array[Herb::Errors::Error] + # + # source://herb//lib/herb/parse_result.rb#30 + def errors; end + + # : (Herb::Position) -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/parse_result.rb#47 + def locatable?(position); end + + # : (Herb::Position) -> Herb::Locate::Result? + # + # source://herb//lib/herb/parse_result.rb#42 + def locate(position); end + + # : Herb::ParserOptions + # + # source://herb//lib/herb/parse_result.rb#11 + def options; end + + # : () -> String + # + # source://herb//lib/herb/parse_result.rb#37 + def pretty_errors; end + + # : Herb::AST::DocumentNode + # + # source://herb//lib/herb/parse_result.rb#10 + def value; end + + # : (Visitor) -> void + # + # source://herb//lib/herb/parse_result.rb#52 + def visit(visitor); end +end + +# source://herb//lib/herb/parser_options.rb#8 +class Herb::ParserOptions + # : (?action_view_helpers: bool, ?analyze: bool, ?arena_stats: bool, ?dot_notation_tags: bool, ?erb_openers: Array[String], ?herb_directives: bool, ?html: bool, ?iteration_nodes: bool, ?max_errors: Integer?, ?prism_nodes: bool, ?prism_nodes_deep: bool, ?prism_program: bool, ?render_nodes: bool, ?strict: bool, ?strict_locals: bool, ?timeout: Numeric, ?track_locations: bool, ?track_whitespace: bool, ?transform_conditionals: bool) -> void + # + # @return [ParserOptions] a new instance of ParserOptions + # + # source://herb//lib/herb/parser_options.rb#49 + def initialize(action_view_helpers: T.unsafe(nil), analyze: T.unsafe(nil), arena_stats: T.unsafe(nil), dot_notation_tags: T.unsafe(nil), erb_openers: T.unsafe(nil), herb_directives: T.unsafe(nil), html: T.unsafe(nil), iteration_nodes: T.unsafe(nil), max_errors: T.unsafe(nil), prism_nodes: T.unsafe(nil), prism_nodes_deep: T.unsafe(nil), prism_program: T.unsafe(nil), render_nodes: T.unsafe(nil), strict: T.unsafe(nil), strict_locals: T.unsafe(nil), timeout: T.unsafe(nil), track_locations: T.unsafe(nil), track_whitespace: T.unsafe(nil), transform_conditionals: T.unsafe(nil)); end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#9 + def action_view_helpers; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#10 + def analyze; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#11 + def arena_stats; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#12 + def dot_notation_tags; end + + # : Array[String] + # + # source://herb//lib/herb/parser_options.rb#13 + def erb_openers; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#14 + def herb_directives; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#15 + def html; end + + # : () -> String + # + # source://herb//lib/herb/parser_options.rb#97 + def inspect; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#16 + def iteration_nodes; end + + # : Integer? + # + # source://herb//lib/herb/parser_options.rb#17 + def max_errors; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#18 + def prism_nodes; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#19 + def prism_nodes_deep; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#20 + def prism_program; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#21 + def render_nodes; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#22 + def strict; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#23 + def strict_locals; end + + # : Numeric + # + # source://herb//lib/herb/parser_options.rb#24 + def timeout; end + + # : () -> Hash[Symbol, (bool | Numeric | Array[String] | nil)] + # + # source://herb//lib/herb/parser_options.rb#72 + def to_h; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#25 + def track_locations; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#26 + def track_whitespace; end + + # : bool + # + # source://herb//lib/herb/parser_options.rb#27 + def transform_conditionals; end +end + +# : bool +# +# source://herb//lib/herb/parser_options.rb#29 +Herb::ParserOptions::DEFAULT_ACTION_VIEW_HELPERS = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#30 +Herb::ParserOptions::DEFAULT_ANALYZE = T.let(T.unsafe(nil), TrueClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#31 +Herb::ParserOptions::DEFAULT_CAPTURE_ARENA_STATS = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#32 +Herb::ParserOptions::DEFAULT_DOT_NOTATION_TAGS = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#33 +Herb::ParserOptions::DEFAULT_HERB_DIRECTIVES = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#34 +Herb::ParserOptions::DEFAULT_HTML = T.let(T.unsafe(nil), TrueClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#35 +Herb::ParserOptions::DEFAULT_ITERATION_NODES = T.let(T.unsafe(nil), FalseClass) + +# : Integer +# +# source://herb//lib/herb/parser_options.rb#36 +Herb::ParserOptions::DEFAULT_MAX_ERRORS = T.let(T.unsafe(nil), Integer) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#37 +Herb::ParserOptions::DEFAULT_PRISM_NODES = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#38 +Herb::ParserOptions::DEFAULT_PRISM_NODES_DEEP = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#39 +Herb::ParserOptions::DEFAULT_PRISM_PROGRAM = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#40 +Herb::ParserOptions::DEFAULT_RENDER_NODES = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#41 +Herb::ParserOptions::DEFAULT_STRICT = T.let(T.unsafe(nil), TrueClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#42 +Herb::ParserOptions::DEFAULT_STRICT_LOCALS = T.let(T.unsafe(nil), FalseClass) + +# : Numeric +# +# source://herb//lib/herb/parser_options.rb#43 +Herb::ParserOptions::DEFAULT_TIMEOUT = T.let(T.unsafe(nil), Integer) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#44 +Herb::ParserOptions::DEFAULT_TRACK_LOCATIONS = T.let(T.unsafe(nil), TrueClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#45 +Herb::ParserOptions::DEFAULT_TRACK_WHITESPACE = T.let(T.unsafe(nil), FalseClass) + +# : bool +# +# source://herb//lib/herb/parser_options.rb#46 +Herb::ParserOptions::DEFAULT_TRANSFORM_CONDITIONALS = T.let(T.unsafe(nil), FalseClass) + +# : type serialized_position = { line: Integer, column: Integer } +# +# source://herb//lib/herb/position.rb#6 +class Herb::Position + include ::Comparable + + # : (Integer, Integer) -> void + # + # @return [Position] a new instance of Position + # + # source://herb//lib/herb/position.rb#13 + def initialize(line, column); end + + # : (untyped) -> Integer? + # + # source://herb//lib/herb/position.rb#34 + def <=>(other); end + + # : Integer + # + # source://herb//lib/herb/position.rb#10 + def column; end + + # : () -> String + # + # source://herb//lib/herb/position.rb#61 + def inspect; end + + # : Integer + # + # source://herb//lib/herb/position.rb#9 + def line; end + + # : () -> serialized_position + # + # source://herb//lib/herb/position.rb#41 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/position.rb#51 + def to_json(state = T.unsafe(nil)); end + + # : () -> serialized_position + # + # source://herb//lib/herb/position.rb#46 + def to_one_based; end + + # : () -> String + # + # source://herb//lib/herb/position.rb#56 + def tree_inspect; end + + class << self + # : (Integer, Integer) -> Position + # + # source://herb//lib/herb/position.rb#19 + def [](line, column); end + + # : (Integer, Integer) -> Position + # + # source://herb//lib/herb/position.rb#24 + def from(line, column); end + + # : () -> Position + # + # source://herb//lib/herb/position.rb#29 + def zero; end + end +end + +# source://herb//lib/herb/prism_inspect.rb#4 +module Herb::PrismInspect + class << self + # : (Prism::Node, String, String) -> String + # + # source://herb//lib/herb/prism_inspect.rb#29 + def inspect_prism_node(node, source, prefix); end + + # : (String, String, String) -> String + # + # source://herb//lib/herb/prism_inspect.rb#9 + def inspect_prism_serialized(serialized_bytes, source, prefix); end + + private + + # : (untyped) -> Array[[Symbol, untyped]] + # + # source://herb//lib/herb/prism_inspect.rb#107 + def display_fields(node); end + + # : (Prism::Location) -> String + # + # source://herb//lib/herb/prism_inspect.rb#112 + def format_location(location); end + + # : (Symbol, Array[untyped], String, String, String, String) -> String + # + # source://herb//lib/herb/prism_inspect.rb#81 + def inspect_array_field(name, value, source, prefix, symbol, child_prefix); end + + # : (Symbol, untyped, String, String, String, String) -> String + # + # source://herb//lib/herb/prism_inspect.rb#50 + def inspect_field(name, value, source, prefix, symbol, child_prefix); end + + # : (Symbol, Prism::Node, String, String, String, String) -> String + # + # source://herb//lib/herb/prism_inspect.rb#70 + def inspect_node_field(name, value, source, prefix, symbol, child_prefix); end + end +end + +# source://herb//lib/herb/prism_inspect.rb#5 +Herb::PrismInspect::SKIP_FIELDS = T.let(T.unsafe(nil), Array) + +# : type serialized_range = [Integer, Integer] +# +# source://herb//lib/herb/range.rb#6 +class Herb::Range + # : (Integer, Integer) -> void + # + # @return [Range] a new instance of Range + # + # source://herb//lib/herb/range.rb#11 + def initialize(from, to); end + + # : Integer + # + # source://herb//lib/herb/range.rb#7 + def from; end + + # : () -> String + # + # source://herb//lib/herb/range.rb#47 + def inspect; end + + # : Integer + # + # source://herb//lib/herb/range.rb#8 + def to; end + + # : () -> serialized_range + # + # source://herb//lib/herb/range.rb#32 + def to_a; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/range.rb#37 + def to_json(state = T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/range.rb#52 + def to_s; end + + # : () -> String + # + # source://herb//lib/herb/range.rb#42 + def tree_inspect; end + + class << self + # : (Integer, Integer) -> Range + # + # source://herb//lib/herb/range.rb#17 + def [](from, to); end + + # : (Integer, Integer) -> Range + # + # source://herb//lib/herb/range.rb#22 + def from(from, to); end + + # : () -> Range + # + # source://herb//lib/herb/range.rb#27 + def zero; end + end +end + +# source://herb//lib/herb/result.rb#5 +class Herb::Result + # : (String, Array[Herb::Warnings::Warning], Array[Herb::Errors::Error]) -> void + # + # @return [Result] a new instance of Result + # + # source://herb//lib/herb/result.rb#11 + def initialize(source, warnings, errors); end + + # : Array[Herb::Errors::Error] + # + # source://herb//lib/herb/result.rb#8 + def errors; end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/result.rb#23 + def failed?; end + + # : String + # + # source://herb//lib/herb/result.rb#6 + def source; end + + # : () -> bool + # + # @return [Boolean] + # + # source://herb//lib/herb/result.rb#18 + def success?; end + + # : Array[Herb::Warnings::Warning] + # + # source://herb//lib/herb/result.rb#7 + def warnings; end +end + +# : type serialized_token = { +# | value: String, +# | range: serialized_range?, +# | location: serialized_location?, +# | type: String +# | } +# +# source://herb//lib/herb/token.rb#11 +class Herb::Token + include ::Herb::Colors + + # : (String, Range, Location, String) -> void + # + # @return [Token] a new instance of Token + # + # source://herb//lib/herb/token.rb#25 + def initialize(value, range, location, type); end + + # : (Position?) -> String + # + # source://herb//lib/herb/token.rb#71 + def colorize_position(position); end + + # : () -> String + # + # source://herb//lib/herb/token.rb#64 + def colorize_range; end + + # : () -> String + # + # source://herb//lib/herb/token.rb#78 + def inspect; end + + # : Location + # + # source://herb//lib/herb/token.rb#16 + def location; end + + # : Range + # + # source://herb//lib/herb/token.rb#15 + def range; end + + # : () -> serialized_token + # + # source://herb//lib/herb/token.rb#33 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/token.rb#43 + def to_json(state = T.unsafe(nil)); end + + # : () -> String + # + # source://herb//lib/herb/token.rb#48 + def tree_inspect; end + + # : String + # + # source://herb//lib/herb/token.rb#17 + def type; end + + # : String + # + # source://herb//lib/herb/token.rb#14 + def value; end + + # : () -> String + # + # source://herb//lib/herb/token.rb#55 + def value_inspect; end + + class << self + # : (String | Symbol, String, ?location: Location, ?range: Range) -> Token + # + # source://herb//lib/herb/token.rb#20 + def from(type, value, location: T.unsafe(nil), range: T.unsafe(nil)); end + end +end + +# source://herb//lib/herb/token_list.rb#7 +class Herb::TokenList < ::SimpleDelegator + # : () -> String + # + # source://herb//lib/herb/token_list.rb#9 + def inspect; end + + private + + # : () -> Array[Token] + # + # source://herb//lib/herb/token_list.rb#16 + def items; end +end + +# source://herb//lib/herb/version.rb#5 +Herb::VERSION = T.let(T.unsafe(nil), String) + +# source://herb//lib/herb/visitor/parser_option_requirements.rb#5 +class Herb::Visitor + include ::Herb::AST::Helpers + include ::Herb::Visitor::ParserOptionRequirements + extend ::Herb::Visitor::ParserOptionRequirements::ClassMethods + + # : (Herb::AST::Node?) -> void + # + # source://herb//lib/herb/visitor.rb#18 + def visit(node); end + + # : (Array[Herb::AST::Node?]) -> void + # + # source://herb//lib/herb/visitor.rb#23 + def visit_all(nodes); end + + # : (Herb::AST::CDATANode) -> void + # + # source://herb//lib/herb/visitor.rb#164 + def visit_cdata_node(node); end + + # : (Herb::AST::Node) -> void + # + # source://herb//lib/herb/visitor.rb#28 + def visit_child_nodes(node); end + + # : (Herb::AST::DocumentNode) -> void + # + # source://herb//lib/herb/visitor.rb#43 + def visit_document_node(node); end + + # : (Herb::AST::ERBBeginNode) -> void + # + # source://herb//lib/herb/visitor.rb#274 + def visit_erb_begin_node(node); end + + # : (Herb::AST::ERBBlockNode) -> void + # + # source://herb//lib/herb/visitor.rb#204 + def visit_erb_block_node(node); end + + # : (Herb::AST::ERBCaseMatchNode) -> void + # + # source://herb//lib/herb/visitor.rb#232 + def visit_erb_case_match_node(node); end + + # : (Herb::AST::ERBCaseNode) -> void + # + # source://herb//lib/herb/visitor.rb#225 + def visit_erb_case_node(node); end + + # : (Herb::AST::ERBCommentNode) -> void + # + # source://herb//lib/herb/visitor.rb#354 + def visit_erb_comment_node(node); end + + # : (Herb::AST::ERBContentNode) -> void + # + # source://herb//lib/herb/visitor.rb#176 + def visit_erb_content_node(node); end + + # : (Herb::AST::ERBElseNode) -> void + # + # source://herb//lib/herb/visitor.rb#190 + def visit_erb_else_node(node); end + + # : (Herb::AST::ERBEndNode) -> void + # + # source://herb//lib/herb/visitor.rb#183 + def visit_erb_end_node(node); end + + # : (Herb::AST::ERBEnsureNode) -> void + # + # source://herb//lib/herb/visitor.rb#267 + def visit_erb_ensure_node(node); end + + # : (Herb::AST::ERBForNode) -> void + # + # source://herb//lib/herb/visitor.rb#253 + def visit_erb_for_node(node); end + + # : (Herb::AST::ERBIfNode) -> void + # + # source://herb//lib/herb/visitor.rb#197 + def visit_erb_if_node(node); end + + # : (Herb::AST::ERBInNode) -> void + # + # source://herb//lib/herb/visitor.rb#327 + def visit_erb_in_node(node); end + + # : (Herb::AST::ERBIterationBlockNode) -> void + # + # source://herb//lib/herb/visitor.rb#211 + def visit_erb_iteration_block_node(node); end + + # : (Herb::AST::Node) -> void + # + # source://herb//lib/herb/visitor.rb#38 + def visit_erb_node(node); end + + # : (Herb::AST::ERBOpenTagNode) -> void + # + # source://herb//lib/herb/visitor.rb#127 + def visit_erb_open_tag_node(node); end + + # : (Herb::AST::ERBRenderNode) -> void + # + # source://herb//lib/herb/visitor.rb#300 + def visit_erb_render_node(node); end + + # : (Herb::AST::ERBRescueNode) -> void + # + # source://herb//lib/herb/visitor.rb#260 + def visit_erb_rescue_node(node); end + + # : (Herb::AST::ERBStrictLocalsNode) -> void + # + # source://herb//lib/herb/visitor.rb#313 + def visit_erb_strict_locals_node(node); end + + # : (Herb::AST::ERBUnlessNode) -> void + # + # source://herb//lib/herb/visitor.rb#281 + def visit_erb_unless_node(node); end + + # : (Herb::AST::ERBUntilNode) -> void + # + # source://herb//lib/herb/visitor.rb#246 + def visit_erb_until_node(node); end + + # : (Herb::AST::ERBWhenNode) -> void + # + # source://herb//lib/herb/visitor.rb#218 + def visit_erb_when_node(node); end + + # : (Herb::AST::ERBWhileNode) -> void + # + # source://herb//lib/herb/visitor.rb#239 + def visit_erb_while_node(node); end + + # : (Herb::AST::ERBYieldNode) -> void + # + # source://herb//lib/herb/visitor.rb#320 + def visit_erb_yield_node(node); end + + # : (Herb::AST::HerbDirectiveNode) -> void + # + # source://herb//lib/herb/visitor.rb#334 + def visit_herb_directive_node(node); end + + # : (Herb::AST::HerbStateDeclarationNode) -> void + # + # source://herb//lib/herb/visitor.rb#341 + def visit_herb_state_declaration_node(node); end + + # : (Herb::AST::HerbStateDirectiveNode) -> void + # + # source://herb//lib/herb/visitor.rb#347 + def visit_herb_state_directive_node(node); end + + # : (Herb::AST::HTMLAttributeNameNode) -> void + # + # source://herb//lib/herb/visitor.rb#103 + def visit_html_attribute_name_node(node); end + + # : (Herb::AST::HTMLAttributeNode) -> void + # + # source://herb//lib/herb/visitor.rb#109 + def visit_html_attribute_node(node); end + + # : (Herb::AST::HTMLAttributeValueNode) -> void + # + # source://herb//lib/herb/visitor.rb#97 + def visit_html_attribute_value_node(node); end + + # : (Herb::AST::HTMLCloseTagNode) -> void + # + # source://herb//lib/herb/visitor.rb#67 + def visit_html_close_tag_node(node); end + + # : (Herb::AST::HTMLCommentNode) -> void + # + # source://herb//lib/herb/visitor.rb#140 + def visit_html_comment_node(node); end + + # : (Herb::AST::HTMLConditionalElementNode) -> void + # + # source://herb//lib/herb/visitor.rb#91 + def visit_html_conditional_element_node(node); end + + # : (Herb::AST::HTMLConditionalOpenTagNode) -> void + # + # source://herb//lib/herb/visitor.rb#61 + def visit_html_conditional_open_tag_node(node); end + + # : (Herb::AST::HTMLDoctypeNode) -> void + # + # source://herb//lib/herb/visitor.rb#146 + def visit_html_doctype_node(node); end + + # : (Herb::AST::HTMLElementNode) -> void + # + # source://herb//lib/herb/visitor.rb#85 + def visit_html_element_node(node); end + + # : (Herb::AST::HTMLOmittedCloseTagNode) -> void + # + # source://herb//lib/herb/visitor.rb#73 + def visit_html_omitted_close_tag_node(node); end + + # : (Herb::AST::HTMLOpenTagNode) -> void + # + # source://herb//lib/herb/visitor.rb#55 + def visit_html_open_tag_node(node); end + + # : (Herb::AST::HTMLTextNode) -> void + # + # source://herb//lib/herb/visitor.rb#134 + def visit_html_text_node(node); end + + # : (Herb::AST::HTMLVirtualCloseTagNode) -> void + # + # source://herb//lib/herb/visitor.rb#79 + def visit_html_virtual_close_tag_node(node); end + + # : (Herb::AST::LiteralNode) -> void + # + # source://herb//lib/herb/visitor.rb#49 + def visit_literal_node(node); end + + # : (Herb::AST::Node) -> void + # + # source://herb//lib/herb/visitor.rb#33 + def visit_node(node); end + + # : (Herb::AST::RubyHTMLAttributesSplatNode) -> void + # + # source://herb//lib/herb/visitor.rb#121 + def visit_ruby_html_attributes_splat_node(node); end + + # : (Herb::AST::RubyLiteralNode) -> void + # + # source://herb//lib/herb/visitor.rb#115 + def visit_ruby_literal_node(node); end + + # : (Herb::AST::RubyParameterNode) -> void + # + # source://herb//lib/herb/visitor.rb#307 + def visit_ruby_parameter_node(node); end + + # : (Herb::AST::RubyRenderKeywordsNode) -> void + # + # source://herb//lib/herb/visitor.rb#294 + def visit_ruby_render_keywords_node(node); end + + # : (Herb::AST::RubyRenderLocalNode) -> void + # + # source://herb//lib/herb/visitor.rb#288 + def visit_ruby_render_local_node(node); end + + # : (Herb::AST::WhitespaceNode) -> void + # + # source://herb//lib/herb/visitor.rb#170 + def visit_whitespace_node(node); end + + # : (Herb::AST::XMLDeclarationNode) -> void + # + # source://herb//lib/herb/visitor.rb#152 + def visit_xml_declaration_node(node); end + + # : (Herb::AST::XMLProcessingInstructionNode) -> void + # + # source://herb//lib/herb/visitor.rb#158 + def visit_xml_processing_instruction_node(node); end +end + +# Lets a visitor declare the parser options the AST it is handed has to carry, so that +# whoever parses can satisfy them before visiting. +# +# class PrismProgramVisitor < Herb::Visitor +# required_parser_option prism_program: true +# recommended_parser_option strict: false +# end +# +# A required option is one the visitor cannot work without, and a recommended one is a soft +# requirement it only works better with. `Herb::Visitor.parser_options_for` resolves both for +# a set of visitors, raising on a conflicting requirement and warning on a conflicting +# recommendation. +# +# `Herb::Visitor` includes this, so every visitor has it. Anything else that is passed to +# `Herb::Engine` as a visitor can include it too. +# +# source://herb//lib/herb/visitor/parser_option_requirements.rb#22 +module Herb::Visitor::ParserOptionRequirements + mixes_in_class_methods ::Herb::Visitor::ParserOptionRequirements::ClassMethods + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#134 + def recommended_parser_options; end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#129 + def required_parser_options; end + + private + + # : () -> untyped + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#146 + def declaring_class; end + + class << self + # : (untyped) -> untyped + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#139 + def class_of(object); end + + # : (untyped) -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#24 + def included(base); end + end +end + +# source://herb//lib/herb/visitor/parser_option_requirements.rb#30 +module Herb::Visitor::ParserOptionRequirements::ClassMethods + # : (untyped) -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#52 + def inherited(subclass); end + + # : (Array[untyped], ?Hash[Symbol, untyped]) -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#60 + def parser_options_for(visitors, parser_options = T.unsafe(nil)); end + + # : (**untyped) -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#37 + def recommended_parser_option(**options); end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#47 + def recommended_parser_options; end + + # : (**untyped) -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#32 + def required_parser_option(**options); end + + # : () -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#42 + def required_parser_options; end + + private + + # : (Array[untyped], Hash[Symbol, untyped]) -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#88 + def apply_recommended_parser_options(visitors, options); end + + # : (Array[untyped], Hash[Symbol, untyped]) -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#72 + def apply_required_parser_options(visitors, options); end + + # : (Symbol) -> Hash[Symbol, untyped] + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#105 + def declared_parser_options(kind); end + + # : (untyped) -> String + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#123 + def describe(visitor); end + + # : (Array[untyped], Symbol) { (untyped, Symbol, untyped) -> void } -> void + # + # source://herb//lib/herb/visitor/parser_option_requirements.rb#112 + def each_declared_parser_option(visitors, reader); end +end + +# source://herb//lib/herb/warnings.rb#5 +module Herb::Warnings; end + +# TODO: move to `config.yml` so they are in line with the way errors are defined and generated. +# +# source://herb//lib/herb/warnings.rb#49 +class Herb::Warnings::UnkeyedCollectionWarning < ::Herb::Warnings::Warning + # : (Location, ?String?, ?tag_name: String?) -> void + # + # @return [UnkeyedCollectionWarning] a new instance of UnkeyedCollectionWarning + # + # source://herb//lib/herb/warnings.rb#54 + def initialize(location, expression = T.unsafe(nil), tag_name: T.unsafe(nil)); end + + # : String? + # + # source://herb//lib/herb/warnings.rb#50 + def expression; end + + # : String? + # + # source://herb//lib/herb/warnings.rb#51 + def tag_name; end +end + +# : type serialized_warning = { +# | type: String, +# | location: serialized_location?, +# | message: String +# | } +# +# source://herb//lib/herb/warnings.rb#11 +class Herb::Warnings::Warning + # : (String, Location, String) -> void + # + # @return [Warning] a new instance of Warning + # + # source://herb//lib/herb/warnings.rb#17 + def initialize(type, location, message); end + + # : () -> String + # + # source://herb//lib/herb/warnings.rb#33 + def class_name; end + + # : Location? + # + # source://herb//lib/herb/warnings.rb#13 + def location; end + + # : String + # + # source://herb//lib/herb/warnings.rb#14 + def message; end + + # : () -> serialized_warning + # + # source://herb//lib/herb/warnings.rb#24 + def to_hash; end + + # : (?untyped) -> String + # + # source://herb//lib/herb/warnings.rb#43 + def to_json(state = T.unsafe(nil)); end + + # : String + # + # source://herb//lib/herb/warnings.rb#12 + def type; end + + # : () -> String + # + # source://herb//lib/herb/warnings.rb#38 + def warning_name; end +end diff --git a/spec/query_packwerk/file_cache_spec.rb b/spec/query_packwerk/file_cache_spec.rb new file mode 100644 index 0000000..6ba6da7 --- /dev/null +++ b/spec/query_packwerk/file_cache_spec.rb @@ -0,0 +1,71 @@ +# typed: false +# frozen_string_literal: true + +RSpec.describe QueryPackwerk::FileCache do + subject(:file_cache) { described_class.new } + + def sources_in(file_name) + file_cache + .get_full_sources(file_name: file_name, class_name: '::Billing::Invoice') + .map { |node| [node.loc.line, node.source] } + end + + describe '#get_full_sources' do + it 'finds references in the Ruby code of an ERB template, on their template lines' do + write_file('app/views/invoices/show.html.erb', <<~ERB) +
+ <%# Billing::Invoice in a comment is not a reference %> <%= Billing::Invoice.count %> +

Escaped: <%%= Billing::Invoice %>

+ <% if Billing::Invoice.overdue?(@account) %> +

<%= Billing::Invoice.for(@account).total %>

+ <% end %> + <%= form_with model: @account do |form| %> + <%= form.text_field :name %> <%= Billing::Invoice.statuses.first %> + <% end %> +
+ ERB + + expect(sources_in('app/views/invoices/show.html.erb')).to eq( + [ + [2, 'Billing::Invoice.count'], + [4, 'Billing::Invoice.overdue?(@account)'], + [5, 'Billing::Invoice.for(@account).total'], + [8, 'Billing::Invoice.statuses.first'] + ] + ) + end + + it 'finds nothing in an ERB template without Ruby code' do + write_file('app/views/pages/about.html.erb', "

About

\n") + + sources = nil + expect { sources = sources_in('app/views/pages/about.html.erb') }.not_to output.to_stderr + expect(sources).to eq([]) + end + + it 'finds nothing in a Ruby file with only comments' do + write_file('app/models/invoice.rb', "# frozen_string_literal: true\n") + + sources = nil + expect { sources = sources_in('app/models/invoice.rb') }.not_to output.to_stderr + expect(sources).to eq([]) + end + + it 'warns that it found nothing in a file it could not parse' do + write_file('app/models/invoice.rb', "Billing::Invoice.find(\n") + + sources = nil + expect { sources = sources_in('app/models/invoice.rb') } + .to output("Could not parse app/models/invoice.rb, so its violations are not included\n").to_stderr + expect(sources).to eq([]) + end + + %w[app/views/invoices/show.xml.builder billing.gemspec config.ru Gemfile Rakefile].each do |file_name| + it "finds references in #{file_name}" do + write_file(file_name, "Billing::Invoice.find(1)\n") + + expect(sources_in(file_name)).to eq([[1, 'Billing::Invoice.find(1)']]) + end + end + end +end diff --git a/spec/query_packwerk/violation_spec.rb b/spec/query_packwerk/violation_spec.rb new file mode 100644 index 0000000..02592cb --- /dev/null +++ b/spec/query_packwerk/violation_spec.rb @@ -0,0 +1,43 @@ +# typed: false +# frozen_string_literal: true + +RSpec.describe QueryPackwerk::Violation do + include_context 'pseudo packs' + + context 'when the violating file is an ERB template' do + subject(:violation) do + described_class.new( + original_violation: ParsePackwerk::Violation.new( + type: 'privacy', + to_package_name: package_name, + class_name: '::HoneyProductionNectar', + files: [template] + ), + consuming_pack: ParsePackwerk.find(package_name) + ) + end + + let(:template) { 'packs/hive_dashboard/app/views/apiaries/show.html.erb' } + + before do + write_file(template, <<~ERB) +
+

<%= @apiary.name %>

+ <% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %> +

<%= HoneyProductionNectar.as_of_now.find_by(apiary_id: @apiary.id).volume %>

+ <% end %> +
+ ERB + end + + it 'counts each reference' do + expect(violation.count).to eq(2) + end + + it 'shows context from the template rather than the extracted Ruby' do + template_line = a_string_including('<% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %>') + + expect(violation.sources_with_contexts.values.flatten).to match([template_line, template_line]) + end + end +end From d23cc8e098a4239aa991f5d0641ec4bf434e7138 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 11 Oct 2026 17:09:25 -0700 Subject: [PATCH 2/5] Find a constant that is a file's only code, and say why a file can't be parsed - Search the root of a file's AST too. A template whose only Ruby is a bare constant, like `<%= Billing::Invoice %>`, had no references. - Include the line and message of the first syntax error in the "Could not parse" warning. In ERB templates the line is the template line, so the problem can be found without seeing the extracted Ruby. - Cover .rake, non-HTML ERB, missing files, files packwerk doesn't parse, and warning only once per file. --- lib/query_packwerk/file_cache.rb | 14 ++++-- spec/query_packwerk/file_cache_spec.rb | 68 +++++++++++++++++++------- 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/lib/query_packwerk/file_cache.rb b/lib/query_packwerk/file_cache.rb index efd6f28..31bd69d 100644 --- a/lib/query_packwerk/file_cache.rb +++ b/lib/query_packwerk/file_cache.rb @@ -66,9 +66,9 @@ def set(cache_name, key:, value:) def get_file_ast(file_name) @file_ast_cache[file_name] ||= begin source = processed_source(ruby_source(file_name)) - warn "Could not parse #{file_name}, so its violations are not included" unless source.valid_syntax? + warn_unparseable(file_name, source) unless source.valid_syntax? - # Source with no code (only comments, or a template that's only HTML) has no AST either + # The AST is also nil for source with no code, like a template that's only HTML source.ast || ast_from('x') end end @@ -92,7 +92,7 @@ def get_all_const_occurrences(file_name:, class_name:) absolute_const_node = ast_from(class_name) relative_const_node = ast_from(class_name.delete_prefix('::')) - @file_const_cache[const_key] = get_file_ast(file_name).each_descendant.select do |node| + @file_const_cache[const_key] = get_file_ast(file_name).each_node.select do |node| next false unless node.const_type? node == absolute_const_node || node == relative_const_node @@ -155,6 +155,14 @@ def processed_source(string) RuboCop::ProcessedSource.new(string, RUBY_VERSION.to_f) end + sig { params(file_name: String, source: RuboCop::ProcessedSource).void } + def warn_unparseable(file_name, source) + error = source.diagnostics.find { |diagnostic| diagnostic.level == :error } + location = error ? "#{file_name}:#{error.location.line} (#{error.message})" : file_name + + warn "Could not parse #{location}, so its violations are not included" + end + # Turns a string into a Ruby AST sig { params(string: String).returns(RuboCop::AST::Node) } def ast_from(string) diff --git a/spec/query_packwerk/file_cache_spec.rb b/spec/query_packwerk/file_cache_spec.rb index 6ba6da7..96913b3 100644 --- a/spec/query_packwerk/file_cache_spec.rb +++ b/spec/query_packwerk/file_cache_spec.rb @@ -4,9 +4,9 @@ RSpec.describe QueryPackwerk::FileCache do subject(:file_cache) { described_class.new } - def sources_in(file_name) + def sources_in(file_name, class_name: '::Billing::Invoice') file_cache - .get_full_sources(file_name: file_name, class_name: '::Billing::Invoice') + .get_full_sources(file_name: file_name, class_name: class_name) .map { |node| [node.loc.line, node.source] } end @@ -35,37 +35,71 @@ def sources_in(file_name) ) end - it 'finds nothing in an ERB template without Ruby code' do + %w[app/views/invoices/show.js.erb app/views/invoices/show.erb].each do |file_name| + it "finds references in #{file_name}" do + write_file(file_name, "var count = <%= Billing::Invoice.count %>;\n") + + expect(sources_in(file_name)).to eq([[1, 'Billing::Invoice.count']]) + end + end + + it 'finds a reference that is the only code in a template' do + write_file('app/views/invoices/_name.html.erb', "

<%= Billing::Invoice %>

\n") + + expect(sources_in('app/views/invoices/_name.html.erb')).to eq([[1, 'Billing::Invoice']]) + end + + it 'finds nothing, without a warning, in an ERB template without Ruby code' do write_file('app/views/pages/about.html.erb', "

About

\n") - sources = nil - expect { sources = sources_in('app/views/pages/about.html.erb') }.not_to output.to_stderr - expect(sources).to eq([]) + expect { sources_in('app/views/pages/about.html.erb') }.not_to output.to_stderr + expect(sources_in('app/views/pages/about.html.erb')).to eq([]) end - it 'finds nothing in a Ruby file with only comments' do + it 'finds nothing, without a warning, in a Ruby file with only comments' do write_file('app/models/invoice.rb', "# frozen_string_literal: true\n") - sources = nil - expect { sources = sources_in('app/models/invoice.rb') }.not_to output.to_stderr - expect(sources).to eq([]) + expect { sources_in('app/models/invoice.rb') }.not_to output.to_stderr + expect(sources_in('app/models/invoice.rb')).to eq([]) end - it 'warns that it found nothing in a file it could not parse' do - write_file('app/models/invoice.rb', "Billing::Invoice.find(\n") + %w[app/models/invoice.rb app/views/invoices/show.html.erb].each do |file_name| + it "finds nothing, without a warning, when #{file_name} does not exist" do + expect { sources_in(file_name) }.not_to output.to_stderr + expect(sources_in(file_name)).to eq([]) + end + end + + it 'warns, once, that it found nothing in a file it could not parse' do + write_file('app/views/invoices/show.html.erb', <<~ERB) + <% if Billing::Invoice.overdue?(@account) %> +

Overdue

+ <% end %> + <% end %> + ERB - sources = nil - expect { sources = sources_in('app/models/invoice.rb') } - .to output("Could not parse app/models/invoice.rb, so its violations are not included\n").to_stderr - expect(sources).to eq([]) + expect do + sources_in('app/views/invoices/show.html.erb') + sources_in('app/views/invoices/show.html.erb', class_name: '::Billing::Payment') + end.to output(%r{\ACould not parse app/views/invoices/show\.html\.erb:4 \(.+\), so its violations are not included\n\z}) + .to_stderr + expect(sources_in('app/views/invoices/show.html.erb')).to eq([]) end - %w[app/views/invoices/show.xml.builder billing.gemspec config.ru Gemfile Rakefile].each do |file_name| + %w[ + lib/tasks/billing.rake app/views/invoices/show.xml.builder billing.gemspec config.ru Gemfile Rakefile + ].each do |file_name| it "finds references in #{file_name}" do write_file(file_name, "Billing::Invoice.find(1)\n") expect(sources_in(file_name)).to eq([[1, 'Billing::Invoice.find(1)']]) end end + + it 'finds nothing in a file that packwerk does not parse' do + write_file('Gemfile.lock', "Billing::Invoice.find(1)\n") + + expect(sources_in('Gemfile.lock')).to eq([]) + end end end From cdf3df030aa1783df9d9dff5296d6f264f57ed22 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 11 Oct 2026 17:09:25 -0700 Subject: [PATCH 3/5] Show the right lines in sources_with_contexts The line number was used as a 0-based index, so the window ran from 2 lines before the reference to 4 after, and the label didn't match the lines shown. For a reference in the first 2 lines of a file, the start went negative and wrapped to the end of the file, showing unrelated lines or none. ERB partials often reference constants near the top, so this would come up a lot with ERB support. Also pass the offsets through from Violations#sources_with_contexts, which ignored them. --- lib/query_packwerk/violation.rb | 8 +++-- lib/query_packwerk/violations.rb | 4 ++- spec/query_packwerk/violation_spec.rb | 48 +++++++++++++++++++++++--- spec/query_packwerk/violations_spec.rb | 17 +++++++++ 4 files changed, 68 insertions(+), 9 deletions(-) diff --git a/lib/query_packwerk/violation.rb b/lib/query_packwerk/violation.rb index 2aa586a..1d6d608 100644 --- a/lib/query_packwerk/violation.rb +++ b/lib/query_packwerk/violation.rb @@ -166,13 +166,15 @@ def sources_with_contexts(start_offset: 3, end_offset: 3) load_cache! file_sources = files.flat_map do |file_name| + lines = @file_cache.get_file(file_name).lines + @file_cache.get_full_sources(file_name: file_name, class_name: class_name).map do |s| line_number = s.loc.line - start_pos = line_number - start_offset - end_pos = line_number + end_offset + start_pos = [line_number - start_offset, 1].max + end_pos = [line_number + end_offset, lines.size].min location = "#{file_name}:#{s.loc.line} (L#{start_pos}..#{end_pos})" - context = @file_cache.get_file(file_name).lines.slice(start_pos..end_pos) + context = lines[(start_pos - 1)...end_pos] full_context = unindent((context || ['']).join) [@file_cache.anonymize_arguments(s.source), "> #{location}\n\n#{full_context}"] diff --git a/lib/query_packwerk/violations.rb b/lib/query_packwerk/violations.rb index f12dda4..86ed7cd 100644 --- a/lib/query_packwerk/violations.rb +++ b/lib/query_packwerk/violations.rb @@ -192,7 +192,9 @@ def anonymous_sources_with_locations def sources_with_contexts(start_offset: 3, end_offset: 3) load_sources! - deep_merge_hash_groups(@original_collection) { |v| [v.class_name, v.sources_with_contexts] } + deep_merge_hash_groups(@original_collection) do |v| + [v.class_name, v.sources_with_contexts(start_offset:, end_offset:)] + end end sig { params(start_offset: Integer, end_offset: Integer).returns(String) } diff --git a/spec/query_packwerk/violation_spec.rb b/spec/query_packwerk/violation_spec.rb index 02592cb..ab8e562 100644 --- a/spec/query_packwerk/violation_spec.rb +++ b/spec/query_packwerk/violation_spec.rb @@ -18,9 +18,8 @@ end let(:template) { 'packs/hive_dashboard/app/views/apiaries/show.html.erb' } - - before do - write_file(template, <<~ERB) + let(:template_source) do + <<~ERB

<%= @apiary.name %>

<% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %> @@ -30,14 +29,53 @@ ERB end + before do + write_file(template, template_source) + end + it 'counts each reference' do expect(violation.count).to eq(2) end it 'shows context from the template rather than the extracted Ruby' do - template_line = a_string_including('<% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %>') + expect(violation.sources_with_contexts.values.flatten) + .to all(include('<% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %>')) + end + + it 'shows the lines around each reference' do + expect(violation.sources_with_contexts(start_offset: 1, end_offset: 1).values.flatten).to eq( + [ + <<~CONTEXT, + > #{template}:3 (L2..4) + +

<%= @apiary.name %>

+ <% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %> +

<%= HoneyProductionNectar.as_of_now.find_by(apiary_id: @apiary.id).volume %>

+ CONTEXT + <<~CONTEXT + > #{template}:4 (L3..5) + + <% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %> +

<%= HoneyProductionNectar.as_of_now.find_by(apiary_id: @apiary.id).volume %>

+ <% end %> + CONTEXT + ] + ) + end + + context 'when a reference is near the top of the template' do + let(:template_source) do + <<~ERB +

<%= HoneyProductionNectar.as_of_now.volume %>

+

Updated daily

+

Volumes are in liters

+
Hive Dashboard
+ ERB + end - expect(violation.sources_with_contexts.values.flatten).to match([template_line, template_line]) + it 'shows context from the top of the template' do + expect(violation.sources_with_contexts.values.flatten).to eq(["> #{template}:1 (L1..4)\n\n#{template_source}"]) + end end end end diff --git a/spec/query_packwerk/violations_spec.rb b/spec/query_packwerk/violations_spec.rb index 2c56e19..3a812d3 100644 --- a/spec/query_packwerk/violations_spec.rb +++ b/spec/query_packwerk/violations_spec.rb @@ -79,4 +79,21 @@ ) end end + + describe '#sources_with_contexts' do + it 'shows the given number of lines around each source' do + contexts = described_class.all.sources_with_contexts(start_offset: 1, end_offset: 0) + + expect(contexts['::Backfills::BackfillPollinationCoveredPeriodDates']).to eq( + 'Backfills::BackfillPollinationCoveredPeriodDates.run!' => [ + <<~CONTEXT + > db/data/20210309211702_backfill_pollination_covered_period_dates.rb:3 (L2..3) + + def up + Backfills::BackfillPollinationCoveredPeriodDates.run! + CONTEXT + ] + ) + end + end end From 6c85769f943d7eb6d777e93daff386ba485f13f5 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 11 Oct 2026 17:09:26 -0700 Subject: [PATCH 4/5] Bump version to 0.1.26 --- Gemfile.lock | 2 +- lib/query_packwerk/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8af3398..8a7ab57 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - query_packwerk (0.1.25) + query_packwerk (0.1.26) coderay herb (>= 0.9) packwerk diff --git a/lib/query_packwerk/version.rb b/lib/query_packwerk/version.rb index 314ad8c..f99d9f8 100644 --- a/lib/query_packwerk/version.rb +++ b/lib/query_packwerk/version.rb @@ -2,5 +2,5 @@ # frozen_string_literal: true module QueryPackwerk - VERSION = '0.1.25' + VERSION = '0.1.26' end From 99bf26c274b5261c92fe83a4d58854642d43cffc Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 11 Oct 2026 17:15:59 -0700 Subject: [PATCH 5/5] Check that each ERB reference gets a context `all` passes on an empty array, so the example also passed on main, where ERB templates had no contexts at all. --- spec/query_packwerk/violation_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/query_packwerk/violation_spec.rb b/spec/query_packwerk/violation_spec.rb index ab8e562..3f7d14f 100644 --- a/spec/query_packwerk/violation_spec.rb +++ b/spec/query_packwerk/violation_spec.rb @@ -38,8 +38,10 @@ end it 'shows context from the template rather than the extracted Ruby' do - expect(violation.sources_with_contexts.values.flatten) - .to all(include('<% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %>')) + contexts = violation.sources_with_contexts.values.flatten + + expect(contexts.size).to eq(2) + expect(contexts).to all(include('<% if HoneyProductionNectar.as_of_now.exists?(apiary_id: @apiary.id) %>')) end it 'shows the lines around each reference' do