 # Public: Run a node script in a separate process.
 #
 # Used by the fuzzy-finder.
+#
+# ## Events
+#
+# * task:log - Emitted when console.log is called within the task.
+# * task:warn - Emitted when console.warn is called within the task.
+# * task:error - Emitted when console.error is called within the task.
+# * task:complete - Emitted when the task has succeeded or failed.
 module.exports =
 class Task
+<<<<<<< HEAD
   _.extend @prototype, EventEmitter
 
+=======
+  # Public: A helper method to easily launch and run a task once.
+  #
+  # * taskPath:
+  #   The path to the Coffeescript/Javascript file which exports a single
+  #   function to execute.
+  # * args:
+  #   The Array of arguments to pass to the exported function.
+>>>>>>> Add comments to Task
   @once: (taskPath, args...) ->
     task = new Task(taskPath)
     task.one 'task:completed', -> task.terminate()
     task.start(args...)
     task
 
+  # Public: Called upon task completion.
+  #
+  # It receives the same arguments that were passed to the task.
+  #
+  # If subclassed, this is intended to be overridden. However if {.start}
+  # receives a completion callback, this is overridden.
   callback: null
 
+  # Public: Creates a task.
+  #
+  # * taskPath:
+  #   The path to the Coffeescript/Javascript file that exports a single
+  #   function to execute.
   constructor: (taskPath) ->
     bootstrap = """
       require('coffee-script');


    @handleEvents()

  handleEvents: ->
    @childProcess.removeAllListeners()
    @childProcess.on 'message', ({event, args}) =>
      @trigger(event, args...)

  start: (args...) ->
    throw new Error("Cannot start terminated process") unless @childProcess?


    @callback = args.pop() if _.isFunction(args[args.length - 1])
    @childProcess.send({args})

  # Public: Forcefully stop the running task.
  #
  # No events are emitted.
  terminate: ->
    return unless @childProcess?

