# typed: true

# DO NOT EDIT MANUALLY
# This is an autogenerated file for types exported from the `require-hooks` gem.
# Please instead update this file by running `bin/tapioca gem require-hooks`.


# source://require-hooks//lib/require-hooks/api.rb#3
module RequireHooks
  class << self
    # Define a block to wrap the code loading.
    # The return value MUST be a result of calling the passed block.
    # For example, you can use such hooks for instrumentation, debugging purposes.
    #
    #    RequireHooks.around_load do |path, &block|
    #      puts "Loading #{path}"
    #      block.call.tap { puts "Loaded #{path}" }
    #    end
    #
    # source://require-hooks//lib/require-hooks/api.rb#71
    def around_load(patterns: T.unsafe(nil), exclude_patterns: T.unsafe(nil), &block); end

    # source://require-hooks//lib/require-hooks/api.rb#107
    def context_for(path); end

    # This hook should be used to manually compile byte code to be loaded by the VM.
    # The arguments are (path, source = nil), where source is only defined if transformations took place.
    # Otherwise, you MUST read the source code from the file yourself.
    #
    # The return value MUST be either nil (continue to the next hook or default behavior) or a platform-specific bytecode object (e.g., RubyVM::InstructionSequence).
    #
    #   RequireHooks.hijack_load do |path, source|
    #     source ||= File.read(path)
    #     if defined?(RubyVM::InstructionSequence)
    #       RubyVM::InstructionSequence.compile(source)
    #     elsif defined?(JRUBY_VERSION)
    #       JRuby.compile(source)
    #     end
    #   end
    #
    # source://require-hooks//lib/require-hooks/api.rb#103
    def hijack_load(patterns: T.unsafe(nil), exclude_patterns: T.unsafe(nil), &block); end

    # Returns the value of attribute print_warnings.
    #
    # source://require-hooks//lib/require-hooks/api.rb#61
    def print_warnings; end

    # Sets the attribute print_warnings
    #
    # @param value the value to set the attribute print_warnings to.
    #
    # source://require-hooks//lib/require-hooks/api.rb#61
    def print_warnings=(_arg0); end

    # Define hooks to perform source-to-source transformations.
    # The return value MUST be either String (new source code) or nil (indicating that no transformations were performed).
    #
    # NOTE: The second argument (`source`) MAY be nil, indicating that no transformer tried to transform the source code.
    #
    #
    #    RequireHooks.source_transform do |path, source|
    #    end
    #
    # source://require-hooks//lib/require-hooks/api.rb#85
    def source_transform(patterns: T.unsafe(nil), exclude_patterns: T.unsafe(nil), &block); end
  end
end

# source://require-hooks//lib/require-hooks/api.rb#8
class RequireHooks::Context
  # @return [Context] a new instance of Context
  #
  # source://require-hooks//lib/require-hooks/api.rb#9
  def initialize(around_load, source_transform, hijack_load); end

  # @return [Boolean]
  #
  # source://require-hooks//lib/require-hooks/api.rb#15
  def empty?; end

  # @return [Boolean]
  #
  # source://require-hooks//lib/require-hooks/api.rb#23
  def hijack?; end

  # source://require-hooks//lib/require-hooks/api.rb#37
  def perform_source_transform(path); end

  # source://require-hooks//lib/require-hooks/api.rb#27
  def run_around_load_callbacks(path); end

  # @return [Boolean]
  #
  # source://require-hooks//lib/require-hooks/api.rb#19
  def source_transform?; end

  # source://require-hooks//lib/require-hooks/api.rb#49
  def try_hijack_load(path, source); end
end

# source://require-hooks//lib/require-hooks/mode/load_iseq.rb#4
module RequireHooks::LoadIseq
  # source://require-hooks//lib/require-hooks/mode/load_iseq.rb#5
  def load_iseq(path); end
end

class RubyVM::InstructionSequence
  extend ::RequireHooks::LoadIseq
end
