class RuboCop::Cop::Sorbet::BlockMethodDefinition
end
end
# …
def good(args)
MyClass = Class.new do
# good
end
end
# …
define_method(:good) do |args|
yielding_method do
# good
end
end
# …
def bad(args)
Class.new do
# bad
end
end
# …
def bad(args)
yielding_method do
# bad
@example
def autocorrect_method_in_block(corrector, node)
def autocorrect_method_in_block(corrector, node) indent = offset(node) method_name = node.method_name args = node.arguments.map(&:source).join(", ") body = node.body&.source&.prepend("\n#{indent} ") if node.def_type? replacement = "define_method(:#{method_name}) do |#{args}|#{body}\n#{indent}end" elsif node.defs_type? receiver = node.receiver.source replacement = "#{receiver}.define_singleton_method(:#{method_name}) do |#{args}|#{body}\n#{indent}end" end corrector.replace(node, replacement) end
def on_block(node)
def on_block(node) if (parent = node.parent) return if parent.casgn_type? end node.each_descendant(:any_def) do |def_node| add_offense(def_node) do |corrector| autocorrect_method_in_block(corrector, def_node) end end end