code: function block(node) {
    var self = this
    var options = self.options
    var fences = options.fences
    var gap = options.commonmark ? comment : triple
    var values = []
    var children = node.children
    var length = children.length
    var index = -1
    var prev
    var child
  
    while (++index < length) {
      prev = child
      child = children[index]
  
      if (prev) {
        // A list preceding another list that are equally ordered, or a
        // list preceding an indented code block, need a gap between them,
        // so as not to see them as one list, or content of the list,
        // respectively.
        //
        // In commonmark, only something that breaks both up can do that,
        // so we opt for an empty, invisible comment.  In other flavours,
        // two blank lines are fine.
        if (
          prev.type === 'list' &&
          ((child.type === 'list' && prev.ordered === child.ordered) ||
            (child.type === 'code' && (!child.lang && !fences)))
        ) {
          values.push(gap)
        } else {
          values.push(blank)
        }
      }
  
      values.push(self.visit(child, node))
    }
  
    return values.join('')
  }
docs: Stringify a block node with block children (e.g., `root` or `blockquote`). Knows about code following a list, or adjacent lists with similar bullets, and places an extra line feed between them.