class Steep::Drivers::Annotations

def initialize(stdout:, stderr:)

def initialize(stdout:, stderr:)
  @stdout = stdout
  @stderr = stderr
  @command_line_patterns = []
  @labeling = ASTUtils::Labeling.new
end

def run

def run
  project = load_config()
  loader = Project::FileLoader.new(project: project)
  loader.load_sources(command_line_patterns)
  loader.load_signatures()
  project.targets.each do |target|
    Steep.logger.tagged "target=#{target.name}" do
      target.load_signatures(validate: false) do |_, subtyping, _|
        case (status = target.status)
        when nil     # status set on error cases
          target.source_files.each_value do |file|
            file.parse(subtyping.factory) do |source|
              source.each_annotation.sort_by {|node, _| [node.loc.expression.begin_pos, node.loc.expression.end_pos] }.each do |node, annotations|
                loc = node.loc
                stdout.puts "#{file.path}:#{loc.line}:#{loc.column}:#{node.type}:\t#{node.loc.expression.source.lines.first}"
                annotations.each do |annotation|
                  stdout.puts "  #{annotation.location.source}"
                end
              end
            end
          end
        when Project::Target::SignatureSyntaxErrorStatus
          printer = SignatureErrorPrinter.new(stdout: stdout, stderr: stderr)
          printer.print_syntax_errors(status.errors)
        when Project::Target::SignatureValidationErrorStatus
          printer = SignatureErrorPrinter.new(stdout: stdout, stderr: stderr)
          printer.print_semantic_errors(status.errors)
        end
      end
    end
  end
  project.targets.each do |target|
    Steep.logger.tagged "target=#{target.name}" do
    end
  end
  project.targets.all? {|target| !target.status } ? 0 : 1
end