| #!/usr/bin/env node | |
|  | |
| const assign = require('object.assign'); | |
| const entries = require('object.entries'); | |
| const { ESLint } = require('eslint'); | |
| 
 | |
| const baseConfig = require('.'); | |
| 
 | |
| const severities = ['off', 'warn', 'error']; | |
| 
 | |
| function getSeverity(ruleConfig) { | |
|   if (Array.isArray(ruleConfig)) { | |
|     return getSeverity(ruleConfig[0]); | |
|   } | |
|   if (typeof ruleConfig === 'number') { | |
|     return severities[ruleConfig]; | |
|   } | |
|   return ruleConfig; | |
| } | |
| 
 | |
| async function onlyErrorOnRules(rulesToError, config) { | |
|   const errorsOnly = assign({}, config); | |
|   const cli = new ESLint({ | |
|     useEslintrc: false, | |
|     baseConfig: config | |
|   }); | |
|   const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules; | |
| 
 | |
|   entries(baseRules).forEach((rule) => { | |
|     const ruleName = rule[0]; | |
|     const ruleConfig = rule[1]; | |
|     const severity = getSeverity(ruleConfig); | |
| 
 | |
|     if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') { | |
|       if (Array.isArray(ruleConfig)) { | |
|         errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1)); | |
|       } else if (typeof ruleConfig === 'number') { | |
|         errorsOnly.rules[ruleName] = 1; | |
|       } else { | |
|         errorsOnly.rules[ruleName] = 'warn'; | |
|       } | |
|     } | |
|   }); | |
| 
 | |
|   return errorsOnly; | |
| } | |
| 
 | |
| onlyErrorOnRules([ | |
|   'array-bracket-newline', | |
|   'array-bracket-spacing', | |
|   'array-element-newline', | |
|   'arrow-spacing', | |
|   'block-spacing', | |
|   'comma-spacing', | |
|   'computed-property-spacing', | |
|   'dot-location', | |
|   'eol-last', | |
|   'func-call-spacing', | |
|   'function-paren-newline', | |
|   'generator-star-spacing', | |
|   'implicit-arrow-linebreak', | |
|   'indent', | |
|   'key-spacing', | |
|   'keyword-spacing', | |
|   'line-comment-position', | |
|   'linebreak-style', | |
|   'multiline-ternary', | |
|   'newline-per-chained-call', | |
|   'no-irregular-whitespace', | |
|   'no-mixed-spaces-and-tabs', | |
|   'no-multi-spaces', | |
|   'no-regex-spaces', | |
|   'no-spaced-func', | |
|   'no-trailing-spaces', | |
|   'no-whitespace-before-property', | |
|   'nonblock-statement-body-position', | |
|   'object-curly-newline', | |
|   'object-curly-spacing', | |
|   'object-property-newline', | |
|   'one-var-declaration-per-line', | |
|   'operator-linebreak', | |
|   'padded-blocks', | |
|   'padding-line-between-statements', | |
|   'rest-spread-spacing', | |
|   'semi-spacing', | |
|   'semi-style', | |
|   'space-before-blocks', | |
|   'space-before-function-paren', | |
|   'space-in-parens', | |
|   'space-infix-ops', | |
|   'space-unary-ops', | |
|   'spaced-comment', | |
|   'switch-colon-spacing', | |
|   'template-tag-spacing', | |
|   'import/newline-after-import', | |
| ], baseConfig).then((config) => console.log(JSON.stringify(config)));
 |