From adb83823078ce059fc58c558916f13faddfc2030 Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 30 Nov 2019 11:55:25 +0800 Subject: [PATCH] Simplify `regex-shorthand` logic --- rules/regex-shorthand.js | 36 +++++++++--------------------------- test/regex-shorthand.js | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/rules/regex-shorthand.js b/rules/regex-shorthand.js index 63e3b2f426..1d12baef76 100644 --- a/rules/regex-shorthand.js +++ b/rules/regex-shorthand.js @@ -1,6 +1,6 @@ 'use strict'; const cleanRegexp = require('clean-regexp'); -const {generate, optimize, parse} = require('regexp-tree'); +const {optimize} = require('regexp-tree'); const getDocumentationUrl = require('./utils/get-documentation-url'); const quoteString = require('./utils/quote-string'); @@ -9,32 +9,16 @@ const message = 'Use regex shorthands to improve readability.'; const create = context => { return { 'Literal[regex]': node => { - const {type, value} = context.getSourceCode().getFirstToken(node); + const {raw: original} = node; - if (type !== 'RegularExpression') { - return; - } - - let parsedSource; + let optimized try { - parsedSource = parse(value); - } catch (error) { - context.report({ - node, - message: '{{original}} can\'t be parsed: {{message}}', - data: { - original: value, - message: error.message - } - }); - + optimized = optimize(original).toString(); + } catch (_) { return; } - const originalRegex = generate(parsedSource).toString(); - const optimizedRegex = optimize(value).toString(); - - if (originalRegex === optimizedRegex) { + if (!optimized || original === optimized) { return; } @@ -42,12 +26,10 @@ const create = context => { node, message: '{{original}} can be optimized to {{optimized}}', data: { - original: value, - optimized: optimizedRegex + original, + optimized }, - fix(fixer) { - return fixer.replaceText(node, optimizedRegex); - } + fix: fixer => fixer.replaceText(node, optimized) }); }, 'NewExpression[callee.name="RegExp"]': node => { diff --git a/test/regex-shorthand.js b/test/regex-shorthand.js index d1a6fd6f20..5ebcf44f92 100644 --- a/test/regex-shorthand.js +++ b/test/regex-shorthand.js @@ -20,20 +20,28 @@ ruleTester.run('regex-shorthand', rule, { valid: [ 'const foo = /\\d/', 'const foo = /\\W/i', - 'const foo = /\\w/ig', - 'const foo = /[a-z]/ig', - 'const foo = /\\d*?/ig', + 'const foo = /\\w/gi', + 'const foo = /[a-z]/gi', + 'const foo = /\\d*?/gi', 'const foo = new RegExp(\'\\d\')', 'const foo = new RegExp(\'\\d\', \'ig\')', 'const foo = new RegExp(\'\\d*?\')', 'const foo = new RegExp(\'[a-z]\', \'i\')', 'const foo = new RegExp(/\\d/)', - 'const foo = new RegExp(/\\d/ig)', + 'const foo = new RegExp(/\\d/gi)', 'const foo = new RegExp(/\\d/, \'ig\')', 'const foo = new RegExp(/\\d*?/)', 'const foo = new RegExp(/[a-z]/, \'i\')' ], invalid: [ + { + code: 'const foo = /\\w/ig', + errors: [{ + ...error, + message: '/\\w/ig can be optimized to /\\w/gi' + }], + output: 'const foo = /\\w/gi' + }, { code: 'const foo = /[0-9]/', errors: [{