2
2
3
3
import * as fs from 'fs' ;
4
4
import * as path from 'path' ;
5
- import ESLint from 'eslint' ;
5
+ import { TSESLint } from '@typescript- eslint/experimental-utils ' ;
6
6
import prettier from 'prettier' ;
7
7
import config from '../src/index' ;
8
8
9
+ type FixType = 'fixable' | 'suggest' ;
10
+
9
11
interface RuleDetails {
10
12
name : string ;
11
13
description : string ;
12
- fixable : boolean ;
14
+ fixable : FixType | false ;
13
15
}
14
16
17
+ type RuleModule = TSESLint . RuleModule < string , unknown [ ] > ;
18
+
15
19
const staticElements = {
16
20
listHeaderRow : [ 'Rule' , 'Description' , 'Configurations' , 'Fixable' ] ,
17
21
listSpacerRow : Array ( 5 ) . fill ( '-' ) ,
@@ -33,7 +37,7 @@ const buildRuleRow = (rule: RuleDetails): string[] => [
33
37
`[${ rule . name } ](docs/rules/${ rule . name } .md)` ,
34
38
rule . description ,
35
39
getConfigurationColumnValueForRule ( rule ) ,
36
- rule . fixable ? '![ fixable][]' : '' ,
40
+ rule . fixable ? `![ ${ rule . fixable } ][]` : '' ,
37
41
] ;
38
42
39
43
const generateRulesListMarkdown = ( details : RuleDetails [ ] ) : string =>
@@ -77,24 +81,28 @@ const importDefault = (moduleName: string) =>
77
81
// eslint-disable-next-line @typescript-eslint/no-require-imports
78
82
interopRequireDefault ( require ( moduleName ) ) . default ;
79
83
80
- const requireJestRule = ( name : string ) : ESLint . Rule . RuleModule =>
84
+ const requireJestRule = ( name : string ) : RuleModule =>
81
85
importDefault (
82
86
`../src/rules/${ name } ` ,
83
87
// path.join('..', 'src', 'rules', name),
84
- ) as ESLint . Rule . RuleModule ;
88
+ ) as RuleModule ;
85
89
86
90
const details : RuleDetails [ ] = Object . keys ( config . configs . all . rules )
87
91
. map ( name => name . split ( '/' ) [ 1 ] )
88
92
. map ( name => [ name , requireJestRule ( name ) ] as const )
89
93
. filter (
90
- ( nameAndRule ) : nameAndRule is [ string , Required < ESLint . Rule . RuleModule > ] =>
94
+ ( nameAndRule ) : nameAndRule is [ string , Required < RuleModule > ] =>
91
95
! ! nameAndRule [ 1 ] . meta && ! nameAndRule [ 1 ] . meta . deprecated ,
92
96
)
93
97
. map (
94
98
( [ name , rule ] ) : RuleDetails => ( {
95
99
name,
96
100
description : rule . meta . docs ?. description ?? '' ,
97
- fixable : ! ! rule . meta . fixable ,
101
+ fixable : rule . meta . fixable
102
+ ? 'fixable'
103
+ : rule . meta . docs ?. suggestion
104
+ ? 'suggest'
105
+ : false ,
98
106
} ) ,
99
107
) ;
100
108
0 commit comments