From bc3b1606e9d444966200f6c6b8460ed19722b252 Mon Sep 17 00:00:00 2001 From: gcch Date: Sun, 29 Mar 2026 22:36:32 +0200 Subject: [PATCH] 0.0.2 --- bun.lock | 19 +- dist/index.mjs | 1476 +++++++++++++++++++++------------------- index.ts | 759 +-------------------- package.json | 4 + rules/astro.ts | 77 +++ rules/eslint.ts | 87 +++ rules/functional.ts | 12 + rules/jsdoc.ts | 26 + rules/perfectionist.ts | 153 +++++ rules/sonarjs.ts | 216 ++++++ rules/typescript.ts | 119 ++++ rules/unicorn.ts | 121 ++++ 12 files changed, 1623 insertions(+), 1446 deletions(-) create mode 100644 rules/astro.ts create mode 100644 rules/eslint.ts create mode 100644 rules/functional.ts create mode 100644 rules/jsdoc.ts create mode 100644 rules/perfectionist.ts create mode 100644 rules/sonarjs.ts create mode 100644 rules/typescript.ts create mode 100644 rules/unicorn.ts diff --git a/bun.lock b/bun.lock index 42ace70..07231e0 100644 --- a/bun.lock +++ b/bun.lock @@ -15,14 +15,25 @@ "@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#91d4573bff", "@types/bun": "^1.3.11", "@types/node": "^25.5.0", - "eslint-plugin-astro": "^1.6.0", + "eslint-plugin-functional": "^9.0.4", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-perfectionist": "^5.7.0", + "eslint-plugin-sonarjs": "^4.0.2", "knip": "^6.1.0", "prettier": "^3.8.1", "publint": "^0.3.18", "tsdown": "^0.21.7", "typescript": "^6.0.2", }, + "optionalDependencies": { + "eslint-plugin-astro": "^1.6.0", + }, "peerDependencies": { + "eslint-plugin-astro": "^1.6.0", + "eslint-plugin-functional": "^9.0.4", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-perfectionist": "^5.7.0", + "eslint-plugin-sonarjs": "^4.0.2", "oxlint": "^1.57.0", "oxlint-tsgolint": "^0.18.1", "typescript": "^6.0.2", @@ -473,7 +484,7 @@ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "eslint": ["eslint@10.1.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", "@eslint/config-helpers": "^0.5.3", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA=="], @@ -1003,6 +1014,8 @@ "clean-regexp/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "eslint/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + "eslint/eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="], "eslint/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], @@ -1013,7 +1026,7 @@ "eslint-plugin-astro/globals": ["globals@16.5.0", "", {}, "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ=="], - "eslint-plugin-functional/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "eslint-plugin-jsdoc/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "eslint-plugin-jsdoc/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], diff --git a/dist/index.mjs b/dist/index.mjs index ac2ac70..ed323c0 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1,5 +1,770 @@ import { defineConfig } from "oxlint"; +//#region ../rules/astro.ts +const astroConfig = { + env: { astro: true }, + files: ["**/*.astro"], + jsPlugins: ["eslint-plugin-astro"], + rules: { + "astro/jsx-a11y/alt-text": "error", + "astro/jsx-a11y/anchor-ambiguous-text": "error", + "astro/jsx-a11y/anchor-has-content": "error", + "astro/jsx-a11y/anchor-is-valid": "error", + "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", + "astro/jsx-a11y/aria-props": "error", + "astro/jsx-a11y/aria-proptypes": "error", + "astro/jsx-a11y/aria-role": "error", + "astro/jsx-a11y/aria-unsupported-elements": "error", + "astro/jsx-a11y/autocomplete-valid": "error", + "astro/jsx-a11y/click-events-have-key-events": "error", + "astro/jsx-a11y/control-has-associated-label": "error", + "astro/jsx-a11y/heading-has-content": "error", + "astro/jsx-a11y/html-has-lang": "error", + "astro/jsx-a11y/iframe-has-title": "error", + "astro/jsx-a11y/img-redundant-alt": "error", + "astro/jsx-a11y/interactive-supports-focus": "error", + "astro/jsx-a11y/label-has-associated-control": "error", + "astro/jsx-a11y/lang": "error", + "astro/jsx-a11y/media-has-caption": "error", + "astro/jsx-a11y/mouse-events-have-key-events": "error", + "astro/jsx-a11y/no-access-key": "error", + "astro/jsx-a11y/no-aria-hidden-on-focusable": "error", + "astro/jsx-a11y/no-autofocus": "error", + "astro/jsx-a11y/no-distracting-elements": "error", + "astro/jsx-a11y/no-interactive-element-to-noninteractive-role": "error", + "astro/jsx-a11y/no-noninteractive-element-interactions": "error", + "astro/jsx-a11y/no-noninteractive-element-to-interactive-role": "error", + "astro/jsx-a11y/no-noninteractive-tabindex": "error", + "astro/jsx-a11y/no-redundant-roles": "error", + "astro/jsx-a11y/no-static-element-interactions": "error", + "astro/jsx-a11y/prefer-tag-over-role": "error", + "astro/jsx-a11y/role-has-required-aria-props": "error", + "astro/jsx-a11y/role-supports-aria-props": "error", + "astro/jsx-a11y/scope": "error", + "astro/jsx-a11y/tabindex-no-positive": "error", + "astro/missing-client-only-directive-value": "error", + "astro/no-conflict-set-directives": "error", + "astro/no-deprecated-astro-canonicalurl": "error", + "astro/no-deprecated-astro-fetchcontent": "error", + "astro/no-deprecated-astro-resolve": "error", + "astro/no-deprecated-getentrybyslug": "error", + "astro/no-exports-from-components": "error", + "astro/no-set-html-directive": "error", + "astro/no-set-text-directive": "error", + "astro/no-unused-css-selector": "error", + "astro/no-unused-define-vars-in-style": "error", + "astro/prefer-class-list-directive": "error", + "astro/prefer-object-class-list": "error", + "astro/prefer-split-class-list": ["error", { splitLiteral: false }], + "astro/sort-attributes": [ + "error", + { + ignoreCase: false, + order: "asc", + type: "alphabetical", + }, + ], + "astro/valid-compile": "error", + }, +}; + +//#endregion +//#region ../rules/functional.ts +const functionalRules = { + "functional/immutable-data": "error", + "functional/no-let": "error", + "functional/no-throw-statements": "error", + "functional/no-try-statements": "error", + "functional/prefer-property-signatures": "error", + "functional/readonly-type": ["error", "generic"], +}; + +//#endregion +//#region ../rules/eslint.ts +const esLintRules = { + "array-callback-return": [ + "error", + { + allowVoid: true, + checkForEach: true, + }, + ], + "for-direction": "error", + "max-params": ["error", { max: 3 }], + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-else-if": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": ["error", { allowSeparateTypeImports: true }], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": "error", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-global-assign": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-nonoctal-decimal-escape": "error", + "no-param-reassign": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "no-self-assign": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-unassigned-vars": "error", + "no-unexpected-multiline": "error", + "no-unneeded-ternary": ["error", { defaultAssignment: false }], + "no-unsafe-finally": "error", + "no-unsafe-optional-chaining": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "error", + "no-useless-backreference": "error", + "no-useless-catch": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-var": "error", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "preserve-caught-error": "error", + "require-yield": "error", + "sort-imports": "off", + "use-isnan": "error", + "valid-typeof": "error", + yoda: ["error", "never"], +}; + +//#endregion +//#region ../rules/jsdoc.ts +const jsDocRules = { + "jsdoc/check-access": "warn", + "jsdoc/check-property-names": "warn", + "jsdoc/check-tag-names": ["warn", { definedTags: ["link"] }], + "jsdoc/empty-tags": "warn", + "jsdoc/implements-on-classes": "warn", + "jsdoc/no-defaults": "warn", + "jsdoc/require-param": "warn", + "jsdoc/require-param-description": "warn", + "jsdoc/require-param-name": "warn", + "jsdoc/require-property": "warn", + "jsdoc/require-property-description": "warn", + "jsdoc/require-property-name": "warn", + "jsdoc/require-returns": "warn", + "jsdoc/require-returns-description": "warn", + "jsdoc/require-yields": "warn", +}; + +//#endregion +//#region ../rules/sonarjs.ts +const sonarJsRules = { + "sonarjs/anchor-precedence": "error", + "sonarjs/argument-type": "error", + "sonarjs/arguments-order": "error", + "sonarjs/arguments-usage": "error", + "sonarjs/array-callback-without-return": "error", + "sonarjs/assertions-in-tests": "error", + "sonarjs/aws-apigateway-public-api": "error", + "sonarjs/aws-ec2-rds-dms-public": "error", + "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", + "sonarjs/aws-efs-unencrypted": "error", + "sonarjs/aws-iam-all-privileges": "error", + "sonarjs/aws-iam-privilege-escalation": "error", + "sonarjs/aws-iam-public-access": "error", + "sonarjs/aws-opensearchservice-domain": "error", + "sonarjs/aws-rds-unencrypted-databases": "error", + "sonarjs/aws-restricted-ip-admin-access": "error", + "sonarjs/aws-s3-bucket-granted-access": "error", + "sonarjs/aws-s3-bucket-insecure-http": "error", + "sonarjs/aws-s3-bucket-public-access": "error", + "sonarjs/aws-s3-bucket-versioning": "error", + "sonarjs/aws-sagemaker-unencrypted-notebook": "error", + "sonarjs/aws-sns-unencrypted-topics": "error", + "sonarjs/aws-sqs-unencrypted-queue": "error", + "sonarjs/bitwise-operators": "error", + "sonarjs/block-scoped-var": "error", + "sonarjs/call-argument-line": "error", + "sonarjs/chai-determinate-assertion": "error", + "sonarjs/class-name": "error", + "sonarjs/code-eval": "error", + "sonarjs/cognitive-complexity": "error", + "sonarjs/comma-or-logical-or-case": "error", + "sonarjs/concise-regex": "error", + "sonarjs/confidential-information-logging": "error", + "sonarjs/constructor-for-side-effects": "error", + "sonarjs/content-length": "error", + "sonarjs/content-security-policy": "error", + "sonarjs/cookie-no-httponly": "error", + "sonarjs/cors": "error", + "sonarjs/csrf": "error", + "sonarjs/deprecation": "error", + "sonarjs/different-types-comparison": "error", + "sonarjs/disabled-auto-escaping": "error", + "sonarjs/disabled-resource-integrity": "error", + "sonarjs/disabled-timeout": "error", + "sonarjs/duplicates-in-character-class": "error", + "sonarjs/dynamically-constructed-templates": "error", + "sonarjs/empty-string-repetition": "error", + "sonarjs/encryption-secure-mode": "error", + "sonarjs/existing-groups": "error", + "sonarjs/file-permissions": "error", + "sonarjs/file-uploads": "error", + "sonarjs/fixme-tag": "error", + "sonarjs/for-loop-increment-sign": "error", + "sonarjs/frame-ancestors": "error", + "sonarjs/function-inside-loop": "error", + "sonarjs/function-return-type": "error", + "sonarjs/future-reserved-words": "error", + "sonarjs/generator-without-yield": "error", + "sonarjs/hardcoded-secret-signatures": "error", + "sonarjs/hashing": "error", + "sonarjs/hidden-files": "error", + "sonarjs/in-operator-type-error": "error", + "sonarjs/inconsistent-function-call": "error", + "sonarjs/index-of-compare-to-positive-number": "error", + "sonarjs/insecure-cookie": "error", + "sonarjs/insecure-jwt-token": "error", + "sonarjs/inverted-assertion-arguments": "error", + "sonarjs/jsx-no-leaked-render": "error", + "sonarjs/label-position": "error", + "sonarjs/link-with-target-blank": "error", + "sonarjs/max-switch-cases": "error", + "sonarjs/misplaced-loop-counter": "error", + "sonarjs/new-operator-misuse": "error", + "sonarjs/no-all-duplicated-branches": "error", + "sonarjs/no-alphabetical-sort": "error", + "sonarjs/no-angular-bypass-sanitization": "error", + "sonarjs/no-array-delete": "error", + "sonarjs/no-associative-arrays": "error", + "sonarjs/no-async-constructor": "error", + "sonarjs/no-case-label-in-switch": "error", + "sonarjs/no-clear-text-protocols": "error", + "sonarjs/no-code-after-done": "error", + "sonarjs/no-collapsible-if": "error", + "sonarjs/no-collection-size-mischeck": "error", + "sonarjs/no-commented-code": "error", + "sonarjs/no-control-regex": "error", + "sonarjs/no-dead-store": "error", + "sonarjs/no-delete-var": "error", + "sonarjs/no-duplicate-in-composite": "error", + "sonarjs/no-duplicate-string": "error", + "sonarjs/no-duplicated-branches": "error", + "sonarjs/no-element-overwrite": "error", + "sonarjs/no-empty-after-reluctant": "error", + "sonarjs/no-empty-alternatives": "error", + "sonarjs/no-empty-character-class": "error", + "sonarjs/no-empty-collection": "error", + "sonarjs/no-empty-group": "error", + "sonarjs/no-empty-test-file": "error", + "sonarjs/no-equals-in-for-termination": "error", + "sonarjs/no-exclusive-tests": "error", + "sonarjs/no-extra-arguments": "error", + "sonarjs/no-fallthrough": "error", + "sonarjs/no-global-this": "error", + "sonarjs/no-globals-shadowing": "error", + "sonarjs/no-gratuitous-expressions": "error", + "sonarjs/no-hardcoded-ip": "error", + "sonarjs/no-hardcoded-passwords": "error", + "sonarjs/no-hardcoded-secrets": "error", + "sonarjs/no-hook-setter-in-body": "error", + "sonarjs/no-identical-conditions": "error", + "sonarjs/no-identical-expressions": "error", + "sonarjs/no-identical-functions": "error", + "sonarjs/no-ignored-exceptions": "error", + "sonarjs/no-ignored-return": "error", + "sonarjs/no-implicit-global": "error", + "sonarjs/no-in-misuse": "error", + "sonarjs/no-incomplete-assertions": "error", + "sonarjs/no-inconsistent-returns": "error", + "sonarjs/no-internal-api-use": "error", + "sonarjs/no-intrusive-permissions": "error", + "sonarjs/no-invalid-regexp": "error", + "sonarjs/no-invariant-returns": "error", + "sonarjs/no-inverted-boolean-check": "error", + "sonarjs/no-ip-forward": "error", + "sonarjs/no-labels": "error", + "sonarjs/no-literal-call": "error", + "sonarjs/no-mime-sniff": "error", + "sonarjs/no-misleading-array-reverse": "error", + "sonarjs/no-misleading-character-class": "error", + "sonarjs/no-mixed-content": "error", + "sonarjs/no-nested-assignment": "error", + "sonarjs/no-nested-conditional": "error", + "sonarjs/no-nested-functions": "error", + "sonarjs/no-nested-switch": "error", + "sonarjs/no-nested-template-literals": "error", + "sonarjs/no-os-command-from-path": "error", + "sonarjs/no-parameter-reassignment": "error", + "sonarjs/no-primitive-wrappers": "error", + "sonarjs/no-redundant-assignments": "error", + "sonarjs/no-redundant-boolean": "error", + "sonarjs/no-redundant-jump": "error", + "sonarjs/no-redundant-optional": "error", + "sonarjs/no-referrer-policy": "error", + "sonarjs/no-regex-spaces": "error", + "sonarjs/no-same-argument-assert": "error", + "sonarjs/no-same-line-conditional": "error", + "sonarjs/no-selector-parameter": "error", + "sonarjs/no-session-cookies-on-static-assets": "error", + "sonarjs/no-skipped-tests": "error", + "sonarjs/no-small-switch": "error", + "sonarjs/no-table-as-layout": "error", + "sonarjs/no-try-promise": "error", + "sonarjs/no-undefined-argument": "error", + "sonarjs/no-unenclosed-multiline-block": "error", + "sonarjs/no-uniq-key": "error", + "sonarjs/no-unsafe-unzip": "error", + "sonarjs/no-unthrown-error": "error", + "sonarjs/no-unused-collection": "error", + "sonarjs/no-unused-vars": "error", + "sonarjs/no-use-of-empty-return-value": "error", + "sonarjs/no-useless-catch": "error", + "sonarjs/no-useless-increment": "error", + "sonarjs/no-useless-intersection": "error", + "sonarjs/no-useless-react-setstate": "error", + "sonarjs/no-weak-cipher": "error", + "sonarjs/no-weak-keys": "error", + "sonarjs/non-existent-operator": "error", + "sonarjs/null-dereference": "error", + "sonarjs/object-alt-content": "error", + "sonarjs/os-command": "error", + "sonarjs/post-message": "error", + "sonarjs/prefer-default-last": "error", + "sonarjs/prefer-immediate-return": "error", + "sonarjs/prefer-promise-shorthand": "error", + "sonarjs/prefer-read-only-props": "error", + "sonarjs/prefer-regexp-exec": "error", + "sonarjs/prefer-single-boolean-return": "error", + "sonarjs/prefer-type-guard": "error", + "sonarjs/prefer-while": "error", + "sonarjs/production-debug": "error", + "sonarjs/pseudo-random": "error", + "sonarjs/public-static-readonly": "error", + "sonarjs/publicly-writable-directories": "error", + "sonarjs/reduce-initial-value": "error", + "sonarjs/redundant-type-aliases": "error", + "sonarjs/regex-complexity": "error", + "sonarjs/review-blockchain-mnemonic": "error", + "sonarjs/session-regeneration": "error", + "sonarjs/single-char-in-character-classes": "error", + "sonarjs/single-character-alternation": "error", + "sonarjs/slow-regex": "error", + "sonarjs/sql-queries": "error", + "sonarjs/stable-tests": "error", + "sonarjs/stateful-regex": "error", + "sonarjs/strict-transport-security": "error", + "sonarjs/table-header": "error", + "sonarjs/table-header-reference": "error", + "sonarjs/test-check-exception": "error", + "sonarjs/todo-tag": "error", + "sonarjs/unused-import": "error", + "sonarjs/unused-named-groups": "error", + "sonarjs/unverified-certificate": "error", + "sonarjs/unverified-hostname": "error", + "sonarjs/updated-const-var": "error", + "sonarjs/updated-loop-counter": "error", + "sonarjs/use-type-alias": "error", + "sonarjs/void-use": "error", + "sonarjs/weak-ssl": "error", + "sonarjs/x-powered-by": "error", + "sonarjs/xml-parser-xxe": "error", +}; + +//#endregion +//#region ../rules/perfectionist.ts +const perfectionistRules = { + "perfectionist/sort-array-includes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-classes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-decorators": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-enums": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-export-attributes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-exports": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-heritage-clauses": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-import-attributes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-interfaces": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-intersection-types": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-jsx-props": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-maps": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-modules": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-named-exports": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-named-imports": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-object-types": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-objects": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-sets": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-switch-case": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-union-types": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-variable-declarations": [ + "error", + { + order: "asc", + type: "natural", + }, + ], +}; + +//#endregion +//#region ../rules/typescript.ts +const typeScriptRules = { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": [ + "error", + { + default: "generic", + readonly: "generic", + }, + ], + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-comment": ["error", { minimumDescriptionLength: 10 }], + "@typescript-eslint/ban-tslint-comment": "error", + "@typescript-eslint/class-literal-property-style": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": ["error", "type"], + "@typescript-eslint/dot-notation": "error", + "@typescript-eslint/no-array-delete": "error", + "@typescript-eslint/no-base-to-string": "error", + "@typescript-eslint/no-confusing-non-null-assertion": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-deprecated": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-implied-eval": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-misused-spread": "error", + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redundant-type-constituents": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-conversion": "error", + "@typescript-eslint/no-unsafe-argument": "error", + "@typescript-eslint/no-unsafe-assignment": "error", + "@typescript-eslint/no-unsafe-call": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-enum-comparison": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unsafe-member-access": "error", + "@typescript-eslint/no-unsafe-return": "error", + "@typescript-eslint/no-unsafe-unary-minus": "error", + "@typescript-eslint/no-useless-default-assignment": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-find": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-promise-reject-errors": "error", + "@typescript-eslint/prefer-readonly": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-regexp-exec": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error", + "@typescript-eslint/related-getter-setter-pairs": "error", + "@typescript-eslint/require-await": "error", + "@typescript-eslint/restrict-plus-operands": [ + "error", + { + allowAny: false, + allowBoolean: false, + allowNullish: false, + allowNumberAndString: false, + allowRegExp: false, + }, + ], + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + allowAny: false, + allowBoolean: false, + allowNever: false, + allowNullish: false, + allowNumber: false, + allowRegExp: false, + }, + ], + "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unbound-method": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", +}; + +//#endregion +//#region ../rules/unicorn.ts +const unicornRules = { + "unicorn/catch-error-name": "error", + "unicorn/consistent-date-clone": "error", + "unicorn/consistent-empty-array-spread": "error", + "unicorn/consistent-existence-index-check": "error", + "unicorn/custom-error-definition": "error", + "unicorn/error-message": "error", + "unicorn/escape-case": "error", + "unicorn/explicit-length-check": ["error", { "non-zero": "not-equal" }], + "unicorn/new-for-builtins": "error", + "unicorn/no-abusive-eslint-disable": "error", + "unicorn/no-accessor-recursion": "error", + "unicorn/no-anonymous-default-export": "error", + "unicorn/no-array-method-this-argument": "error", + "unicorn/no-array-reverse": "error", + "unicorn/no-array-sort": "error", + "unicorn/no-await-in-promise-methods": "error", + "unicorn/no-console-spaces": "error", + "unicorn/no-document-cookie": "error", + "unicorn/no-empty-file": "error", + "unicorn/no-hex-escape": "error", + "unicorn/no-instanceof-builtins": "error", + "unicorn/no-invalid-fetch-options": "error", + "unicorn/no-invalid-remove-event-listener": "error", + "unicorn/no-lonely-if": "error", + "unicorn/no-magic-array-flat-depth": "error", + "unicorn/no-negated-condition": "error", + "unicorn/no-negation-in-equality-check": "error", + "unicorn/no-nested-ternary": "error", + "unicorn/no-new-array": "error", + "unicorn/no-new-buffer": "error", + "unicorn/no-null": "error", + "unicorn/no-object-as-default-parameter": "error", + "unicorn/no-process-exit": "error", + "unicorn/no-single-promise-in-promise-methods": "error", + "unicorn/no-static-only-class": "error", + "unicorn/no-thenable": "error", + "unicorn/no-this-assignment": "error", + "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-length-check": "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/numeric-separators-style": "error", + "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-remove": "error", + "unicorn/prefer-dom-node-text-content": "error", + "unicorn/prefer-event-target": "error", + "unicorn/prefer-global-this": "error", + "unicorn/prefer-includes": "error", + "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-properties": "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-response-static-json": "error", + "unicorn/prefer-set-has": "error", + "unicorn/prefer-set-size": "error", + "unicorn/prefer-string-raw": "error", + "unicorn/prefer-string-replace-all": "error", + "unicorn/prefer-string-slice": "error", + "unicorn/prefer-string-starts-ends-with": "error", + "unicorn/prefer-string-trim-start-end": "error", + "unicorn/prefer-structured-clone": "error", + "unicorn/prefer-ternary": "error", + "unicorn/prefer-top-level-await": "error", + "unicorn/prefer-type-error": "error", + "unicorn/relative-url-style": "error", + "unicorn/require-array-join-separator": "error", + "unicorn/require-module-attributes": "error", + "unicorn/require-module-specifiers": "error", + "unicorn/require-number-to-fixed-digits-argument": "error", + "unicorn/text-encoding-identifier-case": "error", + "unicorn/throw-new-error": "error", +}; + +//#endregion //#region ../index.ts const config = defineConfig({ categories: { @@ -17,715 +782,22 @@ const config = defineConfig({ node: true, }, ignorePatterns: ["dist/**/*"], - jsPlugins: ["eslint-plugin-functional", "eslint-plugin-sonarjs", "eslint-plugin-perfectionist"], + jsPlugins: ["eslint-plugin-functional", "eslint-plugin-perfectionist", "eslint-plugin-sonarjs"], options: { reportUnusedDisableDirectives: "warn", typeAware: true, typeCheck: false, }, - overrides: [ - { - env: { astro: true }, - files: ["**/*.astro"], - jsPlugins: ["eslint-plugin-astro"], - rules: { - "astro/jsx-a11y/alt-text": "error", - "astro/jsx-a11y/anchor-ambiguous-text": "error", - "astro/jsx-a11y/anchor-has-content": "error", - "astro/jsx-a11y/anchor-is-valid": "error", - "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", - "astro/jsx-a11y/aria-props": "error", - "astro/jsx-a11y/aria-proptypes": "error", - "astro/jsx-a11y/aria-role": "error", - "astro/missing-client-only-directive-value": "error", - "astro/no-conflict-set-directives": "error", - "astro/no-deprecated-astro-canonicalurl": "error", - "astro/no-deprecated-astro-fetchcontent": "error", - "astro/no-deprecated-astro-resolve": "error", - "astro/no-deprecated-getentrybyslug": "error", - "astro/no-exports-from-components": "error", - "astro/no-set-html-directive": "error", - "astro/no-set-text-directive": "error", - "astro/no-unused-css-selector": "error", - "astro/no-unused-define-vars-in-style": "error", - "astro/prefer-class-list-directive": "error", - "astro/prefer-object-class-list": "error", - "astro/prefer-split-class-list": ["error", { splitLiteral: false }], - "astro/sort-attributes": [ - "error", - { - ignoreCase: false, - order: "asc", - type: "alphabetical", - }, - ], - "astro/valid-compile": "error", - }, - }, - ], + overrides: [astroConfig], plugins: ["import", "jsdoc", "node", "oxc", "promise", "typescript", "unicorn"], rules: { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": [ - "error", - { - default: "generic", - readonly: "generic", - }, - ], - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/ban-ts-comment": ["error", { minimumDescriptionLength: 10 }], - "@typescript-eslint/ban-tslint-comment": "error", - "@typescript-eslint/class-literal-property-style": "error", - "@typescript-eslint/consistent-generic-constructors": "error", - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/no-array-delete": "error", - "@typescript-eslint/no-base-to-string": "error", - "@typescript-eslint/no-confusing-non-null-assertion": "error", - "@typescript-eslint/no-confusing-void-expression": "error", - "@typescript-eslint/no-deprecated": "error", - "@typescript-eslint/no-duplicate-enum-values": "error", - "@typescript-eslint/no-duplicate-type-constituents": "error", - "@typescript-eslint/no-dynamic-delete": "error", - "@typescript-eslint/no-empty-object-type": "error", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-extraneous-class": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-inferrable-types": "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-meaningless-void-operator": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-misused-spread": "error", - "@typescript-eslint/no-mixed-enums": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-redundant-type-constituents": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-condition": "error", - "@typescript-eslint/no-unnecessary-template-expression": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unnecessary-type-assertion": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unnecessary-type-conversion": "error", - "@typescript-eslint/no-unsafe-argument": "error", - "@typescript-eslint/no-unsafe-assignment": "error", - "@typescript-eslint/no-unsafe-call": "error", - "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unsafe-enum-comparison": "error", - "@typescript-eslint/no-unsafe-function-type": "error", - "@typescript-eslint/no-unsafe-member-access": "error", - "@typescript-eslint/no-unsafe-return": "error", - "@typescript-eslint/no-unsafe-unary-minus": "error", - "@typescript-eslint/no-useless-default-assignment": "error", - "@typescript-eslint/no-wrapper-object-types": "error", - "@typescript-eslint/non-nullable-type-assertion-style": "error", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/prefer-find": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-includes": "error", - "@typescript-eslint/prefer-literal-enum-member": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/prefer-promise-reject-errors": "error", - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/prefer-reduce-type-parameter": "error", - "@typescript-eslint/prefer-regexp-exec": "error", - "@typescript-eslint/prefer-return-this-type": "error", - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/related-getter-setter-pairs": "error", - "@typescript-eslint/require-await": "error", - "@typescript-eslint/restrict-plus-operands": [ - "error", - { - allowAny: false, - allowBoolean: false, - allowNullish: false, - allowNumberAndString: false, - allowRegExp: false, - }, - ], - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - allowAny: false, - allowBoolean: false, - allowNever: false, - allowNullish: false, - allowNumber: false, - allowRegExp: false, - }, - ], - "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unbound-method": "error", - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", - "array-callback-return": [ - "error", - { - allowVoid: true, - checkForEach: true, - }, - ], - "eslint/no-duplicate-imports": ["error", { allowSeparateTypeImports: true }], - "eslint/sort-imports": "off", - "for-direction": "error", - "functional/immutable-data": "error", - "functional/no-let": "error", - "functional/no-throw-statements": "error", - "functional/no-try-statements": "error", - "functional/prefer-property-signatures": "error", - "functional/readonly-type": ["error", "generic"], - "jsdoc/check-access": "warn", - "jsdoc/check-property-names": "warn", - "jsdoc/check-tag-names": ["warn", { definedTags: ["link"] }], - "jsdoc/empty-tags": "warn", - "jsdoc/implements-on-classes": "warn", - "jsdoc/no-defaults": "warn", - "jsdoc/require-param": "warn", - "jsdoc/require-param-description": "warn", - "jsdoc/require-param-name": "warn", - "jsdoc/require-property": "warn", - "jsdoc/require-property-description": "warn", - "jsdoc/require-property-name": "warn", - "jsdoc/require-returns": "warn", - "jsdoc/require-returns-description": "warn", - "jsdoc/require-yields": "warn", - "max-params": ["error", { max: 3 }], - "no-array-constructor": "error", - "no-async-promise-executor": "error", - "no-case-declarations": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-constant-binary-expression": "error", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-else-if": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-empty-static-block": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-fallthrough": "error", - "no-global-assign": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-loss-of-precision": "error", - "no-misleading-character-class": "error", - "no-nonoctal-decimal-escape": "error", - "no-param-reassign": "error", - "no-prototype-builtins": "error", - "no-regex-spaces": "error", - "no-self-assign": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-unassigned-vars": "error", - "no-unexpected-multiline": "error", - "no-unneeded-ternary": ["error", { defaultAssignment: false }], - "no-unsafe-finally": "error", - "no-unsafe-optional-chaining": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-private-class-members": "error", - "no-unused-vars": "error", - "no-useless-backreference": "error", - "no-useless-catch": "error", - "no-useless-constructor": "error", - "no-useless-escape": "error", - "no-var": "error", - "perfectionist/sort-array-includes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-classes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-decorators": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-enums": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-export-attributes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-exports": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-heritage-clauses": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-import-attributes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-interfaces": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-intersection-types": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-jsx-props": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-maps": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-modules": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-named-exports": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-named-imports": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-object-types": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-objects": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-sets": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-switch-case": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-union-types": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-variable-declarations": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "prefer-const": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "preserve-caught-error": "error", - "require-yield": "error", - "sonarjs/anchor-precedence": "error", - "sonarjs/argument-type": "error", - "sonarjs/arguments-order": "error", - "sonarjs/arguments-usage": "error", - "sonarjs/array-callback-without-return": "error", - "sonarjs/assertions-in-tests": "error", - "sonarjs/aws-apigateway-public-api": "error", - "sonarjs/aws-ec2-rds-dms-public": "error", - "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", - "sonarjs/aws-efs-unencrypted": "error", - "sonarjs/aws-iam-all-privileges": "error", - "sonarjs/aws-iam-privilege-escalation": "error", - "sonarjs/aws-iam-public-access": "error", - "sonarjs/aws-opensearchservice-domain": "error", - "sonarjs/aws-rds-unencrypted-databases": "error", - "sonarjs/aws-restricted-ip-admin-access": "error", - "sonarjs/aws-s3-bucket-granted-access": "error", - "sonarjs/aws-s3-bucket-insecure-http": "error", - "sonarjs/aws-s3-bucket-public-access": "error", - "sonarjs/aws-s3-bucket-versioning": "error", - "sonarjs/aws-sagemaker-unencrypted-notebook": "error", - "sonarjs/aws-sns-unencrypted-topics": "error", - "sonarjs/aws-sqs-unencrypted-queue": "error", - "sonarjs/bitwise-operators": "error", - "sonarjs/block-scoped-var": "error", - "sonarjs/call-argument-line": "error", - "sonarjs/chai-determinate-assertion": "error", - "sonarjs/class-name": "error", - "sonarjs/code-eval": "error", - "sonarjs/cognitive-complexity": "error", - "sonarjs/comma-or-logical-or-case": "error", - "sonarjs/concise-regex": "error", - "sonarjs/confidential-information-logging": "error", - "sonarjs/constructor-for-side-effects": "error", - "sonarjs/content-length": "error", - "sonarjs/content-security-policy": "error", - "sonarjs/cookie-no-httponly": "error", - "sonarjs/cors": "error", - "sonarjs/csrf": "error", - "sonarjs/deprecation": "error", - "sonarjs/different-types-comparison": "error", - "sonarjs/disabled-auto-escaping": "error", - "sonarjs/disabled-resource-integrity": "error", - "sonarjs/disabled-timeout": "error", - "sonarjs/duplicates-in-character-class": "error", - "sonarjs/dynamically-constructed-templates": "error", - "sonarjs/empty-string-repetition": "error", - "sonarjs/encryption-secure-mode": "error", - "sonarjs/existing-groups": "error", - "sonarjs/file-permissions": "error", - "sonarjs/file-uploads": "error", - "sonarjs/fixme-tag": "error", - "sonarjs/for-loop-increment-sign": "error", - "sonarjs/frame-ancestors": "error", - "sonarjs/function-inside-loop": "error", - "sonarjs/function-return-type": "error", - "sonarjs/future-reserved-words": "error", - "sonarjs/generator-without-yield": "error", - "sonarjs/hardcoded-secret-signatures": "error", - "sonarjs/hashing": "error", - "sonarjs/hidden-files": "error", - "sonarjs/in-operator-type-error": "error", - "sonarjs/inconsistent-function-call": "error", - "sonarjs/index-of-compare-to-positive-number": "error", - "sonarjs/insecure-cookie": "error", - "sonarjs/insecure-jwt-token": "error", - "sonarjs/inverted-assertion-arguments": "error", - "sonarjs/jsx-no-leaked-render": "error", - "sonarjs/label-position": "error", - "sonarjs/link-with-target-blank": "error", - "sonarjs/max-switch-cases": "error", - "sonarjs/misplaced-loop-counter": "error", - "sonarjs/new-operator-misuse": "error", - "sonarjs/no-all-duplicated-branches": "error", - "sonarjs/no-alphabetical-sort": "error", - "sonarjs/no-angular-bypass-sanitization": "error", - "sonarjs/no-array-delete": "error", - "sonarjs/no-associative-arrays": "error", - "sonarjs/no-async-constructor": "error", - "sonarjs/no-case-label-in-switch": "error", - "sonarjs/no-clear-text-protocols": "error", - "sonarjs/no-code-after-done": "error", - "sonarjs/no-collapsible-if": "error", - "sonarjs/no-collection-size-mischeck": "error", - "sonarjs/no-commented-code": "error", - "sonarjs/no-control-regex": "error", - "sonarjs/no-dead-store": "error", - "sonarjs/no-delete-var": "error", - "sonarjs/no-duplicate-in-composite": "error", - "sonarjs/no-duplicate-string": "error", - "sonarjs/no-duplicated-branches": "error", - "sonarjs/no-element-overwrite": "error", - "sonarjs/no-empty-after-reluctant": "error", - "sonarjs/no-empty-alternatives": "error", - "sonarjs/no-empty-character-class": "error", - "sonarjs/no-empty-collection": "error", - "sonarjs/no-empty-group": "error", - "sonarjs/no-empty-test-file": "error", - "sonarjs/no-equals-in-for-termination": "error", - "sonarjs/no-exclusive-tests": "error", - "sonarjs/no-extra-arguments": "error", - "sonarjs/no-fallthrough": "error", - "sonarjs/no-global-this": "error", - "sonarjs/no-globals-shadowing": "error", - "sonarjs/no-gratuitous-expressions": "error", - "sonarjs/no-hardcoded-ip": "error", - "sonarjs/no-hardcoded-passwords": "error", - "sonarjs/no-hardcoded-secrets": "error", - "sonarjs/no-hook-setter-in-body": "error", - "sonarjs/no-identical-conditions": "error", - "sonarjs/no-identical-expressions": "error", - "sonarjs/no-identical-functions": "error", - "sonarjs/no-ignored-exceptions": "error", - "sonarjs/no-ignored-return": "error", - "sonarjs/no-implicit-global": "error", - "sonarjs/no-in-misuse": "error", - "sonarjs/no-incomplete-assertions": "error", - "sonarjs/no-inconsistent-returns": "error", - "sonarjs/no-internal-api-use": "error", - "sonarjs/no-intrusive-permissions": "error", - "sonarjs/no-invalid-regexp": "error", - "sonarjs/no-invariant-returns": "error", - "sonarjs/no-inverted-boolean-check": "error", - "sonarjs/no-ip-forward": "error", - "sonarjs/no-labels": "error", - "sonarjs/no-literal-call": "error", - "sonarjs/no-mime-sniff": "error", - "sonarjs/no-misleading-array-reverse": "error", - "sonarjs/no-misleading-character-class": "error", - "sonarjs/no-mixed-content": "error", - "sonarjs/no-nested-assignment": "error", - "sonarjs/no-nested-conditional": "error", - "sonarjs/no-nested-functions": "error", - "sonarjs/no-nested-switch": "error", - "sonarjs/no-nested-template-literals": "error", - "sonarjs/no-os-command-from-path": "error", - "sonarjs/no-parameter-reassignment": "error", - "sonarjs/no-primitive-wrappers": "error", - "sonarjs/no-redundant-assignments": "error", - "sonarjs/no-redundant-boolean": "error", - "sonarjs/no-redundant-jump": "error", - "sonarjs/no-redundant-optional": "error", - "sonarjs/no-referrer-policy": "error", - "sonarjs/no-regex-spaces": "error", - "sonarjs/no-same-argument-assert": "error", - "sonarjs/no-same-line-conditional": "error", - "sonarjs/no-selector-parameter": "error", - "sonarjs/no-session-cookies-on-static-assets": "error", - "sonarjs/no-skipped-tests": "error", - "sonarjs/no-small-switch": "error", - "sonarjs/no-table-as-layout": "error", - "sonarjs/no-try-promise": "error", - "sonarjs/no-undefined-argument": "error", - "sonarjs/no-unenclosed-multiline-block": "error", - "sonarjs/no-uniq-key": "error", - "sonarjs/no-unsafe-unzip": "error", - "sonarjs/no-unthrown-error": "error", - "sonarjs/no-unused-collection": "error", - "sonarjs/no-unused-vars": "error", - "sonarjs/no-use-of-empty-return-value": "error", - "sonarjs/no-useless-catch": "error", - "sonarjs/no-useless-increment": "error", - "sonarjs/no-useless-intersection": "error", - "sonarjs/no-useless-react-setstate": "error", - "sonarjs/no-weak-cipher": "error", - "sonarjs/no-weak-keys": "error", - "sonarjs/non-existent-operator": "error", - "sonarjs/null-dereference": "error", - "sonarjs/object-alt-content": "error", - "sonarjs/os-command": "error", - "sonarjs/post-message": "error", - "sonarjs/prefer-default-last": "error", - "sonarjs/prefer-immediate-return": "error", - "sonarjs/prefer-promise-shorthand": "error", - "sonarjs/prefer-read-only-props": "error", - "sonarjs/prefer-regexp-exec": "error", - "sonarjs/prefer-single-boolean-return": "error", - "sonarjs/prefer-type-guard": "error", - "sonarjs/prefer-while": "error", - "sonarjs/production-debug": "error", - "sonarjs/pseudo-random": "error", - "sonarjs/public-static-readonly": "error", - "sonarjs/publicly-writable-directories": "error", - "sonarjs/reduce-initial-value": "error", - "sonarjs/redundant-type-aliases": "error", - "sonarjs/regex-complexity": "error", - "sonarjs/review-blockchain-mnemonic": "error", - "sonarjs/session-regeneration": "error", - "sonarjs/single-char-in-character-classes": "error", - "sonarjs/single-character-alternation": "error", - "sonarjs/slow-regex": "error", - "sonarjs/sql-queries": "error", - "sonarjs/stable-tests": "error", - "sonarjs/stateful-regex": "error", - "sonarjs/strict-transport-security": "error", - "sonarjs/table-header": "error", - "sonarjs/table-header-reference": "error", - "sonarjs/test-check-exception": "error", - "sonarjs/todo-tag": "error", - "sonarjs/unused-import": "error", - "sonarjs/unused-named-groups": "error", - "sonarjs/unverified-certificate": "error", - "sonarjs/unverified-hostname": "error", - "sonarjs/updated-const-var": "error", - "sonarjs/updated-loop-counter": "error", - "sonarjs/use-type-alias": "error", - "sonarjs/void-use": "error", - "sonarjs/weak-ssl": "error", - "sonarjs/x-powered-by": "error", - "sonarjs/xml-parser-xxe": "error", - "unicorn/catch-error-name": "error", - "unicorn/consistent-date-clone": "error", - "unicorn/consistent-empty-array-spread": "error", - "unicorn/consistent-existence-index-check": "error", - "unicorn/custom-error-definition": "error", - "unicorn/error-message": "error", - "unicorn/escape-case": "error", - "unicorn/explicit-length-check": ["error", { "non-zero": "not-equal" }], - "unicorn/new-for-builtins": "error", - "unicorn/no-abusive-eslint-disable": "error", - "unicorn/no-accessor-recursion": "error", - "unicorn/no-anonymous-default-export": "error", - "unicorn/no-array-method-this-argument": "error", - "unicorn/no-array-reverse": "error", - "unicorn/no-array-sort": "error", - "unicorn/no-await-in-promise-methods": "error", - "unicorn/no-console-spaces": "error", - "unicorn/no-document-cookie": "error", - "unicorn/no-empty-file": "error", - "unicorn/no-hex-escape": "error", - "unicorn/no-instanceof-builtins": "error", - "unicorn/no-invalid-fetch-options": "error", - "unicorn/no-invalid-remove-event-listener": "error", - "unicorn/no-lonely-if": "error", - "unicorn/no-magic-array-flat-depth": "error", - "unicorn/no-negated-condition": "error", - "unicorn/no-negation-in-equality-check": "error", - "unicorn/no-nested-ternary": "error", - "unicorn/no-new-array": "error", - "unicorn/no-new-buffer": "error", - "unicorn/no-null": "error", - "unicorn/no-object-as-default-parameter": "error", - "unicorn/no-process-exit": "error", - "unicorn/no-single-promise-in-promise-methods": "error", - "unicorn/no-static-only-class": "error", - "unicorn/no-thenable": "error", - "unicorn/no-this-assignment": "error", - "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-length-check": "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/numeric-separators-style": "error", - "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-remove": "error", - "unicorn/prefer-dom-node-text-content": "error", - "unicorn/prefer-event-target": "error", - "unicorn/prefer-global-this": "error", - "unicorn/prefer-includes": "error", - "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-properties": "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-response-static-json": "error", - "unicorn/prefer-set-has": "error", - "unicorn/prefer-set-size": "error", - "unicorn/prefer-string-raw": "error", - "unicorn/prefer-string-replace-all": "error", - "unicorn/prefer-string-slice": "error", - "unicorn/prefer-string-starts-ends-with": "error", - "unicorn/prefer-string-trim-start-end": "error", - "unicorn/prefer-structured-clone": "error", - "unicorn/prefer-ternary": "error", - "unicorn/prefer-top-level-await": "error", - "unicorn/prefer-type-error": "error", - "unicorn/relative-url-style": "error", - "unicorn/require-array-join-separator": "error", - "unicorn/require-module-attributes": "error", - "unicorn/require-module-specifiers": "error", - "unicorn/require-number-to-fixed-digits-argument": "error", - "unicorn/text-encoding-identifier-case": "error", - "unicorn/throw-new-error": "error", - "use-isnan": "error", - "valid-typeof": "error", - yoda: ["error", "never"], + ...esLintRules, + ...functionalRules, + ...jsDocRules, + ...sonarJsRules, + ...perfectionistRules, + ...typeScriptRules, + ...unicornRules, }, settings: {}, }); diff --git a/index.ts b/index.ts index 632143f..7bc9a60 100644 --- a/index.ts +++ b/index.ts @@ -1,5 +1,13 @@ import { defineConfig } from "oxlint"; import type { OxlintConfig } from "oxlint"; +import astroConfig from "./rules/astro"; +import functionalRules from "./rules/functional"; +import esLintRules from "./rules/eslint"; +import jsDocRules from "./rules/jsdoc"; +import sonarJsRules from "./rules/sonarjs"; +import perfectionistRules from "./rules/perfectionist"; +import typeScriptRules from "./rules/typescript"; +import unicornRules from "./rules/unicorn"; const config: OxlintConfig = defineConfig({ categories: { @@ -16,754 +24,23 @@ const config: OxlintConfig = defineConfig({ es2026: true, node: true, }, - ignorePatterns: ["dist/**/*"], - jsPlugins: ["eslint-plugin-functional", "eslint-plugin-sonarjs", "eslint-plugin-perfectionist"], + ignorePatterns: [".astro", ".cache", "dist/**/*"], + jsPlugins: ["eslint-plugin-functional", "eslint-plugin-perfectionist", "eslint-plugin-sonarjs"], options: { reportUnusedDisableDirectives: "warn", typeAware: true, typeCheck: false, }, - overrides: [ - { - env: { - astro: true, - }, - files: ["**/*.astro"], - jsPlugins: ["eslint-plugin-astro"], - rules: { - "astro/jsx-a11y/alt-text": "error", - "astro/jsx-a11y/anchor-ambiguous-text": "error", - "astro/jsx-a11y/anchor-has-content": "error", - "astro/jsx-a11y/anchor-is-valid": "error", - "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", - "astro/jsx-a11y/aria-props": "error", - "astro/jsx-a11y/aria-proptypes": "error", - "astro/jsx-a11y/aria-role": "error", - "astro/missing-client-only-directive-value": "error", - "astro/no-conflict-set-directives": "error", - "astro/no-deprecated-astro-canonicalurl": "error", - "astro/no-deprecated-astro-fetchcontent": "error", - "astro/no-deprecated-astro-resolve": "error", - "astro/no-deprecated-getentrybyslug": "error", - "astro/no-exports-from-components": "error", - "astro/no-set-html-directive": "error", - "astro/no-set-text-directive": "error", - "astro/no-unused-css-selector": "error", - "astro/no-unused-define-vars-in-style": "error", - "astro/prefer-class-list-directive": "error", - "astro/prefer-object-class-list": "error", - "astro/prefer-split-class-list": [ - "error", - { - splitLiteral: false, - }, - ], - "astro/sort-attributes": [ - "error", - { - ignoreCase: false, - order: "asc", - type: "alphabetical", - }, - ], - "astro/valid-compile": "error", - }, - }, - ], + overrides: [astroConfig], plugins: ["import", "jsdoc", "node", "oxc", "promise", "typescript", "unicorn"], rules: { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": [ - "error", - { - default: "generic", - readonly: "generic", - }, - ], - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/ban-ts-comment": [ - "error", - { - minimumDescriptionLength: 10, - }, - ], - "@typescript-eslint/ban-tslint-comment": "error", - "@typescript-eslint/class-literal-property-style": "error", - "@typescript-eslint/consistent-generic-constructors": "error", - "@typescript-eslint/consistent-indexed-object-style": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/no-array-delete": "error", - "@typescript-eslint/no-base-to-string": "error", - "@typescript-eslint/no-confusing-non-null-assertion": "error", - "@typescript-eslint/no-confusing-void-expression": "error", - "@typescript-eslint/no-deprecated": "error", - "@typescript-eslint/no-duplicate-enum-values": "error", - "@typescript-eslint/no-duplicate-type-constituents": "error", - "@typescript-eslint/no-dynamic-delete": "error", - "@typescript-eslint/no-empty-object-type": "error", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-extraneous-class": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-inferrable-types": "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-meaningless-void-operator": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-misused-spread": "error", - "@typescript-eslint/no-mixed-enums": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", - "@typescript-eslint/no-non-null-asserted-optional-chain": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-redundant-type-constituents": "error", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-condition": "error", - "@typescript-eslint/no-unnecessary-template-expression": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unnecessary-type-assertion": "error", - "@typescript-eslint/no-unnecessary-type-constraint": "error", - "@typescript-eslint/no-unnecessary-type-conversion": "error", - "@typescript-eslint/no-unsafe-argument": "error", - "@typescript-eslint/no-unsafe-assignment": "error", - "@typescript-eslint/no-unsafe-call": "error", - "@typescript-eslint/no-unsafe-declaration-merging": "error", - "@typescript-eslint/no-unsafe-enum-comparison": "error", - "@typescript-eslint/no-unsafe-function-type": "error", - "@typescript-eslint/no-unsafe-member-access": "error", - "@typescript-eslint/no-unsafe-return": "error", - "@typescript-eslint/no-unsafe-unary-minus": "error", - "@typescript-eslint/no-useless-default-assignment": "error", - "@typescript-eslint/no-wrapper-object-types": "error", - "@typescript-eslint/non-nullable-type-assertion-style": "error", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/prefer-find": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-includes": "error", - "@typescript-eslint/prefer-literal-enum-member": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/prefer-promise-reject-errors": "error", - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/prefer-reduce-type-parameter": "error", - "@typescript-eslint/prefer-regexp-exec": "error", - "@typescript-eslint/prefer-return-this-type": "error", - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/related-getter-setter-pairs": "error", - "@typescript-eslint/require-await": "error", - "@typescript-eslint/restrict-plus-operands": [ - "error", - { - allowAny: false, - allowBoolean: false, - allowNullish: false, - allowNumberAndString: false, - allowRegExp: false, - }, - ], - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - allowAny: false, - allowBoolean: false, - allowNever: false, - allowNullish: false, - allowNumber: false, - allowRegExp: false, - }, - ], - "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unbound-method": "error", - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", - "array-callback-return": [ - "error", - { - allowVoid: true, - checkForEach: true, - }, - ], - "eslint/no-duplicate-imports": [ - "error", - { - allowSeparateTypeImports: true, - }, - ], - // Rentre en conflit avec perfectionnist. - "eslint/sort-imports": "off", - "for-direction": "error", - "functional/immutable-data": "error", - "functional/no-let": "error", - "functional/no-throw-statements": "error", - "functional/no-try-statements": "error", - "functional/prefer-property-signatures": "error", - "functional/readonly-type": ["error", "generic"], - "jsdoc/check-access": "warn", - "jsdoc/check-property-names": "warn", - "jsdoc/check-tag-names": [ - "warn", - { - definedTags: ["link"], - }, - ], - "jsdoc/empty-tags": "warn", - "jsdoc/implements-on-classes": "warn", - "jsdoc/no-defaults": "warn", - "jsdoc/require-param": "warn", - "jsdoc/require-param-description": "warn", - "jsdoc/require-param-name": "warn", - "jsdoc/require-property": "warn", - "jsdoc/require-property-description": "warn", - "jsdoc/require-property-name": "warn", - "jsdoc/require-returns": "warn", - "jsdoc/require-returns-description": "warn", - "jsdoc/require-yields": "warn", - "max-params": [ - "error", - { - max: 3, - }, - ], - "no-array-constructor": "error", - "no-async-promise-executor": "error", - "no-case-declarations": "error", - "no-compare-neg-zero": "error", - "no-cond-assign": "error", - "no-constant-binary-expression": "error", - "no-constant-condition": "error", - "no-control-regex": "error", - "no-debugger": "error", - "no-delete-var": "error", - "no-dupe-else-if": "error", - "no-duplicate-case": "error", - "no-empty": "error", - "no-empty-character-class": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-empty-static-block": "error", - "no-ex-assign": "error", - "no-extra-boolean-cast": "error", - "no-fallthrough": "error", - "no-global-assign": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-loss-of-precision": "error", - "no-misleading-character-class": "error", - "no-nonoctal-decimal-escape": "error", - "no-param-reassign": "error", - "no-prototype-builtins": "error", - "no-regex-spaces": "error", - "no-self-assign": "error", - "no-shadow-restricted-names": "error", - "no-sparse-arrays": "error", - "no-unassigned-vars": "error", - "no-unexpected-multiline": "error", - "no-unneeded-ternary": [ - "error", - { - defaultAssignment: false, - }, - ], - "no-unsafe-finally": "error", - "no-unsafe-optional-chaining": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-private-class-members": "error", - "no-unused-vars": "error", - "no-useless-backreference": "error", - "no-useless-catch": "error", - "no-useless-constructor": "error", - "no-useless-escape": "error", - "no-var": "error", - "perfectionist/sort-array-includes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-classes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-decorators": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-enums": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-export-attributes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-exports": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-heritage-clauses": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-import-attributes": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-interfaces": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-intersection-types": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-jsx-props": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-maps": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-modules": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-named-exports": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-named-imports": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-object-types": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-objects": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-sets": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-switch-case": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-union-types": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "perfectionist/sort-variable-declarations": [ - "error", - { - order: "asc", - type: "natural", - }, - ], - "prefer-const": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "preserve-caught-error": "error", - "require-yield": "error", - "sonarjs/anchor-precedence": "error", - "sonarjs/argument-type": "error", - "sonarjs/arguments-order": "error", - "sonarjs/arguments-usage": "error", - "sonarjs/array-callback-without-return": "error", - "sonarjs/assertions-in-tests": "error", - "sonarjs/aws-apigateway-public-api": "error", - "sonarjs/aws-ec2-rds-dms-public": "error", - "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", - "sonarjs/aws-efs-unencrypted": "error", - "sonarjs/aws-iam-all-privileges": "error", - "sonarjs/aws-iam-privilege-escalation": "error", - "sonarjs/aws-iam-public-access": "error", - "sonarjs/aws-opensearchservice-domain": "error", - "sonarjs/aws-rds-unencrypted-databases": "error", - "sonarjs/aws-restricted-ip-admin-access": "error", - "sonarjs/aws-s3-bucket-granted-access": "error", - "sonarjs/aws-s3-bucket-insecure-http": "error", - "sonarjs/aws-s3-bucket-public-access": "error", - "sonarjs/aws-s3-bucket-versioning": "error", - "sonarjs/aws-sagemaker-unencrypted-notebook": "error", - "sonarjs/aws-sns-unencrypted-topics": "error", - "sonarjs/aws-sqs-unencrypted-queue": "error", - "sonarjs/bitwise-operators": "error", - "sonarjs/block-scoped-var": "error", - "sonarjs/call-argument-line": "error", - "sonarjs/chai-determinate-assertion": "error", - "sonarjs/class-name": "error", - "sonarjs/code-eval": "error", - "sonarjs/cognitive-complexity": "error", - "sonarjs/comma-or-logical-or-case": "error", - "sonarjs/concise-regex": "error", - "sonarjs/confidential-information-logging": "error", - "sonarjs/constructor-for-side-effects": "error", - "sonarjs/content-length": "error", - "sonarjs/content-security-policy": "error", - "sonarjs/cookie-no-httponly": "error", - "sonarjs/cors": "error", - "sonarjs/csrf": "error", - "sonarjs/deprecation": "error", - "sonarjs/different-types-comparison": "error", - "sonarjs/disabled-auto-escaping": "error", - "sonarjs/disabled-resource-integrity": "error", - "sonarjs/disabled-timeout": "error", - "sonarjs/duplicates-in-character-class": "error", - "sonarjs/dynamically-constructed-templates": "error", - "sonarjs/empty-string-repetition": "error", - "sonarjs/encryption-secure-mode": "error", - "sonarjs/existing-groups": "error", - "sonarjs/file-permissions": "error", - "sonarjs/file-uploads": "error", - "sonarjs/fixme-tag": "error", - "sonarjs/for-loop-increment-sign": "error", - "sonarjs/frame-ancestors": "error", - "sonarjs/function-inside-loop": "error", - "sonarjs/function-return-type": "error", - "sonarjs/future-reserved-words": "error", - "sonarjs/generator-without-yield": "error", - "sonarjs/hardcoded-secret-signatures": "error", - "sonarjs/hashing": "error", - "sonarjs/hidden-files": "error", - "sonarjs/in-operator-type-error": "error", - "sonarjs/inconsistent-function-call": "error", - "sonarjs/index-of-compare-to-positive-number": "error", - "sonarjs/insecure-cookie": "error", - "sonarjs/insecure-jwt-token": "error", - "sonarjs/inverted-assertion-arguments": "error", - "sonarjs/jsx-no-leaked-render": "error", - "sonarjs/label-position": "error", - "sonarjs/link-with-target-blank": "error", - "sonarjs/max-switch-cases": "error", - "sonarjs/misplaced-loop-counter": "error", - "sonarjs/new-operator-misuse": "error", - "sonarjs/no-all-duplicated-branches": "error", - "sonarjs/no-alphabetical-sort": "error", - "sonarjs/no-angular-bypass-sanitization": "error", - "sonarjs/no-array-delete": "error", - "sonarjs/no-associative-arrays": "error", - "sonarjs/no-async-constructor": "error", - "sonarjs/no-case-label-in-switch": "error", - "sonarjs/no-clear-text-protocols": "error", - "sonarjs/no-code-after-done": "error", - "sonarjs/no-collapsible-if": "error", - "sonarjs/no-collection-size-mischeck": "error", - "sonarjs/no-commented-code": "error", - "sonarjs/no-control-regex": "error", - "sonarjs/no-dead-store": "error", - "sonarjs/no-delete-var": "error", - "sonarjs/no-duplicate-in-composite": "error", - "sonarjs/no-duplicate-string": "error", - "sonarjs/no-duplicated-branches": "error", - "sonarjs/no-element-overwrite": "error", - "sonarjs/no-empty-after-reluctant": "error", - "sonarjs/no-empty-alternatives": "error", - "sonarjs/no-empty-character-class": "error", - "sonarjs/no-empty-collection": "error", - "sonarjs/no-empty-group": "error", - "sonarjs/no-empty-test-file": "error", - "sonarjs/no-equals-in-for-termination": "error", - "sonarjs/no-exclusive-tests": "error", - "sonarjs/no-extra-arguments": "error", - "sonarjs/no-fallthrough": "error", - "sonarjs/no-global-this": "error", - "sonarjs/no-globals-shadowing": "error", - "sonarjs/no-gratuitous-expressions": "error", - "sonarjs/no-hardcoded-ip": "error", - "sonarjs/no-hardcoded-passwords": "error", - "sonarjs/no-hardcoded-secrets": "error", - "sonarjs/no-hook-setter-in-body": "error", - "sonarjs/no-identical-conditions": "error", - "sonarjs/no-identical-expressions": "error", - "sonarjs/no-identical-functions": "error", - "sonarjs/no-ignored-exceptions": "error", - "sonarjs/no-ignored-return": "error", - "sonarjs/no-implicit-global": "error", - "sonarjs/no-in-misuse": "error", - "sonarjs/no-incomplete-assertions": "error", - "sonarjs/no-inconsistent-returns": "error", - "sonarjs/no-internal-api-use": "error", - "sonarjs/no-intrusive-permissions": "error", - "sonarjs/no-invalid-regexp": "error", - "sonarjs/no-invariant-returns": "error", - "sonarjs/no-inverted-boolean-check": "error", - "sonarjs/no-ip-forward": "error", - "sonarjs/no-labels": "error", - "sonarjs/no-literal-call": "error", - "sonarjs/no-mime-sniff": "error", - "sonarjs/no-misleading-array-reverse": "error", - "sonarjs/no-misleading-character-class": "error", - "sonarjs/no-mixed-content": "error", - "sonarjs/no-nested-assignment": "error", - "sonarjs/no-nested-conditional": "error", - "sonarjs/no-nested-functions": "error", - "sonarjs/no-nested-switch": "error", - "sonarjs/no-nested-template-literals": "error", - "sonarjs/no-os-command-from-path": "error", - "sonarjs/no-parameter-reassignment": "error", - "sonarjs/no-primitive-wrappers": "error", - "sonarjs/no-redundant-assignments": "error", - "sonarjs/no-redundant-boolean": "error", - "sonarjs/no-redundant-jump": "error", - "sonarjs/no-redundant-optional": "error", - "sonarjs/no-referrer-policy": "error", - "sonarjs/no-regex-spaces": "error", - "sonarjs/no-same-argument-assert": "error", - "sonarjs/no-same-line-conditional": "error", - "sonarjs/no-selector-parameter": "error", - "sonarjs/no-session-cookies-on-static-assets": "error", - "sonarjs/no-skipped-tests": "error", - "sonarjs/no-small-switch": "error", - "sonarjs/no-table-as-layout": "error", - "sonarjs/no-try-promise": "error", - "sonarjs/no-undefined-argument": "error", - "sonarjs/no-unenclosed-multiline-block": "error", - "sonarjs/no-uniq-key": "error", - "sonarjs/no-unsafe-unzip": "error", - "sonarjs/no-unthrown-error": "error", - "sonarjs/no-unused-collection": "error", - "sonarjs/no-unused-vars": "error", - "sonarjs/no-use-of-empty-return-value": "error", - "sonarjs/no-useless-catch": "error", - "sonarjs/no-useless-increment": "error", - "sonarjs/no-useless-intersection": "error", - "sonarjs/no-useless-react-setstate": "error", - "sonarjs/no-weak-cipher": "error", - "sonarjs/no-weak-keys": "error", - "sonarjs/non-existent-operator": "error", - "sonarjs/null-dereference": "error", - "sonarjs/object-alt-content": "error", - "sonarjs/os-command": "error", - "sonarjs/post-message": "error", - "sonarjs/prefer-default-last": "error", - "sonarjs/prefer-immediate-return": "error", - "sonarjs/prefer-promise-shorthand": "error", - "sonarjs/prefer-read-only-props": "error", - "sonarjs/prefer-regexp-exec": "error", - "sonarjs/prefer-single-boolean-return": "error", - "sonarjs/prefer-type-guard": "error", - "sonarjs/prefer-while": "error", - "sonarjs/production-debug": "error", - "sonarjs/pseudo-random": "error", - "sonarjs/public-static-readonly": "error", - "sonarjs/publicly-writable-directories": "error", - "sonarjs/reduce-initial-value": "error", - "sonarjs/redundant-type-aliases": "error", - "sonarjs/regex-complexity": "error", - "sonarjs/review-blockchain-mnemonic": "error", - "sonarjs/session-regeneration": "error", - "sonarjs/single-char-in-character-classes": "error", - "sonarjs/single-character-alternation": "error", - "sonarjs/slow-regex": "error", - "sonarjs/sql-queries": "error", - "sonarjs/stable-tests": "error", - "sonarjs/stateful-regex": "error", - "sonarjs/strict-transport-security": "error", - "sonarjs/table-header": "error", - "sonarjs/table-header-reference": "error", - "sonarjs/test-check-exception": "error", - "sonarjs/todo-tag": "error", - "sonarjs/unused-import": "error", - "sonarjs/unused-named-groups": "error", - "sonarjs/unverified-certificate": "error", - "sonarjs/unverified-hostname": "error", - "sonarjs/updated-const-var": "error", - "sonarjs/updated-loop-counter": "error", - "sonarjs/use-type-alias": "error", - "sonarjs/void-use": "error", - "sonarjs/weak-ssl": "error", - "sonarjs/x-powered-by": "error", - "sonarjs/xml-parser-xxe": "error", - "unicorn/catch-error-name": "error", - "unicorn/consistent-date-clone": "error", - "unicorn/consistent-empty-array-spread": "error", - "unicorn/consistent-existence-index-check": "error", - "unicorn/custom-error-definition": "error", - "unicorn/error-message": "error", - "unicorn/escape-case": "error", - "unicorn/explicit-length-check": [ - "error", - { - "non-zero": "not-equal", - }, - ], - "unicorn/new-for-builtins": "error", - "unicorn/no-abusive-eslint-disable": "error", - "unicorn/no-accessor-recursion": "error", - "unicorn/no-anonymous-default-export": "error", - "unicorn/no-array-method-this-argument": "error", - "unicorn/no-array-reverse": "error", - "unicorn/no-array-sort": "error", - "unicorn/no-await-in-promise-methods": "error", - "unicorn/no-console-spaces": "error", - "unicorn/no-document-cookie": "error", - "unicorn/no-empty-file": "error", - "unicorn/no-hex-escape": "error", - "unicorn/no-instanceof-builtins": "error", - "unicorn/no-invalid-fetch-options": "error", - "unicorn/no-invalid-remove-event-listener": "error", - "unicorn/no-lonely-if": "error", - "unicorn/no-magic-array-flat-depth": "error", - "unicorn/no-negated-condition": "error", - "unicorn/no-negation-in-equality-check": "error", - "unicorn/no-nested-ternary": "error", - "unicorn/no-new-array": "error", - "unicorn/no-new-buffer": "error", - "unicorn/no-null": "error", - "unicorn/no-object-as-default-parameter": "error", - "unicorn/no-process-exit": "error", - "unicorn/no-single-promise-in-promise-methods": "error", - "unicorn/no-static-only-class": "error", - "unicorn/no-thenable": "error", - "unicorn/no-this-assignment": "error", - "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-length-check": "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/numeric-separators-style": "error", - "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-remove": "error", - "unicorn/prefer-dom-node-text-content": "error", - "unicorn/prefer-event-target": "error", - "unicorn/prefer-global-this": "error", - "unicorn/prefer-includes": "error", - "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-properties": "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-response-static-json": "error", - "unicorn/prefer-set-has": "error", - "unicorn/prefer-set-size": "error", - "unicorn/prefer-string-raw": "error", - "unicorn/prefer-string-replace-all": "error", - "unicorn/prefer-string-slice": "error", - "unicorn/prefer-string-starts-ends-with": "error", - "unicorn/prefer-string-trim-start-end": "error", - "unicorn/prefer-structured-clone": "error", - "unicorn/prefer-ternary": "error", - "unicorn/prefer-top-level-await": "error", - "unicorn/prefer-type-error": "error", - "unicorn/relative-url-style": "error", - "unicorn/require-array-join-separator": "error", - "unicorn/require-module-attributes": "error", - "unicorn/require-module-specifiers": "error", - "unicorn/require-number-to-fixed-digits-argument": "error", - "unicorn/text-encoding-identifier-case": "error", - "unicorn/throw-new-error": "error", - "use-isnan": "error", - "valid-typeof": "error", - yoda: ["error", "never"], + ...esLintRules, + ...functionalRules, + ...jsDocRules, + ...sonarJsRules, + ...perfectionistRules, + ...typeScriptRules, + ...unicornRules, }, settings: {}, }); diff --git a/package.json b/package.json index 9e3f80d..1f4f471 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,10 @@ "@types/bun": "^1.3.11", "@types/node": "^25.5.0", "eslint-plugin-astro": "^1.6.0", + "eslint-plugin-functional": "^9.0.4", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-perfectionist": "^5.7.0", + "eslint-plugin-sonarjs": "^4.0.2", "knip": "^6.1.0", "prettier": "^3.8.1", "publint": "^0.3.18", diff --git a/rules/astro.ts b/rules/astro.ts new file mode 100644 index 0000000..60ea076 --- /dev/null +++ b/rules/astro.ts @@ -0,0 +1,77 @@ +import type { OxlintOverride } from "oxlint"; + +const astroConfig: OxlintOverride = { + env: { + astro: true, + }, + files: ["**/*.astro"], + jsPlugins: ["eslint-plugin-astro"], + rules: { + "astro/jsx-a11y/alt-text": "error", + "astro/jsx-a11y/anchor-ambiguous-text": "error", + "astro/jsx-a11y/anchor-has-content": "error", + "astro/jsx-a11y/anchor-is-valid": "error", + "astro/jsx-a11y/aria-activedescendant-has-tabindex": "error", + "astro/jsx-a11y/aria-props": "error", + "astro/jsx-a11y/aria-proptypes": "error", + "astro/jsx-a11y/aria-role": "error", + "astro/jsx-a11y/aria-unsupported-elements": "error", + "astro/jsx-a11y/autocomplete-valid": "error", + "astro/jsx-a11y/click-events-have-key-events": "error", + "astro/jsx-a11y/control-has-associated-label": "error", + "astro/jsx-a11y/heading-has-content": "error", + "astro/jsx-a11y/html-has-lang": "error", + "astro/jsx-a11y/iframe-has-title": "error", + "astro/jsx-a11y/img-redundant-alt": "error", + "astro/jsx-a11y/interactive-supports-focus": "error", + "astro/jsx-a11y/label-has-associated-control": "error", + "astro/jsx-a11y/lang": "error", + "astro/jsx-a11y/media-has-caption": "error", + "astro/jsx-a11y/mouse-events-have-key-events": "error", + "astro/jsx-a11y/no-access-key": "error", + "astro/jsx-a11y/no-aria-hidden-on-focusable": "error", + "astro/jsx-a11y/no-autofocus": "error", + "astro/jsx-a11y/no-distracting-elements": "error", + "astro/jsx-a11y/no-interactive-element-to-noninteractive-role": "error", + "astro/jsx-a11y/no-noninteractive-element-interactions": "error", + "astro/jsx-a11y/no-noninteractive-element-to-interactive-role": "error", + "astro/jsx-a11y/no-noninteractive-tabindex": "error", + "astro/jsx-a11y/no-redundant-roles": "error", + "astro/jsx-a11y/no-static-element-interactions": "error", + "astro/jsx-a11y/prefer-tag-over-role": "error", + "astro/jsx-a11y/role-has-required-aria-props": "error", + "astro/jsx-a11y/role-supports-aria-props": "error", + "astro/jsx-a11y/scope": "error", + "astro/jsx-a11y/tabindex-no-positive": "error", + "astro/missing-client-only-directive-value": "error", + "astro/no-conflict-set-directives": "error", + "astro/no-deprecated-astro-canonicalurl": "error", + "astro/no-deprecated-astro-fetchcontent": "error", + "astro/no-deprecated-astro-resolve": "error", + "astro/no-deprecated-getentrybyslug": "error", + "astro/no-exports-from-components": "error", + "astro/no-set-html-directive": "error", + "astro/no-set-text-directive": "error", + "astro/no-unused-css-selector": "error", + "astro/no-unused-define-vars-in-style": "error", + "astro/prefer-class-list-directive": "error", + "astro/prefer-object-class-list": "error", + "astro/prefer-split-class-list": [ + "error", + { + splitLiteral: false, + }, + ], + "astro/sort-attributes": [ + "error", + { + ignoreCase: false, + order: "asc", + type: "alphabetical", + }, + ], + "astro/valid-compile": "error", + }, +}; + +export default astroConfig; diff --git a/rules/eslint.ts b/rules/eslint.ts new file mode 100644 index 0000000..672d087 --- /dev/null +++ b/rules/eslint.ts @@ -0,0 +1,87 @@ +import type { DummyRuleMap } from "oxlint"; + +const esLintRules: DummyRuleMap = { + "array-callback-return": [ + "error", + { + allowVoid: true, + checkForEach: true, + }, + ], + "for-direction": "error", + "max-params": [ + "error", + { + max: 3, + }, + ], + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-else-if": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": [ + "error", + { + allowSeparateTypeImports: true, + }, + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": "error", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-global-assign": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-nonoctal-decimal-escape": "error", + "no-param-reassign": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "no-self-assign": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-unassigned-vars": "error", + "no-unexpected-multiline": "error", + "no-unneeded-ternary": [ + "error", + { + defaultAssignment: false, + }, + ], + "no-unsafe-finally": "error", + "no-unsafe-optional-chaining": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "error", + "no-useless-backreference": "error", + "no-useless-catch": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-var": "error", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "preserve-caught-error": "error", + "require-yield": "error", + // Rentre en conflit avec perfectionnist. + "sort-imports": "off", + "use-isnan": "error", + "valid-typeof": "error", + yoda: ["error", "never"], +}; + +export default esLintRules; diff --git a/rules/functional.ts b/rules/functional.ts new file mode 100644 index 0000000..0535549 --- /dev/null +++ b/rules/functional.ts @@ -0,0 +1,12 @@ +import type { DummyRuleMap } from "oxlint"; + +const functionalRules: DummyRuleMap = { + "functional/immutable-data": "error", + "functional/no-let": "error", + "functional/no-throw-statements": "error", + "functional/no-try-statements": "error", + "functional/prefer-property-signatures": "error", + "functional/readonly-type": ["error", "generic"], +}; + +export default functionalRules; diff --git a/rules/jsdoc.ts b/rules/jsdoc.ts new file mode 100644 index 0000000..937112c --- /dev/null +++ b/rules/jsdoc.ts @@ -0,0 +1,26 @@ +import type { DummyRuleMap } from "oxlint"; + +const jsDocRules: DummyRuleMap = { + "jsdoc/check-access": "warn", + "jsdoc/check-property-names": "warn", + "jsdoc/check-tag-names": [ + "warn", + { + definedTags: ["link"], + }, + ], + "jsdoc/empty-tags": "warn", + "jsdoc/implements-on-classes": "warn", + "jsdoc/no-defaults": "warn", + "jsdoc/require-param": "warn", + "jsdoc/require-param-description": "warn", + "jsdoc/require-param-name": "warn", + "jsdoc/require-property": "warn", + "jsdoc/require-property-description": "warn", + "jsdoc/require-property-name": "warn", + "jsdoc/require-returns": "warn", + "jsdoc/require-returns-description": "warn", + "jsdoc/require-yields": "warn", +}; + +export default jsDocRules; diff --git a/rules/perfectionist.ts b/rules/perfectionist.ts new file mode 100644 index 0000000..4641225 --- /dev/null +++ b/rules/perfectionist.ts @@ -0,0 +1,153 @@ +import type { DummyRuleMap } from "oxlint"; + +const perfectionistRules: DummyRuleMap = { + "perfectionist/sort-array-includes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-classes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-decorators": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-enums": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-export-attributes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-exports": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-heritage-clauses": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-import-attributes": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-interfaces": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-intersection-types": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-jsx-props": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-maps": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-modules": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-named-exports": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-named-imports": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-object-types": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-objects": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-sets": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-switch-case": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-union-types": [ + "error", + { + order: "asc", + type: "natural", + }, + ], + "perfectionist/sort-variable-declarations": [ + "error", + { + order: "asc", + type: "natural", + }, + ], +}; + +export default perfectionistRules; diff --git a/rules/sonarjs.ts b/rules/sonarjs.ts new file mode 100644 index 0000000..4bcf764 --- /dev/null +++ b/rules/sonarjs.ts @@ -0,0 +1,216 @@ +import type { DummyRuleMap } from "oxlint"; + +const sonarJsRules: DummyRuleMap = { + "sonarjs/anchor-precedence": "error", + "sonarjs/argument-type": "error", + "sonarjs/arguments-order": "error", + "sonarjs/arguments-usage": "error", + "sonarjs/array-callback-without-return": "error", + "sonarjs/assertions-in-tests": "error", + "sonarjs/aws-apigateway-public-api": "error", + "sonarjs/aws-ec2-rds-dms-public": "error", + "sonarjs/aws-ec2-unencrypted-ebs-volume": "error", + "sonarjs/aws-efs-unencrypted": "error", + "sonarjs/aws-iam-all-privileges": "error", + "sonarjs/aws-iam-privilege-escalation": "error", + "sonarjs/aws-iam-public-access": "error", + "sonarjs/aws-opensearchservice-domain": "error", + "sonarjs/aws-rds-unencrypted-databases": "error", + "sonarjs/aws-restricted-ip-admin-access": "error", + "sonarjs/aws-s3-bucket-granted-access": "error", + "sonarjs/aws-s3-bucket-insecure-http": "error", + "sonarjs/aws-s3-bucket-public-access": "error", + "sonarjs/aws-s3-bucket-versioning": "error", + "sonarjs/aws-sagemaker-unencrypted-notebook": "error", + "sonarjs/aws-sns-unencrypted-topics": "error", + "sonarjs/aws-sqs-unencrypted-queue": "error", + "sonarjs/bitwise-operators": "error", + "sonarjs/block-scoped-var": "error", + "sonarjs/call-argument-line": "error", + "sonarjs/chai-determinate-assertion": "error", + "sonarjs/class-name": "error", + "sonarjs/code-eval": "error", + "sonarjs/cognitive-complexity": "error", + "sonarjs/comma-or-logical-or-case": "error", + "sonarjs/concise-regex": "error", + "sonarjs/confidential-information-logging": "error", + "sonarjs/constructor-for-side-effects": "error", + "sonarjs/content-length": "error", + "sonarjs/content-security-policy": "error", + "sonarjs/cookie-no-httponly": "error", + "sonarjs/cors": "error", + "sonarjs/csrf": "error", + "sonarjs/deprecation": "error", + "sonarjs/different-types-comparison": "error", + "sonarjs/disabled-auto-escaping": "error", + "sonarjs/disabled-resource-integrity": "error", + "sonarjs/disabled-timeout": "error", + "sonarjs/duplicates-in-character-class": "error", + "sonarjs/dynamically-constructed-templates": "error", + "sonarjs/empty-string-repetition": "error", + "sonarjs/encryption-secure-mode": "error", + "sonarjs/existing-groups": "error", + "sonarjs/file-permissions": "error", + "sonarjs/file-uploads": "error", + "sonarjs/fixme-tag": "error", + "sonarjs/for-loop-increment-sign": "error", + "sonarjs/frame-ancestors": "error", + "sonarjs/function-inside-loop": "error", + "sonarjs/function-return-type": "error", + "sonarjs/future-reserved-words": "error", + "sonarjs/generator-without-yield": "error", + "sonarjs/hardcoded-secret-signatures": "error", + "sonarjs/hashing": "error", + "sonarjs/hidden-files": "error", + "sonarjs/in-operator-type-error": "error", + "sonarjs/inconsistent-function-call": "error", + "sonarjs/index-of-compare-to-positive-number": "error", + "sonarjs/insecure-cookie": "error", + "sonarjs/insecure-jwt-token": "error", + "sonarjs/inverted-assertion-arguments": "error", + "sonarjs/jsx-no-leaked-render": "error", + "sonarjs/label-position": "error", + "sonarjs/link-with-target-blank": "error", + "sonarjs/max-switch-cases": "error", + "sonarjs/misplaced-loop-counter": "error", + "sonarjs/new-operator-misuse": "error", + "sonarjs/no-all-duplicated-branches": "error", + "sonarjs/no-alphabetical-sort": "error", + "sonarjs/no-angular-bypass-sanitization": "error", + "sonarjs/no-array-delete": "error", + "sonarjs/no-associative-arrays": "error", + "sonarjs/no-async-constructor": "error", + "sonarjs/no-case-label-in-switch": "error", + "sonarjs/no-clear-text-protocols": "error", + "sonarjs/no-code-after-done": "error", + "sonarjs/no-collapsible-if": "error", + "sonarjs/no-collection-size-mischeck": "error", + "sonarjs/no-commented-code": "error", + "sonarjs/no-control-regex": "error", + "sonarjs/no-dead-store": "error", + "sonarjs/no-delete-var": "error", + "sonarjs/no-duplicate-in-composite": "error", + "sonarjs/no-duplicate-string": "error", + "sonarjs/no-duplicated-branches": "error", + "sonarjs/no-element-overwrite": "error", + "sonarjs/no-empty-after-reluctant": "error", + "sonarjs/no-empty-alternatives": "error", + "sonarjs/no-empty-character-class": "error", + "sonarjs/no-empty-collection": "error", + "sonarjs/no-empty-group": "error", + "sonarjs/no-empty-test-file": "error", + "sonarjs/no-equals-in-for-termination": "error", + "sonarjs/no-exclusive-tests": "error", + "sonarjs/no-extra-arguments": "error", + "sonarjs/no-fallthrough": "error", + "sonarjs/no-global-this": "error", + "sonarjs/no-globals-shadowing": "error", + "sonarjs/no-gratuitous-expressions": "error", + "sonarjs/no-hardcoded-ip": "error", + "sonarjs/no-hardcoded-passwords": "error", + "sonarjs/no-hardcoded-secrets": "error", + "sonarjs/no-hook-setter-in-body": "error", + "sonarjs/no-identical-conditions": "error", + "sonarjs/no-identical-expressions": "error", + "sonarjs/no-identical-functions": "error", + "sonarjs/no-ignored-exceptions": "error", + "sonarjs/no-ignored-return": "error", + "sonarjs/no-implicit-global": "error", + "sonarjs/no-in-misuse": "error", + "sonarjs/no-incomplete-assertions": "error", + "sonarjs/no-inconsistent-returns": "error", + "sonarjs/no-internal-api-use": "error", + "sonarjs/no-intrusive-permissions": "error", + "sonarjs/no-invalid-regexp": "error", + "sonarjs/no-invariant-returns": "error", + "sonarjs/no-inverted-boolean-check": "error", + "sonarjs/no-ip-forward": "error", + "sonarjs/no-labels": "error", + "sonarjs/no-literal-call": "error", + "sonarjs/no-mime-sniff": "error", + "sonarjs/no-misleading-array-reverse": "error", + "sonarjs/no-misleading-character-class": "error", + "sonarjs/no-mixed-content": "error", + "sonarjs/no-nested-assignment": "error", + "sonarjs/no-nested-conditional": "error", + "sonarjs/no-nested-functions": "error", + "sonarjs/no-nested-switch": "error", + "sonarjs/no-nested-template-literals": "error", + "sonarjs/no-os-command-from-path": "error", + "sonarjs/no-parameter-reassignment": "error", + "sonarjs/no-primitive-wrappers": "error", + "sonarjs/no-redundant-assignments": "error", + "sonarjs/no-redundant-boolean": "error", + "sonarjs/no-redundant-jump": "error", + "sonarjs/no-redundant-optional": "error", + "sonarjs/no-referrer-policy": "error", + "sonarjs/no-regex-spaces": "error", + "sonarjs/no-same-argument-assert": "error", + "sonarjs/no-same-line-conditional": "error", + "sonarjs/no-selector-parameter": "error", + "sonarjs/no-session-cookies-on-static-assets": "error", + "sonarjs/no-skipped-tests": "error", + "sonarjs/no-small-switch": "error", + "sonarjs/no-table-as-layout": "error", + "sonarjs/no-try-promise": "error", + "sonarjs/no-undefined-argument": "error", + "sonarjs/no-unenclosed-multiline-block": "error", + "sonarjs/no-uniq-key": "error", + "sonarjs/no-unsafe-unzip": "error", + "sonarjs/no-unthrown-error": "error", + "sonarjs/no-unused-collection": "error", + "sonarjs/no-unused-vars": "error", + "sonarjs/no-use-of-empty-return-value": "error", + "sonarjs/no-useless-catch": "error", + "sonarjs/no-useless-increment": "error", + "sonarjs/no-useless-intersection": "error", + "sonarjs/no-useless-react-setstate": "error", + "sonarjs/no-weak-cipher": "error", + "sonarjs/no-weak-keys": "error", + "sonarjs/non-existent-operator": "error", + "sonarjs/null-dereference": "error", + "sonarjs/object-alt-content": "error", + "sonarjs/os-command": "error", + "sonarjs/post-message": "error", + "sonarjs/prefer-default-last": "error", + "sonarjs/prefer-immediate-return": "error", + "sonarjs/prefer-promise-shorthand": "error", + "sonarjs/prefer-read-only-props": "error", + "sonarjs/prefer-regexp-exec": "error", + "sonarjs/prefer-single-boolean-return": "error", + "sonarjs/prefer-type-guard": "error", + "sonarjs/prefer-while": "error", + "sonarjs/production-debug": "error", + "sonarjs/pseudo-random": "error", + "sonarjs/public-static-readonly": "error", + "sonarjs/publicly-writable-directories": "error", + "sonarjs/reduce-initial-value": "error", + "sonarjs/redundant-type-aliases": "error", + "sonarjs/regex-complexity": "error", + "sonarjs/review-blockchain-mnemonic": "error", + "sonarjs/session-regeneration": "error", + "sonarjs/single-char-in-character-classes": "error", + "sonarjs/single-character-alternation": "error", + "sonarjs/slow-regex": "error", + "sonarjs/sql-queries": "error", + "sonarjs/stable-tests": "error", + "sonarjs/stateful-regex": "error", + "sonarjs/strict-transport-security": "error", + "sonarjs/table-header": "error", + "sonarjs/table-header-reference": "error", + "sonarjs/test-check-exception": "error", + "sonarjs/todo-tag": "error", + "sonarjs/unused-import": "error", + "sonarjs/unused-named-groups": "error", + "sonarjs/unverified-certificate": "error", + "sonarjs/unverified-hostname": "error", + "sonarjs/updated-const-var": "error", + "sonarjs/updated-loop-counter": "error", + "sonarjs/use-type-alias": "error", + "sonarjs/void-use": "error", + "sonarjs/weak-ssl": "error", + "sonarjs/x-powered-by": "error", + "sonarjs/xml-parser-xxe": "error", +}; + +export default sonarJsRules; diff --git a/rules/typescript.ts b/rules/typescript.ts new file mode 100644 index 0000000..2784635 --- /dev/null +++ b/rules/typescript.ts @@ -0,0 +1,119 @@ +import type { DummyRuleMap } from "oxlint"; + +const typeScriptRules: DummyRuleMap = { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": [ + "error", + { + default: "generic", + readonly: "generic", + }, + ], + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-comment": [ + "error", + { + minimumDescriptionLength: 10, + }, + ], + "@typescript-eslint/ban-tslint-comment": "error", + "@typescript-eslint/class-literal-property-style": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": ["error", "type"], + "@typescript-eslint/dot-notation": "error", + "@typescript-eslint/no-array-delete": "error", + "@typescript-eslint/no-base-to-string": "error", + "@typescript-eslint/no-confusing-non-null-assertion": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-deprecated": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-implied-eval": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-misused-spread": "error", + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redundant-type-constituents": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-conversion": "error", + "@typescript-eslint/no-unsafe-argument": "error", + "@typescript-eslint/no-unsafe-assignment": "error", + "@typescript-eslint/no-unsafe-call": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-enum-comparison": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unsafe-member-access": "error", + "@typescript-eslint/no-unsafe-return": "error", + "@typescript-eslint/no-unsafe-unary-minus": "error", + "@typescript-eslint/no-useless-default-assignment": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/non-nullable-type-assertion-style": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-find": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-promise-reject-errors": "error", + "@typescript-eslint/prefer-readonly": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-regexp-exec": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/prefer-string-starts-ends-with": "error", + "@typescript-eslint/related-getter-setter-pairs": "error", + "@typescript-eslint/require-await": "error", + "@typescript-eslint/restrict-plus-operands": [ + "error", + { + allowAny: false, + allowBoolean: false, + allowNullish: false, + allowNumberAndString: false, + allowRegExp: false, + }, + ], + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + allowAny: false, + allowBoolean: false, + allowNever: false, + allowNullish: false, + allowNumber: false, + allowRegExp: false, + }, + ], + "@typescript-eslint/return-await": ["error", "error-handling-correctness-only"], + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unbound-method": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", +}; + +export default typeScriptRules; diff --git a/rules/unicorn.ts b/rules/unicorn.ts new file mode 100644 index 0000000..511dd2a --- /dev/null +++ b/rules/unicorn.ts @@ -0,0 +1,121 @@ +import type { DummyRuleMap } from "oxlint"; + +const unicornRules: DummyRuleMap = { + "unicorn/catch-error-name": "error", + "unicorn/consistent-date-clone": "error", + "unicorn/consistent-empty-array-spread": "error", + "unicorn/consistent-existence-index-check": "error", + "unicorn/custom-error-definition": "error", + "unicorn/error-message": "error", + "unicorn/escape-case": "error", + "unicorn/explicit-length-check": [ + "error", + { + "non-zero": "not-equal", + }, + ], + "unicorn/new-for-builtins": "error", + "unicorn/no-abusive-eslint-disable": "error", + "unicorn/no-accessor-recursion": "error", + "unicorn/no-anonymous-default-export": "error", + "unicorn/no-array-method-this-argument": "error", + "unicorn/no-array-reverse": "error", + "unicorn/no-array-sort": "error", + "unicorn/no-await-in-promise-methods": "error", + "unicorn/no-console-spaces": "error", + "unicorn/no-document-cookie": "error", + "unicorn/no-empty-file": "error", + "unicorn/no-hex-escape": "error", + "unicorn/no-instanceof-builtins": "error", + "unicorn/no-invalid-fetch-options": "error", + "unicorn/no-invalid-remove-event-listener": "error", + "unicorn/no-lonely-if": "error", + "unicorn/no-magic-array-flat-depth": "error", + "unicorn/no-negated-condition": "error", + "unicorn/no-negation-in-equality-check": "error", + "unicorn/no-nested-ternary": "error", + "unicorn/no-new-array": "error", + "unicorn/no-new-buffer": "error", + "unicorn/no-null": "error", + "unicorn/no-object-as-default-parameter": "error", + "unicorn/no-process-exit": "error", + "unicorn/no-single-promise-in-promise-methods": "error", + "unicorn/no-static-only-class": "error", + "unicorn/no-thenable": "error", + "unicorn/no-this-assignment": "error", + "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-length-check": "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/numeric-separators-style": "error", + "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-remove": "error", + "unicorn/prefer-dom-node-text-content": "error", + "unicorn/prefer-event-target": "error", + "unicorn/prefer-global-this": "error", + "unicorn/prefer-includes": "error", + "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-properties": "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-response-static-json": "error", + "unicorn/prefer-set-has": "error", + "unicorn/prefer-set-size": "error", + "unicorn/prefer-string-raw": "error", + "unicorn/prefer-string-replace-all": "error", + "unicorn/prefer-string-slice": "error", + "unicorn/prefer-string-starts-ends-with": "error", + "unicorn/prefer-string-trim-start-end": "error", + "unicorn/prefer-structured-clone": "error", + "unicorn/prefer-ternary": "off", + "unicorn/prefer-top-level-await": "error", + "unicorn/prefer-type-error": "error", + "unicorn/relative-url-style": "error", + "unicorn/require-array-join-separator": "error", + "unicorn/require-module-attributes": "error", + "unicorn/require-module-specifiers": "error", + "unicorn/require-number-to-fixed-digits-argument": "error", + "unicorn/text-encoding-identifier-case": "error", + "unicorn/throw-new-error": "error", +}; + +export default unicornRules;