.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / rules / wrap-regex.js
1 /**
2  * @fileoverview Rule to flag when regex literals are not wrapped in parens
3  * @author Matt DuVall <http://www.mattduvall.com>
4  */
5
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Rule Definition
10 //------------------------------------------------------------------------------
11
12 module.exports = {
13     meta: {
14         type: "layout",
15
16         docs: {
17             description: "require parenthesis around regex literals",
18             category: "Stylistic Issues",
19             recommended: false,
20             url: "https://eslint.org/docs/rules/wrap-regex"
21         },
22
23         schema: [],
24         fixable: "code",
25
26         messages: {
27             requireParens: "Wrap the regexp literal in parens to disambiguate the slash."
28         }
29     },
30
31     create(context) {
32         const sourceCode = context.getSourceCode();
33
34         return {
35
36             Literal(node) {
37                 const token = sourceCode.getFirstToken(node),
38                     nodeType = token.type;
39
40                 if (nodeType === "RegularExpression") {
41                     const beforeToken = sourceCode.getTokenBefore(node);
42                     const afterToken = sourceCode.getTokenAfter(node);
43                     const ancestors = context.getAncestors();
44                     const grandparent = ancestors[ancestors.length - 1];
45
46                     if (grandparent.type === "MemberExpression" && grandparent.object === node &&
47                         !(beforeToken && beforeToken.value === "(" && afterToken && afterToken.value === ")")) {
48                         context.report({
49                             node,
50                             messageId: "requireParens",
51                             fix: fixer => fixer.replaceText(node, `(${sourceCode.getText(node)})`)
52                         });
53                     }
54                 }
55             }
56         };
57
58     }
59 };