       get: ->
         (navInContext child, context.concat name for [child, name] in (
           [child, name] for name, child of nav.children)
-            .sort ([a, _], [b, __]) -> a.order - b.order) # XXX use splats?
+            .sort ([a, ...], [b, ...]) -> a.order - b.order)
     siblings:
       enumerable: yes
       get: ->

    orders  = [ orders ]  unless Array.isArray orders
    skips   = [ skips ]   unless Array.isArray orders

    files = []

    through (file, encoding, transformCallback) ->
      # if vinyl objects have different properties, take first that exists
      source = (file[source] for source in sources).reduce (x, y) -> x ?= y
      source ?= file  # just look for title and order on the vinyl obj itself
      for skip in skips
        if skip of source and source[skip]
          @push file
          return transformCallback()
      title = (source[title] for title in titles).reduce (x, y) -> x ?= y
      order = (source[order] for order in orders).reduce (x, y) -> x ?= y
      # insert new nav into the tree
      nav = insertNavIntoTree file.relative, hrefExtension, title, order
      # set properties of vinyl object XXX does this need error handling?
      for target in targets
        obj = file

      # ...and now we've seen them all
      @push file for file in files
      flushCallback()

# Create the actual nav object that will be exposed to user code. This object
# knows (and the objects that it creates, in turn, know) the context in which
