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.



190
191
192
# File 'lib/rubocop/options.rb', line 190

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.



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

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

Instance Method Details

#boolean_or_empty_cache?Boolean

Returns:

  • (Boolean)


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

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

#except_syntax?Boolean

Returns:

  • (Boolean)


218
219
220
221
# File 'lib/rubocop/options.rb', line 218

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

#incompatible_optionsObject



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

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

#no_offense_counts_without_auto_gen_config?Boolean

Returns:

  • (Boolean)


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

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)


213
214
215
216
# File 'lib/rubocop/options.rb', line 213

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

#validate_compatibilityObject

rubocop:disable Metrics/MethodLength

Raises:

  • (ArgumentError)


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

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)


235
236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'lib/rubocop/options.rb', line 235

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