1 | #!/usr/bin/env node
|
2 |
|
3 | const assign = require('object.assign');
|
4 | const entries = require('object.entries');
|
5 | const { ESLint } = require('eslint');
|
6 |
|
7 | const baseConfig = require('.');
|
8 | const whitespaceRules = require('./whitespaceRules');
|
9 |
|
10 | const severities = ['off', 'warn', 'error'];
|
11 |
|
12 | function getSeverity(ruleConfig) {
|
13 | if (Array.isArray(ruleConfig)) {
|
14 | return getSeverity(ruleConfig[0]);
|
15 | }
|
16 | if (typeof ruleConfig === 'number') {
|
17 | return severities[ruleConfig];
|
18 | }
|
19 | return ruleConfig;
|
20 | }
|
21 |
|
22 | async function onlyErrorOnRules(rulesToError, config) {
|
23 | const errorsOnly = assign({}, config);
|
24 | const cli = new ESLint({
|
25 | useEslintrc: false,
|
26 | baseConfig: config
|
27 | });
|
28 | const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
|
29 |
|
30 | entries(baseRules).forEach((rule) => {
|
31 | const ruleName = rule[0];
|
32 | const ruleConfig = rule[1];
|
33 | const severity = getSeverity(ruleConfig);
|
34 |
|
35 | if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
|
36 | if (Array.isArray(ruleConfig)) {
|
37 | errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
|
38 | } else if (typeof ruleConfig === 'number') {
|
39 | errorsOnly.rules[ruleName] = 1;
|
40 | } else {
|
41 | errorsOnly.rules[ruleName] = 'warn';
|
42 | }
|
43 | }
|
44 | });
|
45 |
|
46 | return errorsOnly;
|
47 | }
|
48 |
|
49 | onlyErrorOnRules(whitespaceRules, baseConfig).then((config) => console.log(JSON.stringify(config)));
|