class RuboCop::Cop::Sorbet::OneAncestorPerLine

This cop ensures one ancestor per requires_ancestor line rather than chaining them as a comma-separated list.

@example

# bad
module SomeModule
  requires_ancestor Kernel, Minitest::Assertions
end

# good
module SomeModule
  requires_ancestor Kernel
  requires_ancestor Minitest::Assertions
end

Constants

MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/sorbet/one_ancestor_per_line.rb, line 51
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
on_class(node) click to toggle source
# File lib/rubocop/cop/sorbet/one_ancestor_per_line.rb, line 45
def on_class(node)
  return unless abstract?(node)
  return unless requires_ancestors(node)
  process_node(node)
end
on_module(node) click to toggle source
# File lib/rubocop/cop/sorbet/one_ancestor_per_line.rb, line 39
def on_module(node)
  return unless node.body
  return unless requires_ancestors(node)
  process_node(node)
end

Private Instance Methods

new_ra_line(indent_count) click to toggle source
# File lib/rubocop/cop/sorbet/one_ancestor_per_line.rb, line 67
def new_ra_line(indent_count)
  indents = " " * indent_count
  indented_ra_call = "#{indents}requires_ancestor "
  "\n#{indented_ra_call}"
end
process_node(node) click to toggle source
# File lib/rubocop/cop/sorbet/one_ancestor_per_line.rb, line 61
def process_node(node)
  requires_ancestors(node).each do |ra|
    add_offense(ra.child_nodes[1]) if more_than_one_ancestor(ra)
  end
end