class RuboCop::Cop::Style::ModuleFunction

implications to each approach.
These offenses are not safe to auto-correct since there are different
end
# …
extend self
module Test
# good
end
# …
module_function
module Test
# bad
@example EnforcedStyle: extend_self
end
# …
private
# …
extend self
module Test
# good
@example EnforcedStyle: module_function (default)
Otherwise, it forces to change the flow of the default code.
In case there are private methods, the cop won’t be activated.
end
# …
module_function
module Test
# good
end
# …
extend self
module Test
# bad
@example EnforcedStyle: module_function (default)
Supported styles are: module_function, extend_self.
module.
This cop checks for use of ‘extend self` or `module_function` in a

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    if extend_self_node?(node)
      corrector.replace(node.source_range, 'module_function')
    else
      corrector.replace(node.source_range, 'extend self')
    end
  end
end

def each_wrong_style(nodes)

def each_wrong_style(nodes)
  case style
  when :module_function
    private_directive = nodes.any? { |node| private_directive?(node) }
    nodes.each do |node|
      yield node if extend_self_node?(node) && !private_directive
    end
  when :extend_self
    nodes.each do |node|
      yield node if module_function_node?(node)
    end
  end
end

def message(_node)

def message(_node)
  style == :module_function ? MODULE_FUNCTION_MSG : EXTEND_SELF_MSG
end

def on_module(node)

def on_module(node)
  return unless node.body&.begin_type?
  each_wrong_style(node.body.children) do |child_node|
    add_offense(child_node)
  end
end