class RuboCop::Cop::Rake::DuplicateNamespace


end
end
task :hoge do
end
task :bar do
namespace :foo do
# good
end
end
task :hoge do
namespace :foo do
end
end
task :bar do
namespace :foo do
# bad
@example
This cop detects it.
It is redundant. You should squash them into one definition.
in definition order.
If namespaces are defined with the same name, Rake executes the both namespaces

def initialize(*)

def initialize(*)
  super
  @namespaces = {}
end

def message_for_dup(previous:, current:, namespace:)

def message_for_dup(previous:, current:, namespace:)
  format(
    MSG,
    namespace: namespace,
    previous: source_location(previous),
    current: source_location(current),
  )
end

def namespaces(node)

def namespaces(node)
  ns = []
  node.each_ancestor(:block) do |block_node|
    send_node = block_node.send_node
    next unless send_node.method?(:namespace)
    name = Helper::TaskName.task_name(send_node)
    ns << name
  end
  ns
end

def on_namespace(node)

def on_namespace(node)
  namespaces = namespaces(node)
  return if namespaces.include?(nil)
  full_name = namespaces.reverse.join(':')
  if (previous = @namespaces[full_name])
    message = message_for_dup(previous: previous, current: node, namespace: full_name)
    add_offense(node, message: message)
  else
    @namespaces[full_name] = node
  end
end

def source_location(node)

def source_location(node)
  range = node.source_range
  path = smart_path(range.source_buffer.name)
  "#{path}:#{range.line}"
end