code: function matchAdjacentSiblings(nodes, predicate, root) {
    return nodes.reduce((matches, node) => {
      const parent = findParentNode(root, node);
      // If there's no parent, there's no siblings
      if (!parent) {
        return matches;
      }
      const parentChildren = childrenOfNode(parent);
      const nodeIndex = parentChildren.indexOf(node);
      const adjacentSibling = parentChildren[nodeIndex + 1];
      // No sibling
      if (!adjacentSibling) {
        return matches;
      }
      if (predicate(adjacentSibling)) {
        matches.push(adjacentSibling);
      }
      return matches;
    }, []);
  }
docs: Matches only nodes which are adjacent siblings (direct next sibling)
  against a predicate, returning those that match.
  @param {Array<Node>} nodes
  @param {Function} predicate
  @param {Node} root