@@ -20,99 +20,98 @@ const create = context => {
2020 ignoreList . push ( 'charClassClassrangesMerge' ) ;
2121 }
2222
23- return {
24- Literal ( node ) {
25- if ( ! isRegexLiteral ( node ) ) {
26- return ;
27- }
28-
29- const { raw : original , regex} = node ;
30- // Regular Expressions with `u` and `v` flag are not well handled by `regexp-tree`
31- // https://github.com/DmitrySoshnikov/regexp-tree/issues/162
32- if ( regex . flags . includes ( 'u' ) || regex . flags . includes ( 'v' ) ) {
33- return ;
34- }
35-
36- let optimized = original ;
37-
38- try {
39- optimized = regexpTree . optimize ( original , undefined , { blacklist : ignoreList } ) . toString ( ) ;
40- } catch ( error ) {
41- return {
42- node,
43- messageId : MESSAGE_ID_PARSE_ERROR ,
44- data : {
45- original,
46- error : error . message ,
47- } ,
48- } ;
49- }
50-
51- if ( original === optimized ) {
52- return ;
53- }
54-
55- const problem = {
23+ context . on ( 'Literal' , node => {
24+ if ( ! isRegexLiteral ( node ) ) {
25+ return ;
26+ }
27+
28+ const { raw : original , regex} = node ;
29+ // Regular Expressions with `u` and `v` flag are not well handled by `regexp-tree`
30+ // https://github.com/DmitrySoshnikov/regexp-tree/issues/162
31+ if ( regex . flags . includes ( 'u' ) || regex . flags . includes ( 'v' ) ) {
32+ return ;
33+ }
34+
35+ let optimized = original ;
36+
37+ try {
38+ optimized = regexpTree . optimize ( original , undefined , { blacklist : ignoreList } ) . toString ( ) ;
39+ } catch ( error ) {
40+ return {
5641 node,
57- messageId : MESSAGE_ID ,
42+ messageId : MESSAGE_ID_PARSE_ERROR ,
5843 data : {
5944 original,
60- optimized ,
45+ error : error . message ,
6146 } ,
6247 } ;
63-
64- if (
65- node . parent . type === 'MemberExpression'
66- && node . parent . object === node
67- && ! node . parent . optional
68- && ! node . parent . computed
69- && node . parent . property . type === 'Identifier'
70- && (
71- node . parent . property . name === 'toString'
72- || node . parent . property . name === 'source'
73- )
74- ) {
75- return problem ;
76- }
77-
78- return Object . assign ( problem , {
79- fix : fixer => fixer . replaceText ( node , optimized ) ,
80- } ) ;
81- } ,
82- NewExpression ( node ) {
83- if ( ! isNewExpression ( node , { name : 'RegExp' , minimumArguments : 1 } ) ) {
84- return ;
85- }
86-
87- const [ patternNode , flagsNode ] = node . arguments ;
88-
89- if ( ! isStringLiteral ( patternNode ) ) {
90- return ;
91- }
92-
93- const oldPattern = patternNode . value ;
94- const flags = isStringLiteral ( flagsNode )
95- ? flagsNode . value
96- : '' ;
97-
98- const newPattern = cleanRegexp ( oldPattern , flags ) ;
99-
100- if ( oldPattern !== newPattern ) {
101- return {
102- node,
103- messageId : MESSAGE_ID ,
104- data : {
105- original : oldPattern ,
106- optimized : newPattern ,
107- } ,
108- fix : fixer => fixer . replaceText (
109- patternNode ,
110- escapeString ( newPattern , patternNode . raw . charAt ( 0 ) ) ,
111- ) ,
112- } ;
113- }
114- } ,
115- } ;
48+ }
49+
50+ if ( original === optimized ) {
51+ return ;
52+ }
53+
54+ const problem = {
55+ node,
56+ messageId : MESSAGE_ID ,
57+ data : {
58+ original,
59+ optimized,
60+ } ,
61+ } ;
62+
63+ if (
64+ node . parent . type === 'MemberExpression'
65+ && node . parent . object === node
66+ && ! node . parent . optional
67+ && ! node . parent . computed
68+ && node . parent . property . type === 'Identifier'
69+ && (
70+ node . parent . property . name === 'toString'
71+ || node . parent . property . name === 'source'
72+ )
73+ ) {
74+ return problem ;
75+ }
76+
77+ return Object . assign ( problem , {
78+ fix : fixer => fixer . replaceText ( node , optimized ) ,
79+ } ) ;
80+ } ) ;
81+
82+ context . on ( 'NewExpression' , node => {
83+ if ( ! isNewExpression ( node , { name : 'RegExp' , minimumArguments : 1 } ) ) {
84+ return ;
85+ }
86+
87+ const [ patternNode , flagsNode ] = node . arguments ;
88+
89+ if ( ! isStringLiteral ( patternNode ) ) {
90+ return ;
91+ }
92+
93+ const oldPattern = patternNode . value ;
94+ const flags = isStringLiteral ( flagsNode )
95+ ? flagsNode . value
96+ : '' ;
97+
98+ const newPattern = cleanRegexp ( oldPattern , flags ) ;
99+
100+ if ( oldPattern !== newPattern ) {
101+ return {
102+ node,
103+ messageId : MESSAGE_ID ,
104+ data : {
105+ original : oldPattern ,
106+ optimized : newPattern ,
107+ } ,
108+ fix : fixer => fixer . replaceText (
109+ patternNode ,
110+ escapeString ( newPattern , patternNode . raw . charAt ( 0 ) ) ,
111+ ) ,
112+ } ;
113+ }
114+ } ) ;
116115} ;
117116
118117const schema = [
0 commit comments