Class: RuboCop::Cop::Lint::MultipleCompare

Inherits:
Cop
  • Object
show all
Defined in:
lib/rubocop/cop/lint/multiple_compare.rb

Overview

In math and Python, we can use ‘x < y < z` style comparison to compare multiple value. However, we can’t use the comparison in Ruby. However, the comparison is not syntax error. This cop checks the bad usage of comparison operators.

Examples:


# bad

x < y < z
10 <= x <= 20

# good

x < y && y < z
10 <= x && x <= 20

Constant Summary collapse

MSG =
'Use the `&&` operator to compare multiple values.'.freeze

Constants included from Util

Util::ASGN_NODES, Util::BYTE_ORDER_MARK, Util::CONDITIONAL_NODES, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::LOGICAL_OPERATOR_NODES, Util::MODIFIER_NODES, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from AST::Sexp

#s

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, block_length, comment_line?, compatible_external_encoding_for?, directions, double_quotes_required?, effective_column, ends_its_line?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_distance, line_range, move_pos, needs_escaping?, on_node, operator?, parentheses?, parenthesized_call?, preceed?, range_between, range_by_whole_lines, range_with_surrounding_comma, range_with_surrounding_space, same_line?, scrub_string, source_range, strip_quotes, stripped_source_upto, symbol_without_quote?, to_string_literal, to_supported_styles, to_symbol_literal, within_node?

Methods included from PathUtil

absolute?, match_path?, relative_path, smart_path

Constructor Details

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

Instance Method Details

#autocorrect(node) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/rubocop/cop/lint/multiple_compare.rb', line 37

def autocorrect(node)
  center = multiple_compare?(node)
  new_center = "#{center.source} && #{center.source}"

  lambda do |corrector|
    corrector.replace(center.source_range, new_center)
  end
end

#on_send(node) ⇒ Object



31
32
33
34
35
# File 'lib/rubocop/cop/lint/multiple_compare.rb', line 31

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

  add_offense(node)
end