From 4f30c8443c8ce8aa03b36552944e8c8bec843fb7 Mon Sep 17 00:00:00 2001 From: David Flaherty Date: Wed, 21 Jul 2021 16:12:50 -0400 Subject: [PATCH] Replace custom cop w/ built-in one Per PR feedback. [#177398947] --- lib/unless_with_multiple_conditions.rb | 29 ---------- spec/unless_with_multiple_conditions_spec.rb | 61 -------------------- 2 files changed, 90 deletions(-) delete mode 100644 lib/unless_with_multiple_conditions.rb delete mode 100644 spec/unless_with_multiple_conditions_spec.rb diff --git a/lib/unless_with_multiple_conditions.rb b/lib/unless_with_multiple_conditions.rb deleted file mode 100644 index c5c5ada..0000000 --- a/lib/unless_with_multiple_conditions.rb +++ /dev/null @@ -1,29 +0,0 @@ -module RuboCop - module Cop - module Style - class UnlessWithMultipleConditions < ::RuboCop::Cop::Cop - MSG = 'Do not use `unless` with multiple conditions because it is error prone & difficult to debug.'.freeze - - def on_if(node) - @node = node - return unless unless_with_multiple_conditions? - add_offense(node) - end - - private - - def unless_with_multiple_conditions? - unless? && contains_multiple_conditions? - end - - def unless? - @node.loc.respond_to?(:keyword) && @node.loc.keyword.is?('unless') - end - - def contains_multiple_conditions? - @node.child_nodes.first.and_type? || @node.child_nodes.first.or_type? - end - end - end - end -end diff --git a/spec/unless_with_multiple_conditions_spec.rb b/spec/unless_with_multiple_conditions_spec.rb deleted file mode 100644 index 245c7a4..0000000 --- a/spec/unless_with_multiple_conditions_spec.rb +++ /dev/null @@ -1,61 +0,0 @@ -require 'spec_helper' -require 'rubocop' -require './lib/unless_with_multiple_conditions' - -describe RuboCop::Cop::Style::UnlessWithMultipleConditions do - # These helper methods are from https://github.com/bbatsov/rubocop/blob/4b26354497f32da8d771f35c66b2f47224f9674b/spec/support/cop_helper.rb#L10 - def inspect_source(cop, source, file = nil) - if source.is_a?(Array) && source.size == 1 - fail "Don't use an array for a single line of code: #{source}" - end - RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {} - processed_source = parse_source(source, file) - fail 'Error parsing example code' unless processed_source.valid_syntax? - _investigate(cop, processed_source) - end - - def parse_source(source, file = nil) - source = source.join($RS) if source.is_a?(Array) - - if file&.respond_to?(:write) - file.write(source) - file.rewind - file = file.path - end - - RuboCop::ProcessedSource.new(source, 2.6, file) - end - - def _investigate(cop, processed_source) - team = RuboCop::Cop::Team.new([cop], nil, raise_error: true) - report = team.investigate(processed_source) - @last_corrector = report.correctors.first || RuboCop::Cop::Corrector.new(processed_source) - report.offenses - end - - it "isn't offended by single conditions, if statements with multiple conditions" do - [ - ['if(:foo)', 'end'], - ['unless(:foo)', 'end'], - ['if(:foo || :bar)', 'end'], - ['if(:foo && :bar)', 'end'], - ].each do |source| - cop = described_class.new - inspect_source(cop, source) - expect(cop.offenses.size).to eq(0) - end - end - - it 'is offended by unless statements with multiple conditions' do - [ - ['unless :foo && :bar', 'end'], - ['unless :foo and :bar', 'end'], - ['unless :foo || :bar', 'end'], - ['unless :foo or :bar', 'end'], - ].each do |source| - cop = described_class.new - inspect_source(cop, source) - expect(cop.offenses.size).to eq(1) - end - end -end