From 8ad592b61ff66c8ca51bbb5966b1fa312f0140cf Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Tue, 20 Sep 2022 03:08:59 +0800 Subject: [PATCH] `better-regexp`: Don't fix if `.source` or `.toString()` is used (#1903) --- rules/better-regex.js | 21 +++++++++++++++++++-- test/better-regex.mjs | 10 ++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/rules/better-regex.js b/rules/better-regex.js index cddb78f7ff..6f03f78d05 100644 --- a/rules/better-regex.js +++ b/rules/better-regex.js @@ -51,15 +51,32 @@ const create = context => { return; } - return { + const problem = { node, messageId: MESSAGE_ID, data: { original, optimized, }, - fix: fixer => fixer.replaceText(node, optimized), }; + + if ( + node.parent.type === 'MemberExpression' + && node.parent.object === node + && !node.parent.optional + && !node.parent.computed + && node.parent.property.type === 'Identifier' + && ( + node.parent.property.name === 'toString' + || node.parent.property.name === 'source' + ) + ) { + return problem; + } + + return Object.assign(problem, { + fix: fixer => fixer.replaceText(node, optimized), + }); }, [newRegExp](node) { const [patternNode, flagsNode] = node.arguments; diff --git a/test/better-regex.mjs b/test/better-regex.mjs index 73a58c4377..de3ec56bc0 100644 --- a/test/better-regex.mjs +++ b/test/better-regex.mjs @@ -311,5 +311,15 @@ test({ ], parser: require.resolve('@typescript-eslint/parser'), }, + + // Not fixable + { + code: 'const foo = /[0-9]/.toString', + errors: createError('/[0-9]/', '/\\d/'), + }, + { + code: 'const foo = /[0-9]/.source', + errors: createError('/[0-9]/', '/\\d/'), + }, ], });