From 9a11cc3189a5f8afb5b3d7364bce5ed6b2c29517 Mon Sep 17 00:00:00 2001 From: akinocccc Date: Sun, 8 Sep 2024 14:59:12 +0800 Subject: [PATCH] feat(configs): support `eslint-plugin-unused-imports` --- .gitignore | 2 ++ README.md | 3 ++- src/configs/unusedImports.ts | 38 ++++++++++++++++++++++++++++++++++++ src/index.ts | 18 ++++++++++++++--- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/configs/unusedImports.ts diff --git a/.gitignore b/.gitignore index 8a7e518..008b64a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ dist lib .idea + +.eslint-config-inspector diff --git a/README.md b/README.md index 4060675..c62560e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,8 @@ export default defineConfig({ ts: true, vue: true, stylistic: true, - importx: true, + importX: true, + unusedImports: true, ignores: ["node_modules"], globals: { bar: true, diff --git a/src/configs/unusedImports.ts b/src/configs/unusedImports.ts new file mode 100644 index 0000000..57c8ff2 --- /dev/null +++ b/src/configs/unusedImports.ts @@ -0,0 +1,38 @@ +import { Linter } from 'eslint' +import unusedImports from 'eslint-plugin-unused-imports' +import { CustomConfigItem, type EslintFlagConfig } from '../types' +import { isPlainObject } from '../utils' + +export function getUnusedImportsConfig(unusedImportsConfig?: CustomConfigItem, useTpeScriptEslint?: boolean): EslintFlagConfig[] { + if (unusedImportsConfig) { + const unusedImportsRules: Linter.RulesRecord = { + 'no-unused-vars': 'off', + 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-vars': [ + 'warn', + { + vars: 'all', + varsIgnorePattern: '^_', + args: 'after-used', + argsIgnorePattern: '^_', + }, + ], + } + + if (useTpeScriptEslint && (unusedImportsConfig === true || unusedImportsConfig['unused-imports/no-unused-vars'] !== 'off')) + Object.assign(unusedImportsRules, { '@typescript-eslint/no-unused-vars': 'off' }) + + if (isPlainObject(unusedImportsConfig)) + Object.assign(unusedImportsRules, unusedImportsConfig) + + return [ + { + plugins: { + 'unused-imports': unusedImports, + }, + rules: unusedImportsRules, + }, + ] + } + return [] +} diff --git a/src/index.ts b/src/index.ts index cf9f29e..5d3d702 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,13 +2,15 @@ import { ESLint } from 'eslint' import type { CustomConfigItem, EslintFlagConfig } from './types' import { isPlainObject } from './utils' import { getImportConfig, getJsConfig, getStylisticConfig, getTsConfig, getVueConfig } from './configs' +import { getUnusedImportsConfig } from './configs/unusedImports' interface AirBeConfig { js?: CustomConfigItem ts?: CustomConfigItem vue?: CustomConfigItem stylistic?: CustomConfigItem - importx?: CustomConfigItem + importX?: CustomConfigItem + unusedImports?: CustomConfigItem ignores?: string[] globals?: ESLint.Globals } @@ -21,14 +23,24 @@ interface AirBeConfig { * @returns {EslintFlagConfig[]} 返回ESLint配置数组。 */ const defineConfig = (config: AirBeConfig, ...customFlatConfigs: EslintFlagConfig[]): EslintFlagConfig[] => { - const { js, ts, vue, stylistic, importx, ignores, globals } = config + const { + js, + ts, + vue, + stylistic, + importX, + unusedImports, + ignores, + globals, + } = config const eslintConfig: EslintFlagConfig[] = [ ...getJsConfig(js), ...getTsConfig(ts), ...getVueConfig(vue), ...getStylisticConfig(stylistic), - ...getImportConfig(importx), + ...getImportConfig(importX), + ...getUnusedImportsConfig(unusedImports), ] if (Array.isArray(ignores))