class RuboCop::Cop::Discourse::Plugins::CallRequiresPlugin


end
end
def my_action
requires_plugin PLUGIN_NAME
class MyController
# good
end
end
def my_action
class MyController
# bad
@example
being accessible when the plugin is disabled.
Plugin controllers must call ‘requires_plugin` to prevent routes from

def base_controller_path(base_class)

def base_controller_path(base_class)
  return if base_class.blank?
  base_path = "#{base_class.underscore}.rb"
  path = Pathname.new("#{processed_source.path}/../").cleanpath
  until path.root?
    controller_path = path.join(base_path)
    return controller_path if controller_path.exist?
    path = path.join("..").cleanpath
  end
end

def on_class(node)

def on_class(node)
  return if requires_plugin_present?(node)
  return if requires_plugin_present_in_parent_classes(node)
  add_offense(node, message: MSG)
end

def requires_plugin_present_in_parent_classes(node)

def requires_plugin_present_in_parent_classes(node)
  return unless processed_source.path
  controller_path =
    base_controller_path(node.parent_class&.const_name.to_s)
  return unless controller_path
  Commissioner
    .new([self.class.new(config, @options)])
    .investigate(parse(controller_path.read, controller_path.to_s))
    .offenses
    .empty?
end