2025-01-05 23:45:23 +00:00
|
|
|
# typed: strict
|
2021-12-31 11:08:47 +11:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module RuboCop
|
|
|
|
module Cop
|
|
|
|
module Cask
|
2023-05-08 11:02:44 +02:00
|
|
|
# This cop checks for `version.before_comma` and `version.after_comma`.
|
2023-03-05 16:32:40 +00:00
|
|
|
class UrlLegacyCommaSeparators < Url
|
2021-12-31 11:08:47 +11:00
|
|
|
include OnUrlStanza
|
|
|
|
extend AutoCorrector
|
|
|
|
|
2023-05-08 11:02:44 +02:00
|
|
|
MSG_CSV = "Use `version.csv.first` instead of `version.before_comma` " \
|
|
|
|
"and `version.csv.second` instead of `version.after_comma`."
|
2021-12-31 11:08:47 +11:00
|
|
|
|
2025-01-05 23:45:23 +00:00
|
|
|
sig { override.params(stanza: RuboCop::Cask::AST::Stanza).void }
|
2022-01-10 21:34:51 +11:00
|
|
|
def on_url_stanza(stanza)
|
2022-01-10 21:27:20 +11:00
|
|
|
return if stanza.stanza_node.type == :block
|
2022-01-10 21:34:51 +11:00
|
|
|
|
2021-12-31 11:08:47 +11:00
|
|
|
url_node = stanza.stanza_node.first_argument
|
|
|
|
|
2022-01-12 10:40:22 +11:00
|
|
|
legacy_comma_separator_pattern = /version\.(before|after)_comma/
|
2021-12-31 11:08:47 +11:00
|
|
|
|
|
|
|
url = url_node.source
|
|
|
|
|
|
|
|
return unless url.match?(legacy_comma_separator_pattern)
|
|
|
|
|
|
|
|
corrected_url = url.sub("before_comma", "csv.first")&.sub("after_comma", "csv.second")
|
|
|
|
|
2024-03-07 16:20:20 +00:00
|
|
|
add_offense(url_node.loc.expression, message: format(MSG_CSV, url:)) do |corrector|
|
2021-12-31 11:08:47 +11:00
|
|
|
corrector.replace(url_node.source_range, corrected_url)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|