class RuboCop::Cop::Rake::Desc


end
task :do_something do
desc ‘Do something’
# good
task :do_something
desc ‘Do something’
# good
end
task :do_something do
# bad
task :do_something
# bad
@example
because the default task is executed with ‘rake` without command.
Note: This cop does not require description for the default task,
task that does not have `desc` by `rake -T`.
It is useful as a documentation of task. And Rake does not display
Rake task definition should have a description with `desc` method.

def can_insert_desc_to?(parent)

def can_insert_desc_to?(parent)
.type?(:begin, :block, :kwbegin)

def on_task(node)

def on_task(node)
  return if task_with_desc?(node)
  return if Helper::TaskName.task_name(node) == :default
  requirements = prerequisites(node)
  return if requirements&.array_type?
  add_offense(node)
end

def parent_and_task(task_node)

def parent_and_task(task_node)
 = task_node.parent
 nil, task_node unless parent
 parent, task_node unless parent.block_type?
ent.children.find_index(task_node) == 0
en task {}
ent.parent, parent]
en something { task }
ent, task_node]

def task_with_desc?(node)

def task_with_desc?(node)
, task = parent_and_task(node)
 false unless parent
 true unless can_insert_desc_to?(parent)
parent.children.find_index(task) - 1
andidate = parent.children[idx]
 false unless desc_candidate
andidate.send_type? && desc_candidate.method?(:desc)