class RuboCop::Cop::Lint::NestedMethodDefinition
This cop checks for nested method definitions.
@example
# `bar` definition actually produces methods in the same scope # as the outer `foo` method. Furthermore, the `bar` method # will be redefined every time `foo` is invoked. def foo def bar end end
Constants
- MSG
Public Instance Methods
find_nested_defs(node) { |child| ... }
click to toggle source
# File lib/rubocop/cop/lint/nested_method_definition.rb, line 30 def find_nested_defs(node, &block) node.each_child_node do |child| if child.def_type? yield child elsif child.defs_type? subject, = *child next if subject.lvar_type? yield child elsif !ignored_child?(child) find_nested_defs(child, &block) end end end
on_method_def(node, _method_name, _args, _body)
click to toggle source
# File lib/rubocop/cop/lint/nested_method_definition.rb, line 24 def on_method_def(node, _method_name, _args, _body) find_nested_defs(node) do |nested_def_node| add_offense(nested_def_node, :expression) end end
Private Instance Methods
ignored_child?(child)
click to toggle source
# File lib/rubocop/cop/lint/nested_method_definition.rb, line 46 def ignored_child?(child) eval_call?(child) || class_or_module_or_struct_new_call?(child) end