class Tapioca::Loaders::Dsl

def initialize(tapioca_path:, eager_load: true, app_root: ".", halt_upon_load_error: true)

def initialize(tapioca_path:, eager_load: true, app_root: ".", halt_upon_load_error: true)
  super()
  @tapioca_path = tapioca_path
  @eager_load = eager_load
  @app_root = app_root
  @halt_upon_load_error = halt_upon_load_error
end

def load

def load
  load_dsl_extensions
  load_application
  load_dsl_compilers
end

def load_application(

def load_application(
  tapioca_path:,
  eager_load: true,
  app_root: ".",
  halt_upon_load_error: true,
  lsp_addon: false
)
  loader = new(
    tapioca_path: tapioca_path,
    eager_load: eager_load,
    app_root: app_root,
    halt_upon_load_error: halt_upon_load_error,
  )
  if lsp_addon
    loader.load_dsl_extensions_and_compilers
  else
    loader.load
  end
end

def load_application

def load_application
  say("Loading Rails application... ")
  load_rails_application(
    environment_load: true,
    eager_load: @eager_load,
    app_root: @app_root,
    halt_upon_load_error: @halt_upon_load_error,
  )
  say("Done", :green)
end

def load_dsl_compilers

def load_dsl_compilers
  say("Loading DSL compiler classes... ")
  # Load all built-in compilers before any custom compilers
  Dir.glob("#{Tapioca::LIB_ROOT_DIR}/tapioca/dsl/compilers/*.rb").each do |compiler|
    require File.expand_path(compiler)
  end
  # Load all custom compilers exported from gems
  ::Gem.find_files("tapioca/dsl/compilers/*.rb").each do |compiler|
    require File.expand_path(compiler)
  end
  # Load all custom compilers from the project
  Dir.glob([
    "#{@tapioca_path}/generators/**/*.rb", # TODO: Here for backcompat, remove later
    "#{@tapioca_path}/compilers/**/*.rb",
  ]).each do |compiler|
    require File.expand_path(compiler)
  end
  say("Done", :green)
end

def load_dsl_extensions

def load_dsl_extensions
  say("Loading DSL extension classes... ")
  Dir.glob(["#{@tapioca_path}/extensions/**/*.rb"]).each do |extension|
    require File.expand_path(extension)
  end
  ::Gem.find_files("tapioca/dsl/extensions/*.rb").each do |extension|
    require File.expand_path(extension)
  end
  say("Done", :green)
end

def load_dsl_extensions_and_compilers

def load_dsl_extensions_and_compilers
  load_dsl_extensions
  load_dsl_compilers
end