class RuboCop::Cop::Sorbet::OneAncestorPerLine
end
requires_ancestor Minitest::Assertions
requires_ancestor Kernel
module SomeModule
# good
end
requires_ancestor Kernel, Minitest::Assertions
module SomeModule
# bad
@example
rather than chaining them as a comma-separated list.
This cop ensures one ancestor per requires_ancestor line
def autocorrect(node)
def autocorrect(node) -> (corrector) do ra_call = node.parent split_ra_calls = ra_call.source.gsub(/,\s+/, new_ra_line(ra_call.loc.column)) corrector.replace(ra_call, split_ra_calls) end end
def new_ra_line(indent_count)
def new_ra_line(indent_count) indents = " " * indent_count indented_ra_call = "#{indents}requires_ancestor " "\n#{indented_ra_call}" end
def on_class(node)
def on_class(node) return unless abstract?(node) return unless requires_ancestors(node) process_node(node) end
def on_module(node)
def on_module(node) return unless node.body return unless requires_ancestors(node) process_node(node) end
def process_node(node)
def process_node(node) requires_ancestors(node).each do |ra| add_offense(ra.child_nodes[1]) if more_than_one_ancestor(ra) end end