rubocops/cask/*: use rubocop v1 API

This commit is contained in:
Jonathan Chang 2021-01-12 18:25:05 +11:00
parent 30f7a872b5
commit ac8eb00443
5 changed files with 34 additions and 54 deletions

View File

@ -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 = "'%<url>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

View File

@ -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 `%<preferred>s` instead of `%<current>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) }

View File

@ -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

View File

@ -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 = "`%<stanza>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

View File

@ -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