File tree Expand file tree Collapse file tree 4 files changed +1084
-0
lines changed Expand file tree Collapse file tree 4 files changed +1084
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @fileoverview Optimize regex literals
3
+ * @author Ezinwa Okpoechi
4
+ */
5
+ "use strict" ;
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ var requireIndex = require ( "requireindex" ) ;
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Plugin Definition
15
+ //------------------------------------------------------------------------------
16
+
17
+ // import all rules in lib/rules
18
+ module . exports . rules = requireIndex ( __dirname + "/rules" ) ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @fileoverview Optimize regex literals
3
+ * @author Ezinwa Okpoechi
4
+ */
5
+
6
+ 'use strict' ;
7
+
8
+ const { optimize } = require ( 'regexp-tree' ) ;
9
+
10
+ //------------------------------------------------------------------------------
11
+ // Rule Definition
12
+ //------------------------------------------------------------------------------
13
+
14
+ module . exports = {
15
+ meta : {
16
+ docs : {
17
+ description : 'Optimize regex literals' ,
18
+ category : 'Fill me in' ,
19
+ recommended : true ,
20
+ } ,
21
+ fixable : 'code' ,
22
+ schema : [ ] ,
23
+ } ,
24
+
25
+ create : function ( context ) {
26
+ const sourceCode = context . getSourceCode ( ) ;
27
+
28
+ /**
29
+ * Validate regular expression literals
30
+ * @param {ASTNode } node node to validate
31
+ * @returns {void }
32
+ * @private
33
+ */
34
+
35
+ function checkLiteral ( node ) {
36
+ const { type, value, start } = sourceCode . getFirstToken ( node ) ;
37
+
38
+ if ( type !== 'RegularExpression' ) {
39
+ return ;
40
+ }
41
+
42
+ const optimizedRegex = optimize ( value ) . toRegExp ( ) ;
43
+
44
+ if ( value === optimizedRegex . toString ( ) ) {
45
+ return ;
46
+ }
47
+
48
+ context . report ( {
49
+ node,
50
+ message : '{{original}} can be optimized to {{optimized}}' ,
51
+ data : {
52
+ original : value ,
53
+ optimized : optimizedRegex ,
54
+ } ,
55
+ fix ( fixer ) {
56
+ return fixer . replaceText ( node , optimizedRegex . toString ( ) ) ;
57
+ } ,
58
+ } ) ;
59
+ }
60
+
61
+ return {
62
+ Literal : checkLiteral ,
63
+ } ;
64
+ } ,
65
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @fileoverview Optimize regex literals
3
+ * @author Ezinwa Okpoechi
4
+ */
5
+
6
+ 'use strict' ;
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ var rule = require ( '../../../lib/rules/optimize-regex' ) ,
13
+ RuleTester = require ( 'eslint' ) . RuleTester ;
14
+
15
+ var ruleTester = new RuleTester ( ) ;
16
+ ruleTester . run ( 'optimize-regex' , rule , {
17
+ valid : [ 'var foo = /foo/i' ] ,
18
+
19
+ invalid : [
20
+ {
21
+ code : 'var re = /[a-zA-Z_0-9][A-Z_\\da-z]*\\e{1,}/' ,
22
+ output : 'var re = /\\w+e+/' ,
23
+ errors : [
24
+ {
25
+ message : '/[a-zA-Z_0-9][A-Z_\\da-z]*\\e{1,}/ can be optimized to /\\w+e+/' ,
26
+ type : 'Literal' ,
27
+ } ,
28
+ ] ,
29
+ } ,
30
+ ] ,
31
+ } ) ;
You can’t perform that action at this time.
0 commit comments