class RuboCop::Cop::Style::TopLevelMethodDefinition

end
define_method(:foo) { puts 1 }
class Foo
# good
end
end
def some_method
Struct.new do
# good
end
end
def self.some_method
class Foo
# good
end
end
def some_method
module Foo
# good
define_method(:foo) { puts 1 }
# bad
end
def self.some_method
# bad
end
def some_method
# bad
@example
Hence this cop is disabled by default.
However for ruby scripts it is perfectly fine to use top-level methods.
This cop looks for definitions of top-level methods and warns about them.
when ideally they should be organized in appropriate classes or modules.
Newcomers to ruby applications may write top-level methods,

def on_block(node)

def on_block(node)
  return unless define_method_block?(node) && top_level_method_definition?(node)
  add_offense(node)
end

def on_def(node)

def on_def(node)
  return unless top_level_method_definition?(node)
  add_offense(node)
end

def top_level_method_definition?(node)

def top_level_method_definition?(node)
  if node.parent&.begin_type?
    node.parent.root?
  else
    node.root?
  end
end