# typed: true

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

module Bootsnap
  extend ::Bootsnap

  def bundler?; end

  class << self
    def _instrument(event, path); end
    def absolute_path?(path); end
    def default_setup; end
    def instrumentation=(callback); end
    def log!; end
    def logger; end
    def logger=(logger); end
    def rb_get_path(fname); end
    def setup(cache_dir:, development_mode: T.unsafe(nil), load_path_cache: T.unsafe(nil), ignore_directories: T.unsafe(nil), readonly: T.unsafe(nil), compile_cache_iseq: T.unsafe(nil), compile_cache_yaml: T.unsafe(nil), compile_cache_json: T.unsafe(nil)); end
    def unload_cache!; end
  end
end

module Bootsnap::CompileCache
  class << self
    def permission_error(path); end
    def setup(cache_dir:, iseq:, yaml:, json:, readonly: T.unsafe(nil)); end
    def supported?; end
  end
end

class Bootsnap::CompileCache::Error < ::StandardError; end
class Bootsnap::CompileCache::PermissionError < ::Bootsnap::CompileCache::Error; end
Bootsnap::CompileCache::UNCOMPILABLE = T.let(T.unsafe(nil), BasicObject)

module Bootsnap::ExplicitRequire
  class << self
    def from_archdir(feature); end
    def from_rubylibdir(feature); end
    def from_self(feature); end
    def with_gems(*gems); end
  end
end

Bootsnap::ExplicitRequire::ARCHDIR = T.let(T.unsafe(nil), String)
Bootsnap::ExplicitRequire::DLEXT = T.let(T.unsafe(nil), String)
Bootsnap::ExplicitRequire::RUBYLIBDIR = T.let(T.unsafe(nil), String)
class Bootsnap::InvalidConfiguration < ::StandardError; end

module Bootsnap::LoadPathCache
  class << self
    def enabled?; end
    def load_path_cache; end
    def loaded_features_index; end
    def setup(cache_path:, development_mode:, ignore_directories:, readonly: T.unsafe(nil)); end
    def supported?; end
    def unload!; end
  end
end

Bootsnap::LoadPathCache::CACHED_EXTENSIONS = T.let(T.unsafe(nil), Array)

class Bootsnap::LoadPathCache::Cache
  def initialize(store, path_obj, development_mode: T.unsafe(nil)); end

  def find(feature); end
  def load_dir(dir); end
  def push_paths(sender, *paths); end
  def reinitialize(path_obj = T.unsafe(nil)); end
  def unshift_paths(sender, *paths); end

  private

  def dir_changed?; end
  def expand_path(feature); end
  def maybe_append_extension(feature); end
  def now; end
  def push_paths_locked(*paths); end
  def search_index(feature); end
  def stale?; end
  def try_ext(feature); end
  def try_index(feature); end
  def unshift_paths_locked(*paths); end
end

Bootsnap::LoadPathCache::Cache::AGE_THRESHOLD = T.let(T.unsafe(nil), Integer)
Bootsnap::LoadPathCache::Cache::BUILTIN_FEATURES = T.let(T.unsafe(nil), Hash)

module Bootsnap::LoadPathCache::ChangeObserver
  class << self
    def register(arr, observer); end
    def unregister(arr); end
  end
end

module Bootsnap::LoadPathCache::ChangeObserver::ArrayMixin
  def <<(entry); end
  def []=(*args, &block); end
  def append(*entries); end
  def clear(*args, &block); end
  def collect!(*args, &block); end
  def compact!(*args, &block); end
  def concat(entries); end
  def delete(*args, &block); end
  def delete_at(*args, &block); end
  def delete_if(*args, &block); end
  def fill(*args, &block); end
  def flatten!(*args, &block); end
  def insert(*args, &block); end
  def keep_if(*args, &block); end
  def map!(*args, &block); end
  def pop(*args, &block); end
  def prepend(*entries); end
  def push(*entries); end
  def reject!(*args, &block); end
  def replace(*args, &block); end
  def reverse!(*args, &block); end
  def rotate!(*args, &block); end
  def select!(*args, &block); end
  def shift(*args, &block); end
  def shuffle!(*args, &block); end
  def slice!(*args, &block); end
  def sort!(*args, &block); end
  def sort_by!(*args, &block); end
  def uniq!(*args); end
  def unshift(*entries); end
end

Bootsnap::LoadPathCache::DLEXT = T.let(T.unsafe(nil), String)
Bootsnap::LoadPathCache::DL_EXTENSIONS = T.let(T.unsafe(nil), Array)
Bootsnap::LoadPathCache::DOT_RB = T.let(T.unsafe(nil), String)
Bootsnap::LoadPathCache::DOT_SO = T.let(T.unsafe(nil), String)
Bootsnap::LoadPathCache::FALLBACK_SCAN = T.let(T.unsafe(nil), BasicObject)

class Bootsnap::LoadPathCache::LoadedFeaturesIndex
  def initialize; end

  def cursor(short); end
  def identify(short, cursor); end
  def key?(feature); end
  def purge(feature); end
  def purge_multi(features); end
  def register(short, long); end

  private

  def extension_elidable?(feature); end
  def strip_extension_if_elidable(feature); end
end

Bootsnap::LoadPathCache::LoadedFeaturesIndex::STRIP_EXTENSION = T.let(T.unsafe(nil), Regexp)

class Bootsnap::LoadPathCache::Path
  def initialize(path, real: T.unsafe(nil)); end

  def entries_and_dirs(store); end
  def expanded_path; end
  def non_directory?; end
  def path; end
  def relative?; end
  def stable?; end
  def to_realpath; end
  def volatile?; end

  private

  def latest_mtime(path, dirs); end
  def scan!; end
  def stability; end
end

Bootsnap::LoadPathCache::Path::RUBY_LIBDIR = T.let(T.unsafe(nil), String)
Bootsnap::LoadPathCache::Path::RUBY_SITEDIR = T.let(T.unsafe(nil), String)
Bootsnap::LoadPathCache::Path::STABLE = T.let(T.unsafe(nil), Symbol)
Bootsnap::LoadPathCache::Path::VOLATILE = T.let(T.unsafe(nil), Symbol)

module Bootsnap::LoadPathCache::PathScanner
  class << self
    def call(path); end
    def ignored_directories; end
    def ignored_directories=(_arg0); end
    def os_path(path); end
    def walk(absolute_dir_path, relative_dir_path, &block); end
  end
end

Bootsnap::LoadPathCache::PathScanner::ALTERNATIVE_NATIVE_EXTENSIONS_PATTERN = T.let(T.unsafe(nil), Regexp)
Bootsnap::LoadPathCache::PathScanner::BUNDLE_PATH = T.let(T.unsafe(nil), String)
Bootsnap::LoadPathCache::PathScanner::NORMALIZE_NATIVE_EXTENSIONS = T.let(T.unsafe(nil), TrueClass)
Bootsnap::LoadPathCache::PathScanner::REQUIRABLE_EXTENSIONS = T.let(T.unsafe(nil), Array)
Bootsnap::LoadPathCache::SLASH = T.let(T.unsafe(nil), String)

class Bootsnap::LoadPathCache::Store
  def initialize(store_path, readonly: T.unsafe(nil)); end

  def fetch(key); end
  def get(key); end
  def set(key, value); end
  def transaction; end

  private

  def commit_transaction; end
  def default_data; end
  def dump_data; end
  def load_data; end
  def mark_for_mutation!; end
  def mkdir_p(path); end
end

Bootsnap::LoadPathCache::Store::CURRENT_VERSION = T.let(T.unsafe(nil), String)
class Bootsnap::LoadPathCache::Store::NestedTransactionError < ::StandardError; end
class Bootsnap::LoadPathCache::Store::SetOutsideTransactionNotAllowed < ::StandardError; end
Bootsnap::LoadPathCache::Store::VERSION_KEY = T.let(T.unsafe(nil), String)
Bootsnap::VERSION = T.let(T.unsafe(nil), String)
