Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/eslint/lib/source-code/token-store/cursors.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
90 lines (78 sloc)
3.75 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @fileoverview Define 2 token factories; forward and backward. | |
* @author Toru Nagashima | |
*/ | |
"use strict"; | |
//------------------------------------------------------------------------------ | |
// Requirements | |
//------------------------------------------------------------------------------ | |
const BackwardTokenCommentCursor = require("./backward-token-comment-cursor"); | |
const BackwardTokenCursor = require("./backward-token-cursor"); | |
const FilterCursor = require("./filter-cursor"); | |
const ForwardTokenCommentCursor = require("./forward-token-comment-cursor"); | |
const ForwardTokenCursor = require("./forward-token-cursor"); | |
const LimitCursor = require("./limit-cursor"); | |
const SkipCursor = require("./skip-cursor"); | |
//------------------------------------------------------------------------------ | |
// Helpers | |
//------------------------------------------------------------------------------ | |
/** | |
* The cursor factory. | |
* @private | |
*/ | |
class CursorFactory { | |
/** | |
* Initializes this cursor. | |
* @param {Function} TokenCursor The class of the cursor which iterates tokens only. | |
* @param {Function} TokenCommentCursor The class of the cursor which iterates the mix of tokens and comments. | |
*/ | |
constructor(TokenCursor, TokenCommentCursor) { | |
this.TokenCursor = TokenCursor; | |
this.TokenCommentCursor = TokenCommentCursor; | |
} | |
/** | |
* Creates a base cursor instance that can be decorated by createCursor. | |
* @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. | |
* @param {boolean} includeComments The flag to iterate comments as well. | |
* @returns {Cursor} The created base cursor. | |
*/ | |
createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments) { | |
const Cursor = includeComments ? this.TokenCommentCursor : this.TokenCursor; | |
return new Cursor(tokens, comments, indexMap, startLoc, endLoc); | |
} | |
/** | |
* Creates a cursor that iterates tokens with normalized options. | |
* @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. | |
* @param {boolean} includeComments The flag to iterate comments as well. | |
* @param {Function|null} filter The predicate function to choose tokens. | |
* @param {number} skip The count of tokens the cursor skips. | |
* @param {number} count The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility. | |
* @returns {Cursor} The created cursor. | |
*/ | |
createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, count) { | |
let cursor = this.createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments); | |
if (filter) { | |
cursor = new FilterCursor(cursor, filter); | |
} | |
if (skip >= 1) { | |
cursor = new SkipCursor(cursor, skip); | |
} | |
if (count >= 0) { | |
cursor = new LimitCursor(cursor, count); | |
} | |
return cursor; | |
} | |
} | |
//------------------------------------------------------------------------------ | |
// Exports | |
//------------------------------------------------------------------------------ | |
exports.forward = new CursorFactory(ForwardTokenCursor, ForwardTokenCommentCursor); | |
exports.backward = new CursorFactory(BackwardTokenCursor, BackwardTokenCommentCursor); |