]>
Commit | Line | Data |
---|---|---|
eb39fafa DC |
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 | ||
34eeec05 | 12 | /** @type {import('../shared/types').Rule} */ |
eb39fafa DC |
13 | module.exports = { |
14 | meta: { | |
15 | type: "layout", | |
16 | ||
17 | docs: { | |
8f9d1d4d | 18 | description: "Require parenthesis around regex literals", |
eb39fafa | 19 | recommended: false, |
f2a92ac6 | 20 | url: "https://eslint.org/docs/latest/rules/wrap-regex" |
eb39fafa DC |
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) { | |
f2a92ac6 | 32 | const sourceCode = context.sourceCode; |
eb39fafa DC |
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); | |
f2a92ac6 | 43 | const { parent } = node; |
eb39fafa | 44 | |
f2a92ac6 | 45 | if (parent.type === "MemberExpression" && parent.object === node && |
eb39fafa DC |
46 | !(beforeToken && beforeToken.value === "(" && afterToken && afterToken.value === ")")) { |
47 | context.report({ | |
48 | node, | |
49 | messageId: "requireParens", | |
50 | fix: fixer => fixer.replaceText(node, `(${sourceCode.getText(node)})`) | |
51 | }); | |
52 | } | |
53 | } | |
54 | } | |
55 | }; | |
56 | ||
57 | } | |
58 | }; |