diff options
Diffstat (limited to 'ci/custom_cops')
-rwxr-xr-x | ci/custom_cops/bin/test | 5 | ||||
-rw-r--r-- | ci/custom_cops/lib/custom_cops.rb | 4 | ||||
-rw-r--r-- | ci/custom_cops/lib/custom_cops/assert_not.rb | 40 | ||||
-rw-r--r-- | ci/custom_cops/lib/custom_cops/refute_not.rb | 71 | ||||
-rw-r--r-- | ci/custom_cops/test/custom_cops/assert_not_test.rb | 42 | ||||
-rw-r--r-- | ci/custom_cops/test/custom_cops/refute_not_test.rb | 66 | ||||
-rw-r--r-- | ci/custom_cops/test/support/cop_helper.rb | 47 |
7 files changed, 0 insertions, 275 deletions
diff --git a/ci/custom_cops/bin/test b/ci/custom_cops/bin/test deleted file mode 100755 index 495ffec83a..0000000000 --- a/ci/custom_cops/bin/test +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -COMPONENT_ROOT = File.expand_path("..", __dir__) -require_relative "../../../tools/test" diff --git a/ci/custom_cops/lib/custom_cops.rb b/ci/custom_cops/lib/custom_cops.rb deleted file mode 100644 index 157b8247e4..0000000000 --- a/ci/custom_cops/lib/custom_cops.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -require_relative "custom_cops/refute_not" -require_relative "custom_cops/assert_not" diff --git a/ci/custom_cops/lib/custom_cops/assert_not.rb b/ci/custom_cops/lib/custom_cops/assert_not.rb deleted file mode 100644 index 8b49d3eac2..0000000000 --- a/ci/custom_cops/lib/custom_cops/assert_not.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -module CustomCops - # Enforces the use of `assert_not` over `assert !`. - # - # @example - # # bad - # assert !x - # assert ! x - # - # # good - # assert_not x - # - class AssertNot < RuboCop::Cop::Cop - MSG = "Prefer `assert_not` over `assert !`" - - def_node_matcher :offensive?, "(send nil? :assert (send ... :!) ...)" - - def on_send(node) - add_offense(node) if offensive?(node) - end - - def autocorrect(node) - expression = node.loc.expression - - ->(corrector) do - corrector.replace( - expression, - corrected_source(expression.source) - ) - end - end - - private - - def corrected_source(source) - source.gsub(/^assert(\(| ) *! */, "assert_not\\1") - end - end -end diff --git a/ci/custom_cops/lib/custom_cops/refute_not.rb b/ci/custom_cops/lib/custom_cops/refute_not.rb deleted file mode 100644 index 3e89e0fd32..0000000000 --- a/ci/custom_cops/lib/custom_cops/refute_not.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -module CustomCops - # Enforces the use of `#assert_not` methods over `#refute` methods. - # - # @example - # # bad - # refute false - # refute_empty [1, 2, 3] - # refute_equal true, false - # - # # good - # assert_not false - # assert_not_empty [1, 2, 3] - # assert_not_equal true, false - # - class RefuteNot < RuboCop::Cop::Cop - MSG = "Prefer `%<assert_method>s` over `%<refute_method>s`" - - CORRECTIONS = { - refute: "assert_not", - refute_empty: "assert_not_empty", - refute_equal: "assert_not_equal", - refute_in_delta: "assert_not_in_delta", - refute_in_epsilon: "assert_not_in_epsilon", - refute_includes: "assert_not_includes", - refute_instance_of: "assert_not_instance_of", - refute_kind_of: "assert_not_kind_of", - refute_nil: "assert_not_nil", - refute_operator: "assert_not_operator", - refute_predicate: "assert_not_predicate", - refute_respond_to: "assert_not_respond_to", - refute_same: "assert_not_same", - refute_match: "assert_no_match" - }.freeze - - OFFENSIVE_METHODS = CORRECTIONS.keys.freeze - - def_node_matcher :offensive?, "(send nil? #offensive_method? ...)" - - def on_send(node) - return unless offensive?(node) - - message = offense_message(node.method_name) - add_offense(node, location: :selector, message: message) - end - - def autocorrect(node) - ->(corrector) do - corrector.replace( - node.loc.selector, - CORRECTIONS[node.method_name] - ) - end - end - - private - - def offensive_method?(method_name) - OFFENSIVE_METHODS.include?(method_name) - end - - def offense_message(method_name) - format( - MSG, - refute_method: method_name, - assert_method: CORRECTIONS[method_name] - ) - end - end -end diff --git a/ci/custom_cops/test/custom_cops/assert_not_test.rb b/ci/custom_cops/test/custom_cops/assert_not_test.rb deleted file mode 100644 index abb151aeb4..0000000000 --- a/ci/custom_cops/test/custom_cops/assert_not_test.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -require "support/cop_helper" -require_relative "../../lib/custom_cops/assert_not" - -class AssertNotTest < ActiveSupport::TestCase - include CopHelper - - setup do - @cop = CustomCops::AssertNot.new - end - - test "rejects 'assert !'" do - inspect_source @cop, "assert !x" - assert_offense @cop, "^^^^^^^^^ Prefer `assert_not` over `assert !`" - end - - test "rejects 'assert !' with a complex value" do - inspect_source @cop, "assert !a.b(c)" - assert_offense @cop, "^^^^^^^^^^^^^^ Prefer `assert_not` over `assert !`" - end - - test "autocorrects `assert !`" do - corrected = autocorrect_source(@cop, "assert !false") - assert_equal "assert_not false", corrected - end - - test "autocorrects `assert !` with extra spaces" do - corrected = autocorrect_source(@cop, "assert ! false") - assert_equal "assert_not false", corrected - end - - test "autocorrects `assert !` with parentheses" do - corrected = autocorrect_source(@cop, "assert(!false)") - assert_equal "assert_not(false)", corrected - end - - test "accepts `assert_not`" do - inspect_source @cop, "assert_not x" - assert_empty @cop.offenses - end -end diff --git a/ci/custom_cops/test/custom_cops/refute_not_test.rb b/ci/custom_cops/test/custom_cops/refute_not_test.rb deleted file mode 100644 index f0f6eaeda0..0000000000 --- a/ci/custom_cops/test/custom_cops/refute_not_test.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -require "support/cop_helper" -require_relative "../../lib/custom_cops/refute_not" - -class RefuteNotTest < ActiveSupport::TestCase - include CopHelper - - setup do - @cop = CustomCops::RefuteNot.new - end - - { - refute: :assert_not, - refute_empty: :assert_not_empty, - refute_equal: :assert_not_equal, - refute_in_delta: :assert_not_in_delta, - refute_in_epsilon: :assert_not_in_epsilon, - refute_includes: :assert_not_includes, - refute_instance_of: :assert_not_instance_of, - refute_kind_of: :assert_not_kind_of, - refute_nil: :assert_not_nil, - refute_operator: :assert_not_operator, - refute_predicate: :assert_not_predicate, - refute_respond_to: :assert_not_respond_to, - refute_same: :assert_not_same, - refute_match: :assert_no_match - }.each do |refute_method, assert_method| - test "rejects `#{refute_method}` with a single argument" do - inspect_source(@cop, "#{refute_method} a") - assert_offense @cop, offense_message(refute_method, assert_method) - end - - test "rejects `#{refute_method}` with multiple arguments" do - inspect_source(@cop, "#{refute_method} a, b, c") - assert_offense @cop, offense_message(refute_method, assert_method) - end - - test "autocorrects `#{refute_method}` with a single argument" do - corrected = autocorrect_source(@cop, "#{refute_method} a") - assert_equal "#{assert_method} a", corrected - end - - test "autocorrects `#{refute_method}` with multiple arguments" do - corrected = autocorrect_source(@cop, "#{refute_method} a, b, c") - assert_equal "#{assert_method} a, b, c", corrected - end - - test "accepts `#{assert_method}` with a single argument" do - inspect_source(@cop, "#{assert_method} a") - assert_empty @cop.offenses - end - - test "accepts `#{assert_method}` with multiple arguments" do - inspect_source(@cop, "#{assert_method} a, b, c") - assert_empty @cop.offenses - end - end - - private - - def offense_message(refute_method, assert_method) - carets = "^" * refute_method.to_s.length - "#{carets} Prefer `#{assert_method}` over `#{refute_method}`" - end -end diff --git a/ci/custom_cops/test/support/cop_helper.rb b/ci/custom_cops/test/support/cop_helper.rb deleted file mode 100644 index c2c6b969dd..0000000000 --- a/ci/custom_cops/test/support/cop_helper.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -require "rubocop" - -module CopHelper - def inspect_source(cop, source) - processed_source = parse_source(source) - raise "Error parsing example code" unless processed_source.valid_syntax? - investigate(cop, processed_source) - processed_source - end - - def autocorrect_source(cop, source) - cop.instance_variable_get(:@options)[:auto_correct] = true - processed_source = inspect_source(cop, source) - rewrite(cop, processed_source) - end - - def assert_offense(cop, expected_message) - assert_not_empty( - cop.offenses, - "Expected offense with message \"#{expected_message}\", but got no offense" - ) - - offense = cop.offenses.first - carets = "^" * offense.column_length - - assert_equal expected_message, "#{carets} #{offense.message}" - end - - private - TARGET_RUBY_VERSION = 2.4 - - def parse_source(source) - RuboCop::ProcessedSource.new(source, TARGET_RUBY_VERSION) - end - - def rewrite(cop, processed_source) - RuboCop::Cop::Corrector.new(processed_source.buffer, cop.corrections) - .rewrite - end - - def investigate(cop, processed_source) - RuboCop::Cop::Commissioner.new([cop], [], raise_error: true) - .investigate(processed_source) - end -end |