1- import { getDocsUrl , getNodeName , isDescribe , isTestCase } from './util' ;
1+ import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils' ;
2+ import { createRule , getNodeName , isDescribe , isTestCase } from './tsUtils' ;
23
3- export default {
4+ export default createRule ( {
5+ name : __filename ,
46 meta : {
57 docs : {
6- url : getDocsUrl ( __filename ) ,
8+ category : 'Best Practices' ,
9+ description : 'Have control over `test` and `it` usages' ,
10+ recommended : false ,
711 } ,
812 fixable : 'code' ,
913 messages : {
@@ -26,7 +30,14 @@ export default {
2630 additionalProperties : false ,
2731 } ,
2832 ] ,
33+ type : 'suggestion' ,
2934 } ,
35+ defaultOptions : [
36+ { fn : 'test' , withinDescribe : 'it' } as {
37+ fn ?: 'it' | 'test' ;
38+ withinDescribe ?: 'it' | 'test' ;
39+ } ,
40+ ] ,
3041 create ( context ) {
3142 const configObj = context . options [ 0 ] || { } ;
3243 const testKeyword = configObj . fn || 'test' ;
@@ -39,6 +50,10 @@ export default {
3950 CallExpression ( node ) {
4051 const nodeName = getNodeName ( node . callee ) ;
4152
53+ if ( ! nodeName ) {
54+ return ;
55+ }
56+
4257 if ( isDescribe ( node ) ) {
4358 describeNestingLevel ++ ;
4459 }
@@ -56,7 +71,7 @@ export default {
5671 data : { testKeyword, oppositeTestKeyword } ,
5772 fix ( fixer ) {
5873 const nodeToReplace =
59- node . callee . type === ' MemberExpression'
74+ node . callee . type === AST_NODE_TYPES . MemberExpression
6075 ? node . callee . object
6176 : node . callee ;
6277
@@ -81,7 +96,7 @@ export default {
8196 data : { testKeywordWithinDescribe, oppositeTestKeyword } ,
8297 fix ( fixer ) {
8398 const nodeToReplace =
84- node . callee . type === ' MemberExpression'
99+ node . callee . type === AST_NODE_TYPES . MemberExpression
85100 ? node . callee . object
86101 : node . callee ;
87102
@@ -101,9 +116,9 @@ export default {
101116 } ,
102117 } ;
103118 } ,
104- } ;
119+ } ) ;
105120
106- function getPreferredNodeName ( nodeName , preferredTestKeyword ) {
121+ function getPreferredNodeName ( nodeName : string , preferredTestKeyword : string ) {
107122 switch ( nodeName ) {
108123 case 'fit' :
109124 return 'test.only' ;
@@ -114,7 +129,7 @@ function getPreferredNodeName(nodeName, preferredTestKeyword) {
114129 }
115130}
116131
117- function getOppositeTestKeyword ( test ) {
132+ function getOppositeTestKeyword ( test : string ) {
118133 if ( test === 'test' ) {
119134 return 'it' ;
120135 }
0 commit comments