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 = { '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, }, }, ]);