class RuboCop::Cop::Style::MixinUsage

This cop checks that `include`, `extend` and `prepend` statements appear inside classes and modules, not at the top level, so as to not affect the behavior of `Object`.

@example

# bad
include M

class C
end

# bad
extend M

class C
end

# bad
prepend M

class C
end

# good
class C
  include M
end

# good
class C
  extend M
end

# good
class C
  prepend M
end

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/style/mixin_usage.rb, line 52
def on_send(node)
  include_statement(node) do |statement|
    return if node.argument? ||
              accepted_include?(node) ||
              belongs_to_class_or_module?(node)

    add_offense(node, message: format(MSG, statement: statement))
  end
end

Private Instance Methods

accepted_include?(node) click to toggle source
# File lib/rubocop/cop/style/mixin_usage.rb, line 64
def accepted_include?(node)
  node.parent && node.macro?
end
belongs_to_class_or_module?(node) click to toggle source
# File lib/rubocop/cop/style/mixin_usage.rb, line 68
def belongs_to_class_or_module?(node)
  if !node.parent
    false
  else
    return true if node.parent.class_type? || node.parent.module_type?

    belongs_to_class_or_module?(node.parent)
  end
end