class RuboCop::Cop::Style::MultipleComparison
This cop checks against comparing a variable with multiple items, where `Array#include?` could be used instead to avoid code repetition.
@example
# bad a = 'a' foo if a == 'a' || a == 'b' || a == 'c' # good a = 'a' foo if ['a', 'b', 'c'].include?(a)
Constants
- MSG
Public Instance Methods
on_if(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 21 def on_if(node) return unless nested_variable_comparison?(node.condition) add_offense(node) end
Private Instance Methods
comparison?(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 71 def comparison?(node) simple_comparison?(node) || nested_comparison?(node) end
nested_comparison?(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 63 def nested_comparison?(node) if node.or_type? node.node_parts.all? { |node_part| comparison? node_part } else false end end
nested_variable_comparison?(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 34 def nested_variable_comparison?(node) return false unless nested_comparison?(node) variables_in_node(node).count == 1 end
variable_name(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 59 def variable_name(node) node.children[0] end
variables_in_node(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 39 def variables_in_node(node) if node.or_type? node.node_parts .flat_map { |node_part| variables_in_node(node_part) } .uniq else variables_in_simple_node(node) end end
variables_in_simple_node(node)
click to toggle source
# File lib/rubocop/cop/style/multiple_comparison.rb, line 49 def variables_in_simple_node(node) simple_double_comparison?(node) do |var1, var2| return [variable_name(var1), variable_name(var2)] end simple_comparison?(node) do |var| return [variable_name(var)] end [] end