]> git.proxmox.com Git - pve-eslint.git/blob - eslint/lib/rules/require-unicode-regexp.js
577ae6cf8271d114f6b005bd5692e62ea1544864
[pve-eslint.git] / eslint / lib / rules / require-unicode-regexp.js
1 /**
2 * @fileoverview Rule to enforce the use of `u` flag on RegExp.
3 * @author Toru Nagashima
4 */
5
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Requirements
10 //------------------------------------------------------------------------------
11
12 const {
13 CALL,
14 CONSTRUCT,
15 ReferenceTracker,
16 getStringIfConstant
17 } = require("eslint-utils");
18
19 //------------------------------------------------------------------------------
20 // Rule Definition
21 //------------------------------------------------------------------------------
22
23 /** @type {import('../shared/types').Rule} */
24 module.exports = {
25 meta: {
26 type: "suggestion",
27
28 docs: {
29 description: "enforce the use of `u` flag on RegExp",
30 recommended: false,
31 url: "https://eslint.org/docs/rules/require-unicode-regexp"
32 },
33
34 messages: {
35 requireUFlag: "Use the 'u' flag."
36 },
37
38 schema: []
39 },
40
41 create(context) {
42 return {
43 "Literal[regex]"(node) {
44 const flags = node.regex.flags || "";
45
46 if (!flags.includes("u")) {
47 context.report({ node, messageId: "requireUFlag" });
48 }
49 },
50
51 Program() {
52 const scope = context.getScope();
53 const tracker = new ReferenceTracker(scope);
54 const trackMap = {
55 RegExp: { [CALL]: true, [CONSTRUCT]: true }
56 };
57
58 for (const { node } of tracker.iterateGlobalReferences(trackMap)) {
59 const flagsNode = node.arguments[1];
60 const flags = getStringIfConstant(flagsNode, scope);
61
62 if (!flagsNode || (typeof flags === "string" && !flags.includes("u"))) {
63 context.report({ node, messageId: "requireUFlag" });
64 }
65 }
66 }
67 };
68 }
69 };