class RuboCop::OptionsValidator

Validates option arguments and the options' compatibility with each other.

Public Class Methods

new(options) click to toggle source
# File lib/rubocop/options.rb, line 176
def initialize(options)
  @options = options
end
validate_cop_list(names) click to toggle source

Cop name validation must be done later than option parsing, so it's not called from within Options.

# File lib/rubocop/options.rb, line 163
def self.validate_cop_list(names)
  return unless names

  namespaces = Cop::Cop.all.types.map { |t| t.to_s.capitalize }
  names.each do |name|
    next if Cop::Cop.all.any? { |c| c.cop_name == name }
    next if namespaces.include?(name)
    next if %w(Syntax Lint/Syntax).include?(name)

    raise ArgumentError, "Unrecognized cop or namespace: #{name}."
  end
end

Public Instance Methods

validate_compatibility() click to toggle source
# File lib/rubocop/options.rb, line 180
def validate_compatibility
  if @options.key?(:only) &&
     (@options[:only] & %w(Lint/UnneededDisable UnneededDisable)).any?
    raise ArgumentError, 'Lint/UnneededDisable can not be used with --only.'
  end
  if @options.key?(:except) &&
     (@options[:except] & %w(Lint/Syntax Syntax)).any?
    raise ArgumentError, 'Syntax checking can not be turned off.'
  end
  if @options.key?(:cache) && !%w(true false).include?(@options[:cache])
    raise ArgumentError, '-C/--cache argument must be true or false'
  end
  if @options.key?(:no_offense_counts) && !@options.key?(:auto_gen_config)
    raise ArgumentError, '--no-offense-counts can only be used together '                              'with --auto-gen-config.'
  end
  return if (incompat = @options.keys & Options::EXITING_OPTIONS).size <= 1
  raise ArgumentError, "Incompatible cli options: #{incompat.inspect}"
end
validate_exclude_limit_option(args) click to toggle source
# File lib/rubocop/options.rb, line 200
def validate_exclude_limit_option(args)
  if @options[:exclude_limit] !~ /^\d+$/
    # Emulate OptionParser's behavior to make failures consistent regardless
    # of option order.
    raise OptionParser::MissingArgument
  end

  # --exclude-limit is valid if there's a parsed or yet unparsed
  # --auto-gen-config.
  return if @options[:auto_gen_config] || args.include?('--auto-gen-config')

  raise ArgumentError,
        '--exclude-limit can only be used with --auto-gen-config.'
end