class Travis::CLI::Lint

def run(file = nil)

def run(file = nil)
  file ||= '.travis.yml' if $stdin.tty? || $stdin.eof?
  if file && (file != '-')
    debug "reading #{file}"
    error "file does not exist: #{color(file, :bold)}" unless File.exist? file
    error "cannot read #{color(file, :bold)}"          unless File.readable? file
    content = File.read(file)
  else
    debug 'reading stdin'
    file    = 'STDIN'
    content = $stdin.read
  end
  begin
    YAML.load(content)
  rescue Psych::SyntaxError => e
    error "#{file} is not valid YAML: #{e.message}"
  end
  lint = session.lint(content)
  unless quiet?
    if lint.ok?
      say 'valid', color("Hooray, #{file} looks %s :)", :success)
    else
      say "Warnings for #{color(file, :info)}:"
      lint.warnings.each do |warning|
        say "#{color('[x]', %i[red bold])} "
        if warning.key.any?
          say [
            color('in ', :info),
            color(warning.key.join('.'), %i[info bold underline]),
            color(' section:', :info), ' '
          ].join
        end
        say warning.message.gsub(/"(.*?)"/) { color(::Regexp.last_match(1), %i[info important]) }
      end
    end
  end
  exit 1 if lint.warnings? && exit_code?
end