1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /**
- * @author Toru Nagashima <https://github.com/mysticatea>
- * See LICENSE file in root directory for full license.
- */
- "use strict"
- const {
- CALL,
- CONSTRUCT,
- PatternMatcher,
- ReferenceTracker,
- getStringIfConstant,
- } = require("eslint-utils")
- module.exports = {
- /**
- * Define generator to search pattern.
- * The iterator generated by the generator returns the start and end index of the match.
- * @param {RegExp} pattern Base pattern
- * @returns {function(string):IterableIterator<RegExpExecArray>} generator
- */
- definePatternSearchGenerator(pattern) {
- const matcher = new PatternMatcher(pattern)
- return matcher.execAll.bind(matcher)
- },
- /**
- * Check whether a given token is a comma token or not.
- * @param {Token} token The token to check.
- * @returns {boolean} `true` if the token is a comma token.
- */
- isCommaToken(token) {
- return (
- token != null && token.type === "Punctuator" && token.value === ","
- )
- },
- /**
- * Iterate the calls of the `RegExp` global variable.
- * @param {Scope} globalScope The global scope object.
- * @returns {IterableIterator<{node:Node,pattern:(string|null),flags:(string|null)}>} The iterator of `CallExpression` or `NewExpression` for `RegExp`.
- */
- *getRegExpCalls(globalScope) {
- const tracker = new ReferenceTracker(globalScope)
- for (const { node } of tracker.iterateGlobalReferences({
- RegExp: { [CALL]: true, [CONSTRUCT]: true },
- })) {
- const [patternNode, flagsNode] = node.arguments
- yield {
- node,
- pattern: getStringIfConstant(patternNode, globalScope),
- flags: getStringIfConstant(flagsNode, globalScope),
- }
- }
- },
- }
|