Class: RuboCop::OptionsValidator Private

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

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ OptionsValidator

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of OptionsValidator.


284
285
286
# File 'lib/rubocop/options.rb', line 284

def initialize(options)
  @options = options
end

Class Method Details

.validate_cop_list(names) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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


253
254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'lib/rubocop/options.rb', line 253

def validate_cop_list(names)
  return unless names

  cop_names = Cop::Registry.global.names
  departments = Cop::Registry.global.departments.map(&:to_s)

  names.each do |name|
    next if cop_names.include?(name)
    next if departments.include?(name)
    next if SYNTAX_DEPARTMENTS.include?(name)

    raise IncorrectCopNameError, format_message_from(name, cop_names)
  end
end

Instance Method Details

#boolean_or_empty_cache?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)

392
393
394
# File 'lib/rubocop/options.rb', line 392

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

#display_only_fail_level_offenses_with_autocorrect?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)

383
384
385
# File 'lib/rubocop/options.rb', line 383

def display_only_fail_level_offenses_with_autocorrect?
  @options[:display_only_fail_level_offenses] && @options[:autocorrect]
end

#except_syntax?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)

387
388
389
390
# File 'lib/rubocop/options.rb', line 387

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

#incompatible_optionsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


396
397
398
# File 'lib/rubocop/options.rb', line 396

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

#only_includes_redundant_disable?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)

377
378
379
380
381
# File 'lib/rubocop/options.rb', line 377

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

#validate_auto_correctObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


343
344
345
346
347
348
349
# File 'lib/rubocop/options.rb', line 343

def validate_auto_correct
  return if @options.key?(:auto_correct)
  return unless @options.key?(:disable_uncorrectable)

  raise OptionArgumentError,
        format('--disable-uncorrectable can only be used together with --auto-correct.')
end

#validate_auto_gen_configObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

rubocop:enable Metrics/AbcSize


321
322
323
324
325
326
327
328
329
330
331
332
333
# File 'lib/rubocop/options.rb', line 321

def validate_auto_gen_config
  return if @options.key?(:auto_gen_config)

  message = '--%<flag>s can only be used together with --auto-gen-config.'

  %i[exclude_limit offense_counts auto_gen_timestamp
     auto_gen_only_exclude].each do |option|
    if @options.key?(option)
      raise OptionArgumentError,
            format(message, flag: option.to_s.tr('_', '-'))
    end
  end
end

#validate_cache_enabled_for_cache_rootObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


408
409
410
411
412
413
# File 'lib/rubocop/options.rb', line 408

def validate_cache_enabled_for_cache_root
  return unless @options[:cache] == 'false'

  raise OptionArgumentError, '--cache-root can not be used with ' \
                              '--cache false'
end

#validate_compatibilityObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

rubocop:disable Metrics/AbcSize


295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
# File 'lib/rubocop/options.rb', line 295

def validate_compatibility # rubocop:disable Metrics/MethodLength
  if only_includes_redundant_disable?
    raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
                               'be used with --only.'
  end
  raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
  unless boolean_or_empty_cache?
    raise OptionArgumentError, '-C/--cache argument must be true or false'
  end

  if display_only_fail_level_offenses_with_autocorrect?
    raise OptionArgumentError, '--autocorrect cannot be used with ' \
      '--display-only-fail-level-offenses'
  end
  validate_auto_gen_config
  validate_auto_correct
  validate_display_only_failed
  validate_parallel

  return if incompatible_options.size <= 1

  raise OptionArgumentError, 'Incompatible cli options: ' \
                             "#{incompatible_options.inspect}"
end

#validate_cop_optionsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


288
289
290
291
292
# File 'lib/rubocop/options.rb', line 288

def validate_cop_options
  %i[only except].each do |opt|
    OptionsValidator.validate_cop_list(@options[opt])
  end
end

#validate_display_only_failedObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


335
336
337
338
339
340
341
# File 'lib/rubocop/options.rb', line 335

def validate_display_only_failed
  return unless @options.key?(:display_only_failed)
  return if @options[:format] == 'junit'

  raise OptionArgumentError,
        format('--display-only-failed can only be used together with --format junit.')
end

#validate_exclude_limit_optionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Raises:

  • (OptionParser::MissingArgument)

400
401
402
403
404
405
406
# File 'lib/rubocop/options.rb', line 400

def validate_exclude_limit_option
  return if /^\d+$/.match?(@options[:exclude_limit])

  # Emulate OptionParser's behavior to make failures consistent regardless
  # of option order.
  raise OptionParser::MissingArgument
end

#validate_parallelObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


351
352
353
354
355
356
357
358
359
360
361
# File 'lib/rubocop/options.rb', line 351

def validate_parallel
  return unless @options.key?(:parallel)

  if @options[:cache] == 'false'
    raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
                               'execution, so combining with --cache ' \
                               'false is not allowed.'
  end

  validate_parallel_with_combo_option
end

#validate_parallel_with_combo_optionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'lib/rubocop/options.rb', line 363

def validate_parallel_with_combo_option
  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 cannot be combined with -F/--fail-fast.',
    auto_correct: '-P/--parallel cannot be combined with --auto-correct.'
  }

  combos.each do |key, msg|
    raise OptionArgumentError, msg if @options.key?(key)
  end
end