import javascriptEslint from "@eslint/js"; import { Linter } from "eslint"; 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 const configTypescriptNavigateur: ReadonlyArray = 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"], ]);