import { defineConfig, type OxlintConfig } from "oxlint"; export const unicornConfig: OxlintConfig = defineConfig({ plugins: ["unicorn"], rules: { // Trust the developer. "unicorn/catch-error-name": "off", // The shared config does not prescribe an assertion library. "unicorn/consistent-assert": "off", "unicorn/consistent-date-clone": "error", "unicorn/consistent-empty-array-spread": "error", "unicorn/consistent-existence-index-check": "error", "unicorn/consistent-function-scoping": "error", "unicorn/consistent-template-literal-escape": "error", "unicorn/custom-error-definition": "error", // Handled by oxfmt. "unicorn/empty-brace-spaces": "off", "unicorn/error-message": "error", "unicorn/escape-case": "error", "unicorn/explicit-length-check": "error", "unicorn/explicit-timer-delay": ["error", "always"], "unicorn/filename-case": "error", // Trust the developer. "unicorn/import-style": "off", // Trust the developer. "unicorn/max-nested-calls": "off", "unicorn/new-for-builtins": "error", "unicorn/no-abusive-eslint-disable": "error", "unicorn/no-accessor-recursion": "error", // Superseded by `import/no-anonymous-default-export`. "unicorn/no-anonymous-default-export": "off", "unicorn/no-array-callback-reference": "error", "unicorn/no-array-fill-with-reference-type": "error", // Trust the developer. "unicorn/no-array-for-each": "off", "unicorn/no-array-method-this-argument": "error", "unicorn/no-array-reduce": "error", "unicorn/no-array-reverse": "error", "unicorn/no-array-sort": "error", "unicorn/no-await-expression-member": "error", "unicorn/no-await-in-promise-methods": "error", "unicorn/no-confusing-array-with": "error", // Trust the developer. "unicorn/no-console-spaces": "off", "unicorn/no-document-cookie": "error", // Trust the developer. "unicorn/no-empty-file": "off", "unicorn/no-hex-escape": "error", "unicorn/no-immediate-mutation": "error", "unicorn/no-instanceof-array": "error", "unicorn/no-instanceof-builtins": ["error", { useErrorIsError: true }], "unicorn/no-invalid-fetch-options": "error", "unicorn/no-invalid-remove-event-listener": "error", "unicorn/no-length-as-slice-end": "error", "unicorn/no-lonely-if": "error", "unicorn/no-magic-array-flat-depth": "error", // Too restrictive for a general-purpose shared config. "unicorn/no-negated-condition": "off", "unicorn/no-negation-in-equality-check": "error", // Superseded by the stricter `no-nested-ternary` rule. "unicorn/no-nested-ternary": "off", "unicorn/no-new-array": "error", "unicorn/no-new-buffer": "error", // `null` remains useful when representing an intentional empty value. "unicorn/no-null": "off", "unicorn/no-object-as-default-parameter": "error", // Trust the developer. "unicorn/no-process-exit": "off", "unicorn/no-single-promise-in-promise-methods": "error", "unicorn/no-static-only-class": "error", "unicorn/no-thenable": "error", // Superseded by `typescript/no-this-alias`. "unicorn/no-this-assignment": "off", "unicorn/no-typeof-undefined": "error", "unicorn/no-unnecessary-array-flat-depth": "error", "unicorn/no-unnecessary-array-splice-count": "error", "unicorn/no-unnecessary-await": "error", "unicorn/no-unnecessary-slice-end": "error", "unicorn/no-unreadable-array-destructuring": "error", "unicorn/no-unreadable-iife": "error", "unicorn/no-useless-collection-argument": "error", "unicorn/no-useless-error-capture-stack-trace": "error", "unicorn/no-useless-fallback-in-spread": "error", "unicorn/no-useless-iterator-to-array": "error", "unicorn/no-useless-length-check": "error", "unicorn/no-useless-promise-resolve-reject": "error", "unicorn/no-useless-spread": "error", // Explicit empty cases can improve readability. "unicorn/no-useless-switch-case": "off", "unicorn/no-useless-undefined": "error", "unicorn/no-zero-fractions": "error", // Handled by oxfmt. "unicorn/number-literal-case": "off", // Numeric-separator style is left to the formatter. "unicorn/numeric-separators-style": "off", "unicorn/prefer-add-event-listener": "error", "unicorn/prefer-array-find": "error", "unicorn/prefer-array-flat": "error", "unicorn/prefer-array-flat-map": "error", "unicorn/prefer-array-index-of": "error", "unicorn/prefer-array-some": "error", "unicorn/prefer-at": "error", "unicorn/prefer-bigint-literals": "error", "unicorn/prefer-blob-reading-methods": "error", "unicorn/prefer-class-fields": "error", "unicorn/prefer-classlist-toggle": "error", "unicorn/prefer-code-point": "error", "unicorn/prefer-date-now": "error", "unicorn/prefer-default-parameters": "error", "unicorn/prefer-dom-node-append": "error", "unicorn/prefer-dom-node-dataset": "error", "unicorn/prefer-dom-node-remove": "error", "unicorn/prefer-dom-node-text-content": "error", "unicorn/prefer-event-target": "error", "unicorn/prefer-export-from": "error", "unicorn/prefer-global-this": "error", "unicorn/prefer-import-meta-properties": "error", // Superseded by `typescript/prefer-includes`. "unicorn/prefer-includes": "off", "unicorn/prefer-keyboard-event-key": "error", "unicorn/prefer-logical-operator-over-ternary": "error", "unicorn/prefer-math-min-max": "error", "unicorn/prefer-math-trunc": "error", "unicorn/prefer-modern-dom-apis": "error", "unicorn/prefer-modern-math-apis": "error", "unicorn/prefer-module": "error", "unicorn/prefer-native-coercion-functions": "error", "unicorn/prefer-negative-index": "error", "unicorn/prefer-node-protocol": "error", "unicorn/prefer-number-coercion": "error", "unicorn/prefer-number-properties": ["error", { checkInfinity: true }], "unicorn/prefer-object-from-entries": "error", "unicorn/prefer-optional-catch-binding": "error", "unicorn/prefer-prototype-methods": "error", "unicorn/prefer-query-selector": "error", "unicorn/prefer-reflect-apply": "error", "unicorn/prefer-regexp-test": "error", "unicorn/prefer-response-static-json": "error", "unicorn/prefer-set-has": "error", "unicorn/prefer-set-size": "error", "unicorn/prefer-single-call": "error", // Spreading can be less efficient than the alternatives this rule replaces. "unicorn/prefer-spread": "off", "unicorn/prefer-string-raw": "error", "unicorn/prefer-string-replace-all": "error", "unicorn/prefer-string-slice": "error", // Superseded by `typescript/prefer-string-starts-ends-with`. "unicorn/prefer-string-starts-ends-with": "off", "unicorn/prefer-string-trim-start-end": "error", "unicorn/prefer-structured-clone": "error", // Trust the developer. "unicorn/prefer-ternary": "off", "unicorn/prefer-top-level-await": "error", "unicorn/prefer-type-error": "error", // Too restrictive for a general-purpose shared config. "unicorn/relative-url-style": "off", "unicorn/require-array-join-separator": "error", "unicorn/require-module-attributes": "error", "unicorn/require-module-specifiers": "error", "unicorn/require-number-to-fixed-digits-argument": "error", // Too restrictive for a general-purpose shared config. "unicorn/require-post-message-target-origin": "off", "unicorn/switch-case-braces": ["error", "always"], "unicorn/switch-case-break-position": "error", "unicorn/text-encoding-identifier-case": "error", // This produces false positives for factories such as `TaggedError`. "unicorn/throw-new-error": "off", }, });