class Steep::Drivers::Validate

def initialize(signature_dirs:, stdout:, stderr:)

def initialize(signature_dirs:, stdout:, stderr:)
  @signature_dirs = signature_dirs
  @stdout = stdout
  @stderr = stderr
  self.verbose = false
end

def run

def run
  Steep.logger.level = Logger::DEBUG if verbose
  project = Project.new
  signature_dirs.each do |path|
    each_file_in_path(".rbi", path) do |file_path|
      file = Project::SignatureFile.new(path: file_path)
      file.content = file_path.read
      project.signature_files[file_path] = file
    end
  end
  project.type_check
  case project.signature
  when Project::SignatureHasError
    project.signature.errors.each do |error|
      case error
      when Interface::Instantiated::InvalidMethodOverrideError
        stdout.puts "😱 #{error.message}"
        error.result.trace.each do |s, t|
          case s
          when Interface::Method
            stdout.puts "  #{s.name}(#{s.type_name}) <: #{t.name}(#{t.type_name})"
          when Interface::MethodType
            stdout.puts "  #{s} <: #{t} (#{s.location&.name||"?"}:#{s.location&.start_line||"?"})"
          else
            stdout.puts "  #{s} <: #{t}"
          end
        end
        stdout.puts "  🚨 #{error.result.error.message}"
      when Interface::Instantiated::InvalidIvarOverrideError
        stdout.puts "😱 #{error.message}"
      else
        stdout.puts "😱 #{error.inspect}"
      end
    end
    1
  else
    0
  end
end