class RuboCop::Cop::Style::TopLevelMethodDefinition

Newcomers to ruby applications may write top-level methods, when ideally they should be organized in appropriate classes or modules. This cop looks for definitions of top-level methods and warns about them.

However for ruby scripts it is perfectly fine to use top-level methods. Hence this cop is disabled by default.

@example

# bad
def some_method
end

# bad
def self.some_method
end

# bad
define_method(:foo) { puts 1 }

# good
module Foo
  def some_method
  end
end

# good
class Foo
  def self.some_method
  end
end

# good
Struct.new do
  def some_method
  end
end

# good
class Foo
  define_method(:foo) { puts 1 }
end

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/style/top_level_method_definition.rb, line 60
def on_block(node)
  return unless define_method_block?(node) && top_level_method_definition?(node)

  add_offense(node)
end
Also aliased as: on_numblock
on_def(node) click to toggle source
# File lib/rubocop/cop/style/top_level_method_definition.rb, line 52
def on_def(node)
  return unless top_level_method_definition?(node)

  add_offense(node)
end
Also aliased as: on_defs, on_send
on_defs(node)
Alias for: on_def
on_numblock(node)
Alias for: on_block
on_send(node)
Alias for: on_def

Private Instance Methods

top_level_method_definition?(node) click to toggle source
# File lib/rubocop/cop/style/top_level_method_definition.rb, line 70
def top_level_method_definition?(node)
  if node.parent&.begin_type?
    node.parent.root?
  else
    node.root?
  end
end