123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- exports.setInnerComments = setInnerComments;
- var _base = require("./base");
- function setTrailingComments(node, comments) {
- if (node.trailingComments === undefined) {
- node.trailingComments = comments;
- } else {
- node.trailingComments.unshift(...comments);
- }
- }
- function setLeadingComments(node, comments) {
- if (node.leadingComments === undefined) {
- node.leadingComments = comments;
- } else {
- node.leadingComments.unshift(...comments);
- }
- }
- function setInnerComments(node, comments) {
- if (node.innerComments === undefined) {
- node.innerComments = comments;
- } else {
- node.innerComments.unshift(...comments);
- }
- }
- function adjustInnerComments(node, elements, commentWS) {
- let lastElement = null;
- let i = elements.length;
- while (lastElement === null && i > 0) {
- lastElement = elements[--i];
- }
- if (lastElement === null || lastElement.start > commentWS.start) {
- setInnerComments(node, commentWS.comments);
- } else {
- setTrailingComments(lastElement, commentWS.comments);
- }
- }
- class CommentsParser extends _base.default {
- addComment(comment) {
- if (this.filename) comment.loc.filename = this.filename;
- this.state.comments.push(comment);
- }
- processComment(node) {
- const {
- commentStack
- } = this.state;
- const commentStackLength = commentStack.length;
- if (commentStackLength === 0) return;
- let i = commentStackLength - 1;
- const lastCommentWS = commentStack[i];
- if (lastCommentWS.start === node.end) {
- lastCommentWS.leadingNode = node;
- i--;
- }
- const {
- start: nodeStart
- } = node;
- for (; i >= 0; i--) {
- const commentWS = commentStack[i];
- const commentEnd = commentWS.end;
- if (commentEnd > nodeStart) {
- commentWS.containingNode = node;
- this.finalizeComment(commentWS);
- commentStack.splice(i, 1);
- } else {
- if (commentEnd === nodeStart) {
- commentWS.trailingNode = node;
- }
- break;
- }
- }
- }
- finalizeComment(commentWS) {
- const {
- comments
- } = commentWS;
- if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {
- if (commentWS.leadingNode !== null) {
- setTrailingComments(commentWS.leadingNode, comments);
- }
- if (commentWS.trailingNode !== null) {
- setLeadingComments(commentWS.trailingNode, comments);
- }
- } else {
- const {
- containingNode: node,
- start: commentStart
- } = commentWS;
- if (this.input.charCodeAt(commentStart - 1) === 44) {
- switch (node.type) {
- case "ObjectExpression":
- case "ObjectPattern":
- case "RecordExpression":
- adjustInnerComments(node, node.properties, commentWS);
- break;
- case "CallExpression":
- case "OptionalCallExpression":
- adjustInnerComments(node, node.arguments, commentWS);
- break;
- case "FunctionDeclaration":
- case "FunctionExpression":
- case "ArrowFunctionExpression":
- case "ObjectMethod":
- case "ClassMethod":
- case "ClassPrivateMethod":
- adjustInnerComments(node, node.params, commentWS);
- break;
- case "ArrayExpression":
- case "ArrayPattern":
- case "TupleExpression":
- adjustInnerComments(node, node.elements, commentWS);
- break;
- case "ExportNamedDeclaration":
- case "ImportDeclaration":
- adjustInnerComments(node, node.specifiers, commentWS);
- break;
- default:
- {
- setInnerComments(node, comments);
- }
- }
- } else {
- setInnerComments(node, comments);
- }
- }
- }
- finalizeRemainingComments() {
- const {
- commentStack
- } = this.state;
- for (let i = commentStack.length - 1; i >= 0; i--) {
- this.finalizeComment(commentStack[i]);
- }
- this.state.commentStack = [];
- }
- resetPreviousNodeTrailingComments(node) {
- const {
- commentStack
- } = this.state;
- const {
- length
- } = commentStack;
- if (length === 0) return;
- const commentWS = commentStack[length - 1];
- if (commentWS.leadingNode === node) {
- commentWS.leadingNode = null;
- }
- }
- resetPreviousIdentifierLeadingComments(node) {
- const {
- commentStack
- } = this.state;
- const {
- length
- } = commentStack;
- if (length === 0) return;
- if (commentStack[length - 1].trailingNode === node) {
- commentStack[length - 1].trailingNode = null;
- } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {
- commentStack[length - 2].trailingNode = null;
- }
- }
- takeSurroundingComments(node, start, end) {
- const {
- commentStack
- } = this.state;
- const commentStackLength = commentStack.length;
- if (commentStackLength === 0) return;
- let i = commentStackLength - 1;
- for (; i >= 0; i--) {
- const commentWS = commentStack[i];
- const commentEnd = commentWS.end;
- const commentStart = commentWS.start;
- if (commentStart === end) {
- commentWS.leadingNode = node;
- } else if (commentEnd === start) {
- commentWS.trailingNode = node;
- } else if (commentEnd < start) {
- break;
- }
- }
- }
- }
- exports.default = CommentsParser;
- //# sourceMappingURL=comments.js.map
|