mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
rubocop: preserve comments when ordering uninstall methods
This commit is contained in:
parent
7c540dd3c5
commit
9aabe1ba91
@ -9,10 +9,9 @@ module RuboCop
|
|||||||
# This cop checks for the correct order of methods within the 'uninstall' and 'zap' stanzas.
|
# This cop checks for the correct order of methods within the 'uninstall' and 'zap' stanzas.
|
||||||
class UninstallMethodsOrder < Base
|
class UninstallMethodsOrder < Base
|
||||||
extend AutoCorrector
|
extend AutoCorrector
|
||||||
include CaskHelp
|
|
||||||
include HelperFunctions
|
include HelperFunctions
|
||||||
|
|
||||||
MSG = T.let("`%<method>s` method out of order".freeze, String)
|
MSG = T.let("`%<method>s` method out of order", String)
|
||||||
|
|
||||||
sig { params(node: AST::SendNode).void }
|
sig { params(node: AST::SendNode).void }
|
||||||
def on_send(node)
|
def on_send(node)
|
||||||
@ -23,18 +22,35 @@ module RuboCop
|
|||||||
|
|
||||||
method_nodes = hash_node.pairs.map(&:key)
|
method_nodes = hash_node.pairs.map(&:key)
|
||||||
expected_order = method_nodes.sort_by { |method| method_order_index(method) }
|
expected_order = method_nodes.sort_by { |method| method_order_index(method) }
|
||||||
|
comments = processed_source.comments
|
||||||
|
|
||||||
method_nodes.each_with_index do |method, index|
|
method_nodes.each_with_index do |method, index|
|
||||||
next if method == expected_order[index]
|
next if method == expected_order[index]
|
||||||
|
|
||||||
add_offense(method, message: format(MSG, method: method.children.first)) do |corrector|
|
report_and_correct_offense(method, hash_node, expected_order, comments)
|
||||||
indentation = " " * (start_column(method) - line_start_column(method))
|
end
|
||||||
ordered_sources = expected_order.map do |expected_method|
|
end
|
||||||
hash_node.pairs.find { |pair| pair.key == expected_method }.source
|
|
||||||
|
sig {
|
||||||
|
params(method: AST::Node,
|
||||||
|
hash_node: AST::HashNode,
|
||||||
|
expected_order: T::Array[AST::Node],
|
||||||
|
comments: T::Array[Parser::Source::Comment]).void
|
||||||
|
}
|
||||||
|
def report_and_correct_offense(method, hash_node, expected_order, comments)
|
||||||
|
add_offense(method, message: format(MSG, method: method.children.first)) do |corrector|
|
||||||
|
indentation = " " * (start_column(method) - line_start_column(method))
|
||||||
|
new_code = expected_order.map do |expected_method|
|
||||||
|
method_pair = hash_node.pairs.find { |pair| pair.key == expected_method }
|
||||||
|
source = method_pair.source
|
||||||
|
|
||||||
|
# Find and attach a comment on the same line as the method_pair, if any
|
||||||
|
inline_comment = comments.find do |comment|
|
||||||
|
comment.location.line == method_pair.loc.line && comment.location.column > method_pair.loc.column
|
||||||
end
|
end
|
||||||
new_code = ordered_sources.join(",\n#{indentation}")
|
inline_comment ? "#{source} #{inline_comment.text}" : source
|
||||||
corrector.replace(hash_node.source_range, new_code)
|
end.join(",\n#{indentation}")
|
||||||
end
|
corrector.replace(hash_node.source_range, new_code)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,9 +18,9 @@ require_relative "cask/discontinued"
|
|||||||
require_relative "cask/homepage_url_trailing_slash"
|
require_relative "cask/homepage_url_trailing_slash"
|
||||||
require_relative "cask/no_overrides"
|
require_relative "cask/no_overrides"
|
||||||
require_relative "cask/on_system_conditionals"
|
require_relative "cask/on_system_conditionals"
|
||||||
require_relative "cask/uninstall_methods_order"
|
|
||||||
require_relative "cask/stanza_order"
|
require_relative "cask/stanza_order"
|
||||||
require_relative "cask/stanza_grouping"
|
require_relative "cask/stanza_grouping"
|
||||||
|
require_relative "cask/uninstall_methods_order"
|
||||||
require_relative "cask/url"
|
require_relative "cask/url"
|
||||||
require_relative "cask/url_legacy_comma_separators"
|
require_relative "cask/url_legacy_comma_separators"
|
||||||
require_relative "cask/variables"
|
require_relative "cask/variables"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user