Class: RuboCop::OptionsValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/rubocop/options.rb

Overview

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ OptionsValidator

Returns a new instance of OptionsValidator.



193
194
195
# File 'lib/rubocop/options.rb', line 193

def initialize(options)
  @options = options
end

Class Method Details

.validate_cop_list(names) ⇒ Object

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



179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/rubocop/options.rb', line 179

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

Instance Method Details

#boolean_or_empty_cache?Boolean

Returns:

  • (Boolean)


226
227
228
# File 'lib/rubocop/options.rb', line 226

def boolean_or_empty_cache?
  !@options.key?(:cache) || %w(true false).include?(@options[:cache])
end

#except_syntax?Boolean

Returns:

  • (Boolean)


221
222
223
224
# File 'lib/rubocop/options.rb', line 221

def except_syntax?
  @options.key?(:except) &&
    (@options[:except] & %w(Lint/Syntax Syntax)).any?
end

#incompatible_optionsObject



234
235
236
# File 'lib/rubocop/options.rb', line 234

def incompatible_options
  @incompatible_options ||= @options.keys & Options::EXITING_OPTIONS
end

#no_offense_counts_without_auto_gen_config?Boolean

Returns:

  • (Boolean)


230
231
232
# File 'lib/rubocop/options.rb', line 230

def no_offense_counts_without_auto_gen_config?
  @options.key?(:no_offense_counts) && !@options.key?(:auto_gen_config)
end

#only_includes_unneeded_disable?Boolean

Returns:

  • (Boolean)


216
217
218
219
# File 'lib/rubocop/options.rb', line 216

def only_includes_unneeded_disable?
  @options.key?(:only) &&
    (@options[:only] & %w(Lint/UnneededDisable UnneededDisable)).any?
end

#validate_compatibilityObject

rubocop:disable Metrics/MethodLength

Raises:

  • (ArgumentError)


197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/rubocop/options.rb', line 197

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
  return if incompatible_options.size <= 1
  raise ArgumentError, 'Incompatible cli options: ' \
                       "#{incompatible_options.inspect}"
end

#validate_exclude_limit_option(args) ⇒ Object

Raises:

  • (ArgumentError)


238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/rubocop/options.rb', line 238

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