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 204 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 190 def self.validate_cop_list(names) return unless names departments = Cop::Cop.registry.departments.map(&:to_s) names.each do |name| next if Cop::Cop.registry.names.include?(name) next if departments.include?(name) next if %w[Syntax Lint/Syntax].include?(name) raise ArgumentError, "Unrecognized cop or department: #{name}." end end
Public Instance Methods
boolean_or_empty_cache?()
click to toggle source
# File lib/rubocop/options.rb, line 259 def boolean_or_empty_cache? !@options.key?(:cache) || %w[true false].include?(@options[:cache]) end
except_syntax?()
click to toggle source
# File lib/rubocop/options.rb, line 254 def except_syntax? @options.key?(:except) && (@options[:except] & %w[Lint/Syntax Syntax]).any? end
incompatible_options()
click to toggle source
# File lib/rubocop/options.rb, line 267 def incompatible_options @incompatible_options ||= @options.keys & Options::EXITING_OPTIONS end
no_offense_counts_without_auto_gen_config?()
click to toggle source
# File lib/rubocop/options.rb, line 263 def no_offense_counts_without_auto_gen_config? @options.key?(:no_offense_counts) && !@options.key?(:auto_gen_config) end
only_includes_unneeded_disable?()
click to toggle source
# File lib/rubocop/options.rb, line 249 def only_includes_unneeded_disable? @options.key?(:only) && (@options[:only] & %w[Lint/UnneededDisable UnneededDisable]).any? end
validate_compatibility()
click to toggle source
# File lib/rubocop/options.rb, line 208 def validate_compatibility # rubocop:disable Metrics/MethodLength if only_includes_unneeded_disable? raise ArgumentError, 'Lint/UnneededDisable can not be used with --only.' end if except_syntax? raise ArgumentError, 'Syntax checking can not be turned off.' end unless boolean_or_empty_cache? raise ArgumentError, '-C/--cache argument must be true or false' end if no_offense_counts_without_auto_gen_config? raise ArgumentError, '--no-offense-counts can only be used together ' \ 'with --auto-gen-config.' end validate_parallel return if incompatible_options.size <= 1 raise ArgumentError, 'Incompatible cli options: ' \ "#{incompatible_options.inspect}" end
validate_exclude_limit_option(args)
click to toggle source
# File lib/rubocop/options.rb, line 271 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
validate_parallel()
click to toggle source
# File lib/rubocop/options.rb, line 229 def validate_parallel return unless @options.key?(:parallel) if @options[:cache] == 'false' raise ArgumentError, '-P/--parallel uses caching to speed up ' \ 'execution, so combining with --cache false is ' \ 'not allowed.' end combos = { auto_gen_config: '-P/--parallel uses caching to speed up execution, ' \ 'while --auto-gen-config needs a non-cached run, ' \ 'so they cannot be combined.', fail_fast: '-P/--parallel can not be combined with -F/--fail-fast.', auto_correct: '-P/--parallel can not be combined with --auto-correct.' } combos.each { |key, msg| raise ArgumentError, msg if @options.key?(key) } end