def run(args = ARGV)
      @options, paths = Options.new.parse(args)

      if @options[:init]
        init_dotfile
      else
        validate_options_vs_config
        act_on_options
        apply_default_formatter
        execute_runners(paths)
      end
    rescue ConfigNotFoundError, IncorrectCopNameError, OptionArgumentError => e
      warn e.message
      STATUS_ERROR
    rescue RuboCop::Error => e
      warn Rainbow("Error: #{e.message}").red
      STATUS_ERROR
    rescue Finished
      STATUS_SUCCESS
    rescue OptionParser::InvalidOption => e
      warn e.message
      warn 'For usage information, use --help'
      STATUS_ERROR
    rescue StandardError, SyntaxError, LoadError => e
      warn e.message
      warn e.backtrace
      STATUS_ERROR
    end
def run(args = ARGV)
      @options, paths = Options.new.parse(args)

      if @options[:init]
        init_dotfile
      else
        validate_options_vs_config
        act_on_options
        apply_default_formatter
        execute_runners(paths)
      end
    rescue ConfigNotFoundError, IncorrectCopNameError, OptionArgumentError => e
      warn e.message
      STATUS_ERROR
    rescue RuboCop::Error => e
      warn Rainbow("Error: #{e.message}").red
      STATUS_ERROR
    rescue Finished
      STATUS_SUCCESS
    rescue OptionParser::InvalidOption => e
      warn e.message
      warn 'For usage information, use --help'
      STATUS_ERROR
    rescue StandardError, SyntaxError, LoadError => e
      warn e.message
      warn e.backtrace
      STATUS_ERROR
    end
@api public

 Entry point for the application logic. Here we
 do the command line arguments processing and inspect
 the target files.

 @param args [Array<String>] command line arguments
 @return [Integer] UNIX exit code

 rubocop:disable Metrics/MethodLength, Metrics/AbcSize