UNPKG

php-parser

Version:

Parse PHP code from JS and returns its AST

112 lines (105 loc) 2.67 kB
/** * Copyright (C) 2018 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors * @url http://glayzzle.com */ "use strict"; /** * A generic AST node * @constructor Node * @memberOf module:php-parser * @property {Location|null} loc * @property {CommentBlock[]|Comment[]|null} leadingComments * @property {CommentBlock[]|Comment[]|null} trailingComments * @property {string} kind */ const Node = function Node(kind, docs, location) { this.kind = kind; if (docs) { this.leadingComments = docs; } if (location) { this.loc = location; } }; /** * Attach comments to current node * @function Node#setTrailingComments * @memberOf module:php-parser * @param {*} docs */ Node.prototype.setTrailingComments = function (docs) { this.trailingComments = docs; }; /** * Destroying an unused node * @function Node#destroy * @memberOf module:php-parser */ Node.prototype.destroy = function (node) { if (!node) { /* istanbul ignore next */ throw new Error( "Node already initialized, you must swap with another node", ); } if (this.leadingComments) { if (node.leadingComments) { node.leadingComments = Array.concat( this.leadingComments, node.leadingComments, ); } else { node.leadingComments = this.leadingComments; } } if (this.trailingComments) { if (node.trailingComments) { node.trailingComments = Array.concat( this.trailingComments, node.trailingComments, ); } else { node.trailingComments = this.trailingComments; } } return node; }; /** * Includes current token position of the parser * @function Node#includeToken * @memberOf module:php-parser * @param {*} parser */ Node.prototype.includeToken = function (parser) { if (this.loc) { if (this.loc.end) { this.loc.end.line = parser.lexer.yylloc.last_line; this.loc.end.column = parser.lexer.yylloc.last_column; this.loc.end.offset = parser.lexer.offset; } if (parser.ast.withSource) { this.loc.source = parser.lexer._input.substring( this.loc.start.offset, parser.lexer.offset, ); } } return this; }; /** * Helper for extending the Node class * @function Node.extends * @memberOf module:php-parser * @param {string} type * @param {Function} constructor * @return {Function} */ Node.extends = function (type, constructor) { constructor.prototype = Object.create(this.prototype); constructor.extends = this.extends; constructor.prototype.constructor = constructor; constructor.kind = type; return constructor; }; module.exports = Node;