Class: RuboCop::Cop::Style::MultipleComparison
- Extended by:
- AutoCorrector
- Defined in:
- lib/rubocop/cop/style/multiple_comparison.rb
Overview
Checks against comparing a variable with multiple items, where ‘Array#include?`, `Set#include?` or a case could be used instead to avoid code repetition. It accepts comparisons of multiple method calls to avoid unnecessary method calls by default. It can be configured by AllowMethodComparison option.
Constant Summary collapse
- MSG =
'Avoid comparing a variable with multiple items ' \ 'in a conditional, use `Array#include?` instead.'
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#on_or(node) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #simple_comparison_lhs(node) ⇒ Object
- #simple_comparison_rhs(node) ⇒ Object
- #simple_double_comparison?(node) ⇒ Object
Methods included from AutoCorrector
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?, #message, #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_gem_version, #target_rails_version, #target_ruby_version
Methods included from ExcludeLimit
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
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Method Details
#on_or(node) ⇒ Object
rubocop:disable Metrics/AbcSize
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 74 def on_or(node) root_of_or_node = root_of_or_node(node) return unless node == root_of_or_node return unless nested_comparison?(node) return unless (variable, values = find_offending_var(node)) return if values.size < comparisons_threshold range = offense_range(values) add_offense(range) do |corrector| elements = values.map(&:source).join(', ') argument = variable.lvar_type? ? variable_name(variable) : variable.source prefer_method = "[#{elements}].include?(#{argument})" corrector.replace(range, prefer_method) end end |
#simple_comparison_lhs(node) ⇒ Object
64 65 66 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 64 def_node_matcher :simple_comparison_lhs, "(send ${lvar call} :== $_)\n" |
#simple_comparison_rhs(node) ⇒ Object
69 70 71 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 69 def_node_matcher :simple_comparison_rhs, "(send $_ :== ${lvar call})\n" |
#simple_double_comparison?(node) ⇒ Object
59 60 61 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 59 def_node_matcher :simple_double_comparison?, "(send lvar :== lvar)\n" |