1+ /* eslint-disable import/no-dynamic-require */
2+
13const test = require ( 'ava' ) ;
2- const CLIEngine = require ( 'eslint' ) . CLIEngine ;
4+ const { builtinRules } = require ( 'eslint/use-at-your-own-risk' ) ;
35
4- const configurations = [
6+ const configurationNames = [
57 'ava' ,
68 'eslintrc' ,
79 'flowtype' ,
@@ -12,29 +14,32 @@ const configurations = [
1214 'react' ,
1315] ;
1416
15- for ( const configuration of configurations ) {
16- // eslint-disable-next-line import/no-dynamic-require -- Safe as for testing
17- const config = require ( '../../' + configuration ) ;
17+ const getPluginRuleNames = ( pluginName ) => {
18+ const dependencyName = pluginName === '@babel' ? '@babel/eslint-plugin' : 'eslint-plugin-' + pluginName ;
1819
19- const rulesDefinition = new CLIEngine ( {
20- configFile : './' + configuration + '.js' ,
21- useEslintrc : false ,
22- } )
23- . getRules ( ) ;
20+ return Object . keys ( require ( dependencyName ) . rules ) . map ( ( ruleName ) => {
21+ return pluginName + '/' + ruleName ;
22+ } ) ;
23+ } ;
2424
25- const ruleNames = Object . keys ( config . rules || [ ] ) ;
25+ const main = async ( ) => {
26+ for ( const configurationName of configurationNames ) {
27+ const configuration = require ( '../../' + configurationName ) ;
2628
27- for ( const ruleName of ruleNames ) {
28- test ( 'plugin "' + configuration + '" has "' + ruleName + '" rule' , ( tst ) => {
29- const pluginHasRule = rulesDefinition . has ( ruleName ) ;
29+ const supportedRuleNames = [
30+ ... builtinRules . keys ( ) ,
31+ ] ;
3032
31- tst . true ( pluginHasRule ) ;
32- } ) ;
33- }
33+ for ( const pluginName of configuration . plugins ) {
34+ supportedRuleNames . push ( ... getPluginRuleNames ( pluginName ) ) ;
35+ }
3436
35- test ( 'plugin "' + configuration + '" does not have "does-not-exist" rule' , ( tst ) => {
36- const pluginHasRule = rulesDefinition . has ( 'does-not-exist' ) ;
37+ for ( const configurationRuleName of Object . keys ( configuration . rules ) ) {
38+ test ( '"' + configurationName + '" configuration has "' + configurationRuleName + '" rule' , ( t ) => {
39+ t . true ( supportedRuleNames . includes ( configurationRuleName ) ) ;
40+ } ) ;
41+ }
42+ }
43+ } ;
3744
38- tst . true ( pluginHasRule === false ) ;
39- } ) ;
40- }
45+ main ( ) ;
0 commit comments