configuration-eslint/eslint.config.ts
2025-09-27 11:24:37 +02:00

63 lines
2.2 KiB
TypeScript

import javascriptEslint from "@eslint/js";
import functional from "eslint-plugin-functional";
import perfectionist from "eslint-plugin-perfectionist";
import { defineConfig, globalIgnores } from "eslint/config";
import globals from "globals";
import typescriptEslint from "typescript-eslint";
export default defineConfig([
globalIgnores(["dist/**/*"], "Ignore le Dossier de Compilation"),
{
files: ["**/*.js", "**/*.ts"],
name: "Fichiers à analyser",
},
javascriptEslint.configs.recommended,
typescriptEslint.configs.strictTypeChecked,
typescriptEslint.configs.stylisticTypeChecked,
{
languageOptions: {
ecmaVersion: "latest",
globals: { ...globals.browser, ...globals.es2026 },
parserOptions: {
ecmaVersion: "latest",
projectService: true,
sourceType: "module",
tsconfigRootDir: import.meta.dirname,
},
},
name: "Configuration du projet",
},
{
name: "Programmation fonctionnelle",
plugins: { functional: functional as typeof typescriptEslint.plugin },
rules: {
...functional.configs.noExceptions.rules,
...functional.configs.noMutations.rules,
...functional.configs.externalTypeScriptRecommended.rules,
...functional.configs.stylistic.rules,
// Choix stylistique.
"@typescript-eslint/array-type": ["error", { default: "generic", readonly: "generic" }],
// L'imposition d'une immutabilité plus importante est extrêmement contraignante.
"functional/prefer-immutable-types": ["error", { enforcement: "ReadonlyShallow" }],
// Choix stylistique.
"functional/readonly-type": ["error", "generic"],
// L'imposition d'une immutabilité plus importante est extrêmement contraignante.
"functional/type-declaration-immutability": [
"error",
{
ignoreInterfaces: false,
rules: [
{
comparator: "AtLeast",
fixer: false,
identifiers: "^(?!I?Mutable).+",
immutability: "ReadonlyShallow",
suggestions: false,
},
],
},
],
},
},
perfectionist.configs["recommended-natural"],
]);