# File lib/puppet-lint/bin.rb, line 21
  def run
    opts = PuppetLint::OptParser.build

    begin
      opts.parse!(@args)
    rescue OptionParser::InvalidOption
      puts "puppet-lint: #{$!.message}"
      puts "puppet-lint: try 'puppet-lint --help' for more information"
      return 1
    end

    if PuppetLint.configuration.display_version
      puts "puppet-lint #{PuppetLint::VERSION}"
      return 0
    end

    if @args[0].nil?
      puts "puppet-lint: no file specified"
      puts "puppet-lint: try 'puppet-lint --help' for more information"
      return 1
    end

    begin
      path = @args[0]
      if File.directory?(path)
        path = Dir.glob("#{path}/**/*.pp")
      else
        path = @args
      end

      if path.length > 1
        PuppetLint.configuration.with_filename = true
      end

      return_val = 0
      path.each do |f|
        l = PuppetLint.new
        l.file = f
        l.run
        l.print_problems
        if l.errors? or (l.warnings? and PuppetLint.configuration.fail_on_warnings)
          return_val = 1
        end

        if PuppetLint.configuration.fix && !l.problems.any? { |e| e[:check] == :syntax }
          File.open(f, 'w') do |fd|
            fd.write l.manifest
          end
        end
      end
      return return_val

    rescue PuppetLint::NoCodeError
      puts "puppet-lint: no file specified or specified file does not exist"
      puts "puppet-lint: try 'puppet-lint --help' for more information"
      return 1
    end
  end