rubocops/cask/*: use rubocop v1 API
This commit is contained in:
parent
30f7a872b5
commit
ac8eb00443
@ -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
|
||||
|
||||
@ -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) }
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user