@lesnoypudge/eslint-base-config
Version:
lesnoypudge's eslint-base-config
62 lines (50 loc) • 1.82 kB
text/typescript
import stylisticPlugin from '@stylistic/eslint-plugin';
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import type { TSESLint } from '@typescript-eslint/utils';
import { writeFileSync } from 'node:fs';
const extractRuleKeysFromArrayConfig = (
configArr: TSESLint.FlatConfig.Config[],
) => {
let result: string[] = [];
configArr.forEach((config) => {
if (!config.rules) return;
result = result.concat(Object.keys(config.rules));
});
return result;
};
const tseslintConflict = {
rules: {
...tseslint.configs.eslintRecommended.rules,
'dot-notation': 'off',
'no-empty-function': 'off',
'no-array-constructor': 'off',
'no-implied-eval': 'off',
'no-loss-of-precision': 'off',
'no-unused-vars': 'off',
'no-useless-constructor': 'off',
'no-throw-literal': 'off',
'prefer-promise-reject-errors': 'off',
'require-await': 'off',
},
} satisfies TSESLint.FlatConfig.Config;
const allRuleKeys: string[] = [
...Object.keys(eslint.configs.all.rules),
...extractRuleKeysFromArrayConfig(tseslint.configs.all),
...Object.keys(tseslintConflict.rules),
...Object.keys(stylisticPlugin.configs['disable-legacy'].rules ?? []),
...Object.keys(stylisticPlugin.configs['all-flat'].rules ?? []),
];
const rulesObject: TSESLint.FlatConfig.Config = {
rules: allRuleKeys.reduce<NonNullable<TSESLint.FlatConfig.Config['rules']>>(
(acc, cur) => {
acc[cur] = 'warn';
return acc;
},
{},
),
};
writeFileSync('rules.json', JSON.stringify(rulesObject));
console.log(allRuleKeys.length);
// console.log(JSON.stringify(allRuleKeys))
// console.log(JSON.stringify(stylisticPlugin.configs["disable-legacy"].rules))