133 lines
4.4 KiB
TypeScript
133 lines
4.4 KiB
TypeScript
import type { UnicornRulesObject } from '@aet/eslint-define-config/src/rules/unicorn';
|
||
import unicorn from 'eslint-plugin-unicorn';
|
||
import globals from 'globals';
|
||
|
||
import { error, off, warn } from '../constants';
|
||
import { defineConfig } from '../types';
|
||
|
||
const suggest = (suggest: string) => ({ suggest, fix: false });
|
||
|
||
// https://github.com/sindresorhus/eslint-plugin-unicorn/tree/28e7498ad06679bb92343db53bb40a7b5ba2990a
|
||
const unicornRules: Partial<UnicornRulesObject> = {
|
||
'unicorn/better-regex': error,
|
||
'unicorn/consistent-destructuring': warn,
|
||
'unicorn/consistent-function-scoping': warn,
|
||
'unicorn/escape-case': error,
|
||
'unicorn/no-array-for-each': warn,
|
||
'unicorn/no-array-method-this-argument': error,
|
||
'unicorn/no-array-push-push': warn,
|
||
'unicorn/no-await-in-promise-methods': error,
|
||
'unicorn/no-console-spaces': warn,
|
||
'unicorn/no-for-loop': warn,
|
||
'unicorn/no-instanceof-array': error,
|
||
'unicorn/no-invalid-fetch-options': error,
|
||
'unicorn/no-invalid-remove-event-listener': error,
|
||
'unicorn/no-lonely-if': warn,
|
||
'unicorn/no-negation-in-equality-check': error,
|
||
'unicorn/no-new-buffer': error,
|
||
'unicorn/no-single-promise-in-promise-methods': error,
|
||
'unicorn/no-static-only-class': error,
|
||
'unicorn/no-typeof-undefined': error,
|
||
'unicorn/no-unnecessary-await': error,
|
||
'unicorn/no-unnecessary-polyfills': error,
|
||
'unicorn/no-unreadable-array-destructuring': warn,
|
||
'unicorn/no-useless-fallback-in-spread': error,
|
||
'unicorn/no-useless-promise-resolve-reject': error,
|
||
'unicorn/no-useless-spread': error,
|
||
'unicorn/no-useless-switch-case': error,
|
||
'unicorn/no-useless-undefined': error,
|
||
'unicorn/no-zero-fractions': error,
|
||
'unicorn/number-literal-case': error,
|
||
'unicorn/prefer-array-find': error,
|
||
'unicorn/prefer-array-flat': error,
|
||
'unicorn/prefer-array-flat-map': error,
|
||
'unicorn/prefer-array-some': error,
|
||
'unicorn/prefer-at': error,
|
||
'unicorn/prefer-blob-reading-methods': error,
|
||
'unicorn/prefer-date-now': error,
|
||
'unicorn/prefer-default-parameters': warn,
|
||
'unicorn/prefer-dom-node-dataset': error,
|
||
'unicorn/prefer-dom-node-remove': error,
|
||
'unicorn/prefer-dom-node-text-content': warn,
|
||
'unicorn/prefer-export-from': [error, { ignoreUsedVariables: false }],
|
||
'unicorn/prefer-includes': error,
|
||
'unicorn/prefer-json-parse-buffer': warn,
|
||
'unicorn/prefer-keyboard-event-key': warn,
|
||
'unicorn/prefer-logical-operator-over-ternary': warn,
|
||
'unicorn/prefer-math-trunc': warn,
|
||
'unicorn/prefer-modern-dom-apis': error,
|
||
'unicorn/prefer-modern-math-apis': error,
|
||
'unicorn/prefer-negative-index': error,
|
||
'unicorn/prefer-node-protocol': error,
|
||
'unicorn/prefer-object-from-entries': error,
|
||
'unicorn/prefer-optional-catch-binding': error,
|
||
'unicorn/prefer-prototype-methods': error,
|
||
'unicorn/prefer-reflect-apply': error,
|
||
'unicorn/prefer-regexp-test': error,
|
||
'unicorn/prefer-set-has': warn,
|
||
'unicorn/prefer-set-size': error,
|
||
'unicorn/prefer-string-raw': error,
|
||
'unicorn/prefer-string-slice': error,
|
||
'unicorn/prefer-string-starts-ends-with': warn,
|
||
'unicorn/prefer-string-trim-start-end': error,
|
||
'unicorn/prefer-switch': warn,
|
||
'unicorn/prefer-ternary': warn,
|
||
'unicorn/relative-url-style': warn,
|
||
'unicorn/require-number-to-fixed-digits-argument': error,
|
||
'unicorn/string-content': [
|
||
warn,
|
||
{
|
||
patterns: {
|
||
'->': suggest('→'),
|
||
'=>': suggest('⇒'),
|
||
'<-': suggest('←'),
|
||
'<=': suggest('≤'),
|
||
'>=': suggest('≥'),
|
||
'!=': suggest('≠'),
|
||
'<=>': suggest('⇔'),
|
||
'\\.\\.\\.': suggest('…'),
|
||
"'s ": suggest('’s '),
|
||
"'d ": suggest('’d '),
|
||
"'t ": suggest('’t '),
|
||
"l'": suggest('l’'),
|
||
"d'": suggest('d’'),
|
||
"qu'": suggest('qu’'),
|
||
'\\?!': suggest('⁈'),
|
||
'!\\?': suggest('⁉'),
|
||
},
|
||
},
|
||
],
|
||
'unicorn/template-indent': warn,
|
||
};
|
||
|
||
// export const unicorn = defineMiddleware((config, { addRules }) => {
|
||
// config.plugins.push('unicorn');
|
||
// addRules(unicornRules);
|
||
// config.overrides.push({
|
||
// files: ['*.test.ts', '*.test.tsx'],
|
||
// rules: {
|
||
// 'unicorn/no-useless-undefined': off,
|
||
// },
|
||
// });
|
||
// });
|
||
|
||
export default defineConfig([
|
||
{
|
||
name: 'eslint-rules/unicorn',
|
||
languageOptions: {
|
||
globals: globals.builtin,
|
||
},
|
||
plugins: {
|
||
unicorn,
|
||
},
|
||
rules: unicornRules,
|
||
},
|
||
{
|
||
name: 'eslint-rules/unicorn/tests',
|
||
files: ['*.test.ts', '*.test.tsx'],
|
||
rules: {
|
||
'unicorn/no-useless-undefined': off,
|
||
},
|
||
},
|
||
]);
|