From ac8eb00443be063832a4971c182cbda7454095bb Mon Sep 17 00:00:00 2001 From: Jonathan Chang Date: Tue, 12 Jan 2021 18:25:05 +1100 Subject: [PATCH] rubocops/cask/*: use rubocop v1 API --- .../cask/homepage_url_trailing_slash.rb | 16 ++++------- .../Homebrew/rubocops/cask/no_dsl_version.rb | 15 ++++------ .../Homebrew/rubocops/cask/stanza_grouping.rb | 28 ++++++++----------- .../Homebrew/rubocops/cask/stanza_order.rb | 20 ++++++------- .../rubocops/cask/shared_examples/cask_cop.rb | 9 +++--- 5 files changed, 34 insertions(+), 54 deletions(-) diff --git a/Library/Homebrew/rubocops/cask/homepage_url_trailing_slash.rb b/Library/Homebrew/rubocops/cask/homepage_url_trailing_slash.rb index a3a18a9caf..313f9ef04f 100644 --- a/Library/Homebrew/rubocops/cask/homepage_url_trailing_slash.rb +++ b/Library/Homebrew/rubocops/cask/homepage_url_trailing_slash.rb @@ -9,8 +9,9 @@ module RuboCop module Cask # This cop checks that a cask's homepage ends with a slash # if it does not have a path component. - class HomepageUrlTrailingSlash < Cop + class HomepageUrlTrailingSlash < Base include OnHomepageStanza + extend AutoCorrector MSG_NO_SLASH = "'%s' must have a slash after the domain." @@ -26,19 +27,14 @@ module RuboCop return unless url&.match?(%r{^.+://[^/]+$}) - add_offense(url_node, location: :expression, - message: format(MSG_NO_SLASH, url: url)) - end - - def autocorrect(node) - domain = URI(node.str_content).host + domain = URI(url_node.str_content).host # This also takes URLs like 'https://example.org?path' # and 'https://example.org#path' into account. - corrected_source = node.source.sub("://#{domain}", "://#{domain}/") + corrected_source = url_node.source.sub("://#{domain}", "://#{domain}/") - lambda do |corrector| - corrector.replace(node.source_range, corrected_source) + add_offense(url_node.loc.expression, message: format(MSG_NO_SLASH, url: url)) do |corrector| + corrector.replace(url_node.source_range, corrected_source) end end end diff --git a/Library/Homebrew/rubocops/cask/no_dsl_version.rb b/Library/Homebrew/rubocops/cask/no_dsl_version.rb index 7866e52fe6..63dbda85e6 100644 --- a/Library/Homebrew/rubocops/cask/no_dsl_version.rb +++ b/Library/Homebrew/rubocops/cask/no_dsl_version.rb @@ -18,10 +18,11 @@ module RuboCop # cask 'foo' do # ... # end - class NoDslVersion < Cop + class NoDslVersion < Base extend T::Sig extend Forwardable + extend AutoCorrector include CaskHelp MESSAGE = "Use `%s` instead of `%s`" @@ -33,13 +34,6 @@ module RuboCop offense end - def autocorrect(method_node) - @cask_header = cask_header(method_node) - lambda do |corrector| - corrector.replace(header_range, preferred_header_str) - end - end - private def_delegator :@cask_header, :source_range, :header_range @@ -54,8 +48,9 @@ module RuboCop end def offense - add_offense(@cask_header.method_node, location: header_range, - message: error_msg) + add_offense(header_range, message: error_msg) do |corrector| + corrector.replace(header_range, preferred_header_str) + end end sig { returns(String) } diff --git a/Library/Homebrew/rubocops/cask/stanza_grouping.rb b/Library/Homebrew/rubocops/cask/stanza_grouping.rb index 6d17bbb9df..0e68b230d0 100644 --- a/Library/Homebrew/rubocops/cask/stanza_grouping.rb +++ b/Library/Homebrew/rubocops/cask/stanza_grouping.rb @@ -8,8 +8,9 @@ module RuboCop module Cask # This cop checks that a cask's stanzas are grouped correctly. # @see https://github.com/Homebrew/homebrew-cask/blob/HEAD/doc/cask_language_reference/readme.md#stanza-order - class StanzaGrouping < Cop + class StanzaGrouping < Base extend Forwardable + extend AutoCorrector include CaskHelp include RangeHelp @@ -25,17 +26,6 @@ module RuboCop add_offenses end - def autocorrect(range) - lambda do |corrector| - case line_ops[range.line - 1] - when :insert - corrector.insert_before(range, "\n") - when :remove - corrector.remove(range) - end - end - end - private attr_reader :cask_block, :line_ops @@ -79,20 +69,24 @@ module RuboCop def add_offense_missing_line(stanza) line_index = index_of_line_after(stanza) line_ops[line_index] = :insert - add_offense(line_index, message: MISSING_LINE_MSG) + add_offense(line_index, message: MISSING_LINE_MSG) do |corrector| + corrector.insert_before(@range, "\n") + end end def add_offense_extra_line(stanza) line_index = index_of_line_after(stanza) line_ops[line_index] = :remove - add_offense(line_index, message: EXTRA_LINE_MSG) + add_offense(line_index, message: EXTRA_LINE_MSG) do |corrector| + corrector.remove(@range) + end end def add_offense(line_index, message:) line_length = [processed_source[line_index].size, 1].max - range = source_range(processed_source.buffer, line_index + 1, 0, - line_length) - super(range, location: range, message: message) + @range = source_range(processed_source.buffer, line_index + 1, 0, + line_length) + super(@range, message: message) end end end diff --git a/Library/Homebrew/rubocops/cask/stanza_order.rb b/Library/Homebrew/rubocops/cask/stanza_order.rb index af044d8b75..96f1b057c7 100644 --- a/Library/Homebrew/rubocops/cask/stanza_order.rb +++ b/Library/Homebrew/rubocops/cask/stanza_order.rb @@ -8,8 +8,9 @@ module RuboCop module Cask # This cop checks that a cask's stanzas are ordered correctly. # @see https://github.com/Homebrew/homebrew-cask/blob/HEAD/doc/cask_language_reference/readme.md#stanza-order - class StanzaOrder < Cop + class StanzaOrder < Base extend Forwardable + extend AutoCorrector include CaskHelp MESSAGE = "`%s` stanza out of order" @@ -19,15 +20,6 @@ module RuboCop add_offenses end - def autocorrect(stanza) - lambda do |corrector| - correct_stanza_index = toplevel_stanzas.index(stanza) - correct_stanza = sorted_toplevel_stanzas[correct_stanza_index] - corrector.replace(stanza.source_range_with_comments, - correct_stanza.source_with_comments) - end - end - private attr_reader :cask_block @@ -38,8 +30,12 @@ module RuboCop def add_offenses offending_stanzas.each do |stanza| message = format(MESSAGE, stanza: stanza.stanza_name) - add_offense(stanza, location: stanza.source_range_with_comments, - message: message) + add_offense(stanza.source_range_with_comments, message: message) do |corrector| + correct_stanza_index = toplevel_stanzas.index(stanza) + correct_stanza = sorted_toplevel_stanzas[correct_stanza_index] + corrector.replace(stanza.source_range_with_comments, + correct_stanza.source_with_comments) + end end end diff --git a/Library/Homebrew/test/rubocops/cask/shared_examples/cask_cop.rb b/Library/Homebrew/test/rubocops/cask/shared_examples/cask_cop.rb index 8654a49606..49b09a0d83 100644 --- a/Library/Homebrew/test/rubocops/cask/shared_examples/cask_cop.rb +++ b/Library/Homebrew/test/rubocops/cask/shared_examples/cask_cop.rb @@ -21,14 +21,13 @@ module CaskCop end def expect_no_offenses(source) - inspect_source(source) - expect(cop.offenses).to be_empty + expect(inspect_source(source)).to be_empty end def expect_reported_offenses(source, expected_offenses) - inspect_source(source) - expect(cop.offenses.size).to eq(expected_offenses.size) - expected_offenses.zip(cop.offenses).each do |expected, actual| + offenses = inspect_source(source) + expect(offenses.size).to eq(expected_offenses.size) + expected_offenses.zip(offenses).each do |expected, actual| expect_offense(expected, actual) end end