Class: RuboCop::Cop::Lint::FormatParameterMismatch

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/lint/format_parameter_mismatch.rb

Overview

This lint sees if there is a mismatch between the number of expected fields for format/sprintf/#% and what is actually passed as arguments.

In addition it checks whether different formats are used in the same format string. Do not mix numbered, unnumbered, and named formats in the same format string.

Examples:


# bad
format('A value: %s and another: %i', a_value)

# good
format('A value: %s and another: %i', a_value, another)

# bad
format('Unnumbered format: %s and numbered: %2$s', a_value, another)

# good
format('Numbered format: %1$s and numbered %2$s', a_value, another)

Constant Summary collapse

MSG =
"Number of arguments (%<arg_num>i) to `%<method>s` doesn't " \
'match the number of fields (%<field_num>i).'
MSG_INVALID =
'Format string is invalid because formatting sequence types ' \
'(numbered, named or unnumbered) are mixed.'
KERNEL =
'Kernel'
SHOVEL =
'<<'
STRING_TYPES =
%i[str dstr].freeze
RESTRICT_ON_SEND =
%i[format sprintf %].freeze

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Instance Method Details

#on_send(node) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rubocop/cop/lint/format_parameter_mismatch.rb', line 39

def on_send(node)
  return unless format_string?(node)

  if invalid_format_string?(node)
    add_offense(node.loc.selector, message: MSG_INVALID)
    return
  end

  return unless offending_node?(node)

  add_offense(node.loc.selector, message: message(node))
end