From c7b86120248edc6081ce7faf748c210bbfb0537c Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Fri, 10 Oct 2025 15:34:44 +0200 Subject: [PATCH] feat: add format-generated Makefile rule with ESLint flat config --- Makefile | 4 ++ eslint.config.generated.mjs | 66 +++++++++++++++++++++++++++++ eslint.config.mjs | 1 + package.json | 4 +- pnpm-lock.yaml | 84 +++++++++++++++++++++++++++++++++++-- 5 files changed, 154 insertions(+), 5 deletions(-) create mode 100644 eslint.config.generated.mjs diff --git a/Makefile b/Makefile index 81a6d1237..7f920b775 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,10 @@ format: format-check: pnpm run format:check +format-generated: + pnpm eslint --config eslint.config.generated.mjs --fix packages_generated/**/*.ts + pnpm biome check --linter-enabled=false --write packages_generated/ + typing: pnpm run typecheck diff --git a/eslint.config.generated.mjs b/eslint.config.generated.mjs new file mode 100644 index 000000000..06d83061e --- /dev/null +++ b/eslint.config.generated.mjs @@ -0,0 +1,66 @@ +// ESLint flat config for GENERATED code (packages_generated/) +// More permissive rules suitable for generated TypeScript files + +import typescriptParser from '@typescript-eslint/parser' +import typescriptPlugin from '@typescript-eslint/eslint-plugin' +import importPlugin from 'eslint-plugin-import' +import unusedImports from 'eslint-plugin-unused-imports' + +export default [ + { + files: ['packages_generated/**/*.ts'], + ignores: [ + 'packages_generated/**/vite.config.ts', + 'packages_generated/**/dist/**', + ], + languageOptions: { + parser: typescriptParser, + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + }, + plugins: { + '@typescript-eslint': typescriptPlugin, + 'import': importPlugin, + 'unused-imports': unusedImports, + }, + settings: { + 'import/resolver': { + node: { + extensions: ['.ts', '.tsx', '.js', '.jsx'], + }, + }, + }, + rules: { + // Required: Disable base rules - they are replaced by unused-imports plugin + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': 'off', + + // Code optimization + 'object-shorthand': ['error', 'always'], + 'arrow-body-style': ['error', 'as-needed'], + + // Import management (unused-imports plugin) + 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-vars': ['warn', { + vars: 'all', + args: 'all', + argsIgnorePattern: 'defaults|request', + }], + 'sort-imports': ['error', { + ignoreDeclarationSort: true, + }], + 'import/order': ['error', { + alphabetize: { order: 'asc' }, + }], + + // Disable strict rules for generated code + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'no-useless-escape': 'off', + 'import/no-unresolved': 'off', + }, + }, +] + diff --git a/eslint.config.mjs b/eslint.config.mjs index 02983df81..2cd3550a8 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -18,6 +18,7 @@ export default [ 'packages/clients/.eslintrc.cjs', 'packages/client/.eslintrc.cjs', 'eslint.config.mjs', + 'eslint.config.generated.mjs', 'packages/clients/src/vendor/base64/index.js', 'packages/client/src/vendor/base64/index.js', 'packages/configuration-loader/.eslintrc.cjs', diff --git a/package.json b/package.json index bb98f4564..a876ddb9b 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,9 @@ "typedoc": "0.27.6", "typescript": "5.8.3", "vite": "6.3.6", - "vitest": "3.1.2" + "vitest": "3.1.2", + "eslint-plugin-unused-imports": "^4.2.0", + "eslint-plugin-import": "^2.32.0" }, "packageManager": "pnpm@10.13.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 464ce7059..542158912 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,9 +58,15 @@ importers: eslint: specifier: 9.33.0 version: 9.33.0(jiti@2.4.2) + eslint-plugin-import: + specifier: ^2.32.0 + version: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-tsdoc: specifier: 0.4.0 version: 0.4.0 + eslint-plugin-unused-imports: + specifier: ^4.2.0 + version: 4.2.0(@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) husky: specifier: 9.1.7 version: 9.1.7 @@ -4174,6 +4180,19 @@ packages: '@typescript-eslint/parser': optional: true + eslint-plugin-import@2.32.0: + resolution: + { + integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==, + } + engines: { node: '>=4' } + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint-plugin-jsx-a11y@6.10.1: resolution: { @@ -4207,6 +4226,18 @@ packages: integrity: sha512-MT/8b4aKLdDClnS8mP3R/JNjg29i0Oyqd/0ym6NnQf+gfKbJJ4ZcSh2Bs1H0YiUMTBwww5JwXGTWot/RwyJ7aQ==, } + eslint-plugin-unused-imports@4.2.0: + resolution: + { + integrity: sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==, + } + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + eslint-scope@5.1.1: resolution: { @@ -9859,7 +9890,7 @@ snapshots: eslint-config-prettier: 9.1.0(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-deprecation: 3.0.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-eslint-comments: 3.2.0(eslint@9.33.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-react: 7.37.2(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.0.0(eslint@9.33.0(jiti@2.4.2)) @@ -11162,7 +11193,7 @@ snapshots: dependencies: confusing-browser-globals: 1.0.11 eslint: 9.33.0(jiti@2.4.2) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) object.assign: 4.1.7 object.entries: 1.1.9 semver: 6.3.1 @@ -11180,7 +11211,7 @@ snapshots: dependencies: eslint: 9.33.0(jiti@2.4.2) eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)))(eslint@9.33.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-react: 7.37.2(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.0.0(eslint@9.33.0(jiti@2.4.2)) @@ -11199,6 +11230,16 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.4.2)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.33.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.4.2)): dependencies: debug: 3.2.7 @@ -11225,7 +11266,36 @@ snapshots: eslint: 9.33.0(jiti@2.4.2) ignore: 5.3.2 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.33.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.33.0(jiti@2.4.2)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -11305,6 +11375,12 @@ snapshots: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 + eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2)): + dependencies: + eslint: 9.33.0(jiti@2.4.2) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.33.0(jiti@2.4.2))(typescript@5.8.3) + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0