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
#config, #processed_source, #project_index
Instance Method Summary collapse
- #on_or(node) ⇒ Object
- #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
cop_dir_for, #exclude_limit, read_limits
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
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 73 def on_or(node) return unless node == root_of_or_node(node) return unless nested_comparison?(node) return unless (variable, values, skipped = find_offending_var(node)) return if values.size < comparisons_threshold range = offense_range(values) # Bail when an allowed method comparison sits between the collected # values: collapsing them into a single `include?` would drop it. return if skipped_within_range?(skipped, range) add_offense(range) do |corrector| corrector.replace(range, preferred_method(variable, values)) 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, <<~PATTERN (send ${lvar call} :== $_) PATTERN |
#simple_comparison_rhs(node) ⇒ Object
69 70 71 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 69 def_node_matcher :simple_comparison_rhs, <<~PATTERN (send $_ :== ${lvar call}) PATTERN |
#simple_double_comparison?(node) ⇒ Object
59 60 61 |
# File 'lib/rubocop/cop/style/multiple_comparison.rb', line 59 def_node_matcher :simple_double_comparison?, <<~PATTERN (send lvar :== lvar) PATTERN |