Blame view
node_modules/eslint/lib/token-store/backward-token-comment-cursor.js
1.99 KB
f7563de62
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/** * @fileoverview Define the cursor which iterates tokens and comments in reverse. * @author Toru Nagashima */ "use strict"; //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ const Cursor = require("./cursor"); const utils = require("./utils"); //------------------------------------------------------------------------------ // Exports //------------------------------------------------------------------------------ /** * The cursor which iterates tokens and comments in reverse. */ module.exports = class BackwardTokenCommentCursor extends Cursor { /** * Initializes this cursor. * @param {Token[]} tokens - The array of tokens. * @param {Comment[]} comments - The array of comments. * @param {Object} indexMap - The map from locations to indices in `tokens`. * @param {number} startLoc - The start location of the iteration range. * @param {number} endLoc - The end location of the iteration range. */ constructor(tokens, comments, indexMap, startLoc, endLoc) { super(); this.tokens = tokens; this.comments = comments; this.tokenIndex = utils.getLastIndex(tokens, indexMap, endLoc); this.commentIndex = utils.search(comments, endLoc) - 1; this.border = startLoc; } /** @inheritdoc */ moveNext() { const token = (this.tokenIndex >= 0) ? this.tokens[this.tokenIndex] : null; const comment = (this.commentIndex >= 0) ? this.comments[this.commentIndex] : null; if (token && (!comment || token.range[1] > comment.range[1])) { this.current = token; this.tokenIndex -= 1; } else if (comment) { this.current = comment; this.commentIndex -= 1; } else { this.current = null; } return Boolean(this.current) && (this.border === -1 || this.current.range[0] >= this.border); } }; |