From 6af019e0c0201e511fe4a99938186e0242804ae9 Mon Sep 17 00:00:00 2001 From: Marcelo Shima Date: Wed, 19 Jun 2024 10:21:46 -0300 Subject: [PATCH] add eslint/recommended exports --- generators/bootstrap/generator.ts | 2 +- generators/bootstrap/support/eslint-worker.js | 28 +++++++++++-------- lib/eslint/base.js | 28 +++++++++++++++++++ lib/eslint/recommended.ts | 24 ++++++++++++++++ package.json | 4 +++ tsconfig.types.json | 1 + 6 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 lib/eslint/base.js create mode 100644 lib/eslint/recommended.ts diff --git a/generators/bootstrap/generator.ts b/generators/bootstrap/generator.ts index 04027d19b2c1..b7ae282d650b 100644 --- a/generators/bootstrap/generator.ts +++ b/generators/bootstrap/generator.ts @@ -206,7 +206,7 @@ export default class BootstrapGenerator extends BaseGenerator { if (!this.skipPrettier) { const ignoreErrors = this.options.ignoreErrors || this.upgradeCommand; prettierTransforms.push( - createESLintTransform.call(this, { ignoreErrors, extensions: 'ts,js' }), + createESLintTransform.call(this, { ignoreErrors, extensions: 'ts,js,cjs,mjs' }), createRemoveUnusedImportsTransform.call(this, { ignoreErrors }), await createPrettierTransform.call(this, { ignoreErrors, diff --git a/generators/bootstrap/support/eslint-worker.js b/generators/bootstrap/support/eslint-worker.js index f4555b99643f..59107a7a7c65 100644 --- a/generators/bootstrap/support/eslint-worker.js +++ b/generators/bootstrap/support/eslint-worker.js @@ -1,10 +1,19 @@ -import ESLint from 'eslint'; +import eslint from 'eslint'; -let eslint; +import { baseRules } from '../../../lib/eslint/base.js'; + +let eslintInstance; + +/* Flat config based eslint +Blocked by https://github.com/import-js/eslint-plugin-import/issues/2556 +import eslint from 'eslint/use-at-your-own-risk'; +const { languageOptions, plugins: tseslintPlugins } = tseslint.configs.base; +new eslint.FlatESLint({ fix: true, overrideConfigFile: true, cwd, plugins, baseConfig: { languageOptions, rules } }); +*/ export default async ({ resolvePluginsRelativeTo, filePath, fileContents }) => { - if (!eslint) { - eslint = new ESLint.ESLint({ + if (!eslintInstance) { + eslintInstance = new eslint.ESLint({ fix: true, // Disable destination configs. We should apply plugins and rules which jhipster depends on. useEslintrc: false, @@ -16,21 +25,16 @@ export default async ({ resolvePluginsRelativeTo, filePath, fileContents }) => { sourceType: 'module', ecmaVersion: 'latest', }, - rules: { - 'import/order': 'error', - 'import/no-duplicates': 'error', - 'unused-imports/no-unused-imports': 'error', - 'unused-imports/no-unused-vars': ['warn', { vars: 'all', varsIgnorePattern: '^_', args: 'after-used', argsIgnorePattern: '^_' }], - }, + rules: baseRules, }, }); } - if (await eslint.isPathIgnored(filePath)) { + if (await eslintInstance.isPathIgnored(filePath)) { return { result: fileContents }; } try { - const [result] = await eslint.lintText(fileContents, { filePath }); + const [result] = await eslintInstance.lintText(fileContents, { filePath }); return { result: result.output ?? fileContents }; } catch (error) { return { error: `${error}` }; diff --git a/lib/eslint/base.js b/lib/eslint/base.js new file mode 100644 index 000000000000..db61a6c2e3ec --- /dev/null +++ b/lib/eslint/base.js @@ -0,0 +1,28 @@ +import unusedImports from 'eslint-plugin-unused-imports'; +import imports from 'eslint-plugin-import'; + +export const baseRules = { + 'no-unused-vars': 'off', + 'import/no-duplicates': 'error', + 'import/order': 'error', + 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-vars': [ + 'warn', + { + vars: 'all', + varsIgnorePattern: '^_', + args: 'after-used', + argsIgnorePattern: '^_', + }, + ], +}; + +const baseConfig = { + plugins: { + 'unused-imports': unusedImports, + import: imports, + }, + rules: baseRules, +}; + +export default baseConfig; diff --git a/lib/eslint/recommended.ts b/lib/eslint/recommended.ts new file mode 100644 index 000000000000..741e6764f972 --- /dev/null +++ b/lib/eslint/recommended.ts @@ -0,0 +1,24 @@ +import js from '@eslint/js'; +import baseConfig from './base.js'; + +const recommended = { + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module', + }, + settings: { + 'import/parsers': { + espree: ['.js', '.cjs', '.mjs', '.jsx'], + }, + 'import/resolver': { + node: true, + }, + }, + ...baseConfig, + rules: { + ...js.configs.recommended.rules, + ...baseConfig.rules, + }, +}; + +export default recommended; diff --git a/package.json b/package.json index 7b7c047bc27f..0e38757f227e 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,10 @@ "default": "./dist/cli/index.mjs" }, "./package.json": "./package.json", + "./eslint/recommended": { + "types": "./dist/types/lib/eslint/recommended.d.ts", + "default": "./dist/lib/eslint/recommended.js" + }, "./generators": { "types": "./dist/types/generators/generator-list.d.ts", "default": "./dist/generators/generator-list.js" diff --git a/tsconfig.types.json b/tsconfig.types.json index bcdda8379aba..c258f40ad136 100644 --- a/tsconfig.types.json +++ b/tsconfig.types.json @@ -3,6 +3,7 @@ "./cli", "./jdl", "./testing", + "./lib/eslint/recommended.ts", "./generators/index.ts", "./generators/base", "./generators/base-application",