whole_func_string: function removeFakeRootElements(ast) {
    var injectedNodes = queryAll(
      ast,
      AND(function(node) {
        return !node.__location;
      }, hasMatchingTagName(/^(html|head|body)$/i)),
      undefined,
      // Don't descend past 3 levels 'document > html > head|body'
      function(node) {
        return node.parentNode && node.parentNode.parentNode ? undefined : node.childNodes;
      },
    );
    injectedNodes.reverse().forEach(removeNodeSaveChildren);
  }
func_code_string: function removeFakeRootElements(ast) {
    var injectedNodes = queryAll(
      ast,
      AND(function(node) {
        return !node.__location;
      }, hasMatchingTagName(/^(html|head|body)$/i)),
      undefined,
      // Don't descend past 3 levels 'document > html > head|body'
      function(node) {
        return node.parentNode && node.parentNode.parentNode ? undefined : node.childNodes;
      },
    );
    injectedNodes.reverse().forEach(removeNodeSaveChildren);
  }
func_documentation_string: When parse5 parses an HTML document with `parse`, it injects missing root
  elements (html, head and body) if they are missing.  This function removes
  these from the AST if they have no location info, so it requires that
  the `parse5.parse` be used with the `locationInfo` option of `true`.