From 19d7d6f111db4f78d0fc454662342ea1e810afe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=AF=E7=84=B6?= Date: Tue, 18 Jun 2024 21:15:08 +0800 Subject: [PATCH] fix: add files globs to be linted (#130) * fix: add files globs to be linted * react: **/*.jsx * vue: **/*.vue * ts: **/*.ts * react+ts: **/*.tsx * fix: add languageOptions --- lib/config-generator.js | 19 ++++++++++++++++--- .../__snapshots__/config@eslint-config-airbnb | 2 +- .../problems-commonjs-none-typescript | 1 + .../problems-commonjs-vue-javascript | 1 + .../problems-commonjs-vue-typescript | 1 + .../problems-esm-none-typescript | 1 + .../problems-esm-react-eslint8.x-javascript | 3 ++- .../problems-esm-react-eslint8.x-typescript | 3 ++- .../problems-esm-react-eslint9.x-javascript | 3 ++- .../problems-esm-react-eslint9.x-typescript | 3 ++- .../__snapshots__/problems-esm-vue-javascript | 1 + .../__snapshots__/problems-esm-vue-typescript | 1 + .../problems-script-none-typescript | 1 + .../problems-script-vue-javascript | 1 + .../problems-script-vue-typescript | 1 + .../syntax-commonjs-none-typescript | 1 + .../syntax-commonjs-vue-javascript | 1 + .../syntax-commonjs-vue-typescript | 1 + .../__snapshots__/syntax-esm-none-typescript | 1 + .../syntax-esm-react-eslint8.x-javascript | 3 ++- .../syntax-esm-react-eslint8.x-typescript | 3 ++- .../syntax-esm-react-eslint9.x-javascript | 3 ++- .../syntax-esm-react-eslint9.x-typescript | 3 ++- tests/__snapshots__/syntax-esm-vue-javascript | 1 + tests/__snapshots__/syntax-esm-vue-typescript | 1 + .../syntax-script-none-typescript | 1 + .../syntax-script-vue-javascript | 1 + .../syntax-script-vue-typescript | 1 + 28 files changed, 51 insertions(+), 12 deletions(-) diff --git a/lib/config-generator.js b/lib/config-generator.js index 2d3d55f5..6d742ddf 100644 --- a/lib/config-generator.js +++ b/lib/config-generator.js @@ -125,6 +125,7 @@ export class ConfigGenerator { this.answers.config = typeof this.answers.config === "string" ? { packageName: this.answers.config, type: "flat" } : this.answers.config; + const extensions = []; // file extensions to lint, the default is ["js", "mjs", "cjs"] let importContent = ""; const helperContent = `import path from "path"; @@ -166,6 +167,7 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug } if (this.answers.language === "typescript") { + extensions.push("ts"); this.result.devDependencies.push("typescript-eslint"); this.result.installFlags.push("--force"); // tseslint does not support eslint 9.x yet importContent += "import tseslint from \"typescript-eslint\";\n"; @@ -173,15 +175,21 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug } if (this.answers.framework === "vue") { - + extensions.push("vue"); this.result.devDependencies.push("eslint-plugin-vue"); - importContent += "import pluginVue from \"eslint-plugin-vue\";\n"; exportContent += " ...pluginVue.configs[\"flat/essential\"],\n"; } if (this.answers.framework === "react") { - exportContent += " { files: [\"**/*.jsx\"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } },\n"; + extensions.push("jsx"); + + if (this.answers.language === "typescript") { + extensions.push("tsx"); + } + // eslint-plugin-react's flat configs have languageOptions as a non-enumerable property + exportContent = ` { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } },\n${exportContent}`; + if (this.answers.eslintVersion === "9.x") { this.result.devDependencies.push("eslint-plugin-react", "@eslint/compat"); if (!this.result.installFlags.includes("--force")) { @@ -197,6 +205,7 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug exportContent += " pluginReactConfig,\n"; } } + if (this.answers.config) { const config = this.answers.config; @@ -237,6 +246,10 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug this.result.devDependencies.push("@eslint/eslintrc", "@eslint/js"); } + const lintFilesConfig = extensions.length > 0 ? ` {files: ["**/*.{${["js", "mjs", "cjs", ...extensions]}}"]},\n` : ""; + + exportContent = `${lintFilesConfig}${exportContent}`; + this.result.configContent = `${importContent} ${needCompatHelper ? helperContent : ""} export default [\n${exportContent}];`; diff --git a/tests/__snapshots__/config@eslint-config-airbnb b/tests/__snapshots__/config@eslint-config-airbnb index 8e43ce63..b6f20ff6 100644 --- a/tests/__snapshots__/config@eslint-config-airbnb +++ b/tests/__snapshots__/config@eslint-config-airbnb @@ -17,9 +17,9 @@ export default [ "devDependencies": [ "eslint@^7.32.0 || ^8.2.0", "eslint-config-airbnb", + "eslint-plugin-react@^7.28.0", "eslint-plugin-import@^2.25.3", "eslint-plugin-jsx-a11y@^6.5.1", - "eslint-plugin-react@^7.28.0", "eslint-plugin-react-hooks@^4.3.0", "@eslint/eslintrc", "@eslint/js", diff --git a/tests/__snapshots__/problems-commonjs-none-typescript b/tests/__snapshots__/problems-commonjs-none-typescript index 01e29318..3afd0fa6 100644 --- a/tests/__snapshots__/problems-commonjs-none-typescript +++ b/tests/__snapshots__/problems-commonjs-none-typescript @@ -5,6 +5,7 @@ import tseslint from "typescript-eslint"; export default [ + {files: ["**/*.{js,mjs,cjs,ts}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, diff --git a/tests/__snapshots__/problems-commonjs-vue-javascript b/tests/__snapshots__/problems-commonjs-vue-javascript index d774f7ec..0c319e9f 100644 --- a/tests/__snapshots__/problems-commonjs-vue-javascript +++ b/tests/__snapshots__/problems-commonjs-vue-javascript @@ -5,6 +5,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, diff --git a/tests/__snapshots__/problems-commonjs-vue-typescript b/tests/__snapshots__/problems-commonjs-vue-typescript index ed29de46..88dbec86 100644 --- a/tests/__snapshots__/problems-commonjs-vue-typescript +++ b/tests/__snapshots__/problems-commonjs-vue-typescript @@ -6,6 +6,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, diff --git a/tests/__snapshots__/problems-esm-none-typescript b/tests/__snapshots__/problems-esm-none-typescript index 41f43a97..d5a0c256 100644 --- a/tests/__snapshots__/problems-esm-none-typescript +++ b/tests/__snapshots__/problems-esm-none-typescript @@ -5,6 +5,7 @@ import tseslint from "typescript-eslint"; export default [ + {files: ["**/*.{js,mjs,cjs,ts}"]}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, ...tseslint.configs.recommended, diff --git a/tests/__snapshots__/problems-esm-react-eslint8.x-javascript b/tests/__snapshots__/problems-esm-react-eslint8.x-javascript index c91ae4d5..92faf874 100644 --- a/tests/__snapshots__/problems-esm-react-eslint8.x-javascript +++ b/tests/__snapshots__/problems-esm-react-eslint8.x-javascript @@ -5,9 +5,10 @@ import pluginReactConfig from "eslint-plugin-react/configs/recommended.js"; export default [ + {files: ["**/*.{js,mjs,cjs,jsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, pluginJs.configs.recommended, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, pluginReactConfig, ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/problems-esm-react-eslint8.x-typescript b/tests/__snapshots__/problems-esm-react-eslint8.x-typescript index b51f1553..9b6ec641 100644 --- a/tests/__snapshots__/problems-esm-react-eslint8.x-typescript +++ b/tests/__snapshots__/problems-esm-react-eslint8.x-typescript @@ -6,10 +6,11 @@ import pluginReactConfig from "eslint-plugin-react/configs/recommended.js"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, pluginJs.configs.recommended, ...tseslint.configs.recommended, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, pluginReactConfig, ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/problems-esm-react-eslint9.x-javascript b/tests/__snapshots__/problems-esm-react-eslint9.x-javascript index 1f1f178b..af854eaf 100644 --- a/tests/__snapshots__/problems-esm-react-eslint9.x-javascript +++ b/tests/__snapshots__/problems-esm-react-eslint9.x-javascript @@ -6,9 +6,10 @@ import { fixupConfigRules } from "@eslint/compat"; export default [ + {files: ["**/*.{js,mjs,cjs,jsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, pluginJs.configs.recommended, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, ...fixupConfigRules(pluginReactConfig), ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/problems-esm-react-eslint9.x-typescript b/tests/__snapshots__/problems-esm-react-eslint9.x-typescript index ea4069eb..9b8fb017 100644 --- a/tests/__snapshots__/problems-esm-react-eslint9.x-typescript +++ b/tests/__snapshots__/problems-esm-react-eslint9.x-typescript @@ -7,10 +7,11 @@ import { fixupConfigRules } from "@eslint/compat"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, pluginJs.configs.recommended, ...tseslint.configs.recommended, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, ...fixupConfigRules(pluginReactConfig), ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/problems-esm-vue-javascript b/tests/__snapshots__/problems-esm-vue-javascript index 127e9de2..91650b21 100644 --- a/tests/__snapshots__/problems-esm-vue-javascript +++ b/tests/__snapshots__/problems-esm-vue-javascript @@ -5,6 +5,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,vue}"]}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, ...pluginVue.configs["flat/essential"], diff --git a/tests/__snapshots__/problems-esm-vue-typescript b/tests/__snapshots__/problems-esm-vue-typescript index af02be00..2ca26753 100644 --- a/tests/__snapshots__/problems-esm-vue-typescript +++ b/tests/__snapshots__/problems-esm-vue-typescript @@ -6,6 +6,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,vue}"]}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, ...tseslint.configs.recommended, diff --git a/tests/__snapshots__/problems-script-none-typescript b/tests/__snapshots__/problems-script-none-typescript index 560538f2..a6790e80 100644 --- a/tests/__snapshots__/problems-script-none-typescript +++ b/tests/__snapshots__/problems-script-none-typescript @@ -5,6 +5,7 @@ import tseslint from "typescript-eslint"; export default [ + {files: ["**/*.{js,mjs,cjs,ts}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "script"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, diff --git a/tests/__snapshots__/problems-script-vue-javascript b/tests/__snapshots__/problems-script-vue-javascript index ae430a21..99c31d2d 100644 --- a/tests/__snapshots__/problems-script-vue-javascript +++ b/tests/__snapshots__/problems-script-vue-javascript @@ -5,6 +5,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "script"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, diff --git a/tests/__snapshots__/problems-script-vue-typescript b/tests/__snapshots__/problems-script-vue-typescript index 25105e01..d93b7ff2 100644 --- a/tests/__snapshots__/problems-script-vue-typescript +++ b/tests/__snapshots__/problems-script-vue-typescript @@ -6,6 +6,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "script"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, pluginJs.configs.recommended, diff --git a/tests/__snapshots__/syntax-commonjs-none-typescript b/tests/__snapshots__/syntax-commonjs-none-typescript index 1b09668e..325c64b6 100644 --- a/tests/__snapshots__/syntax-commonjs-none-typescript +++ b/tests/__snapshots__/syntax-commonjs-none-typescript @@ -4,6 +4,7 @@ import tseslint from "typescript-eslint"; export default [ + {files: ["**/*.{js,mjs,cjs,ts}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...tseslint.configs.recommended, diff --git a/tests/__snapshots__/syntax-commonjs-vue-javascript b/tests/__snapshots__/syntax-commonjs-vue-javascript index 18c441d8..af6bb2fb 100644 --- a/tests/__snapshots__/syntax-commonjs-vue-javascript +++ b/tests/__snapshots__/syntax-commonjs-vue-javascript @@ -4,6 +4,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...pluginVue.configs["flat/essential"], diff --git a/tests/__snapshots__/syntax-commonjs-vue-typescript b/tests/__snapshots__/syntax-commonjs-vue-typescript index 296c52a0..b4af5b67 100644 --- a/tests/__snapshots__/syntax-commonjs-vue-typescript +++ b/tests/__snapshots__/syntax-commonjs-vue-typescript @@ -5,6 +5,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...tseslint.configs.recommended, diff --git a/tests/__snapshots__/syntax-esm-none-typescript b/tests/__snapshots__/syntax-esm-none-typescript index 84e808f2..0fc858fa 100644 --- a/tests/__snapshots__/syntax-esm-none-typescript +++ b/tests/__snapshots__/syntax-esm-none-typescript @@ -4,6 +4,7 @@ import tseslint from "typescript-eslint"; export default [ + {files: ["**/*.{js,mjs,cjs,ts}"]}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...tseslint.configs.recommended, ];", diff --git a/tests/__snapshots__/syntax-esm-react-eslint8.x-javascript b/tests/__snapshots__/syntax-esm-react-eslint8.x-javascript index d7edee3b..61b5a178 100644 --- a/tests/__snapshots__/syntax-esm-react-eslint8.x-javascript +++ b/tests/__snapshots__/syntax-esm-react-eslint8.x-javascript @@ -4,8 +4,9 @@ import pluginReactConfig from "eslint-plugin-react/configs/recommended.js"; export default [ + {files: ["**/*.{js,mjs,cjs,jsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, pluginReactConfig, ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/syntax-esm-react-eslint8.x-typescript b/tests/__snapshots__/syntax-esm-react-eslint8.x-typescript index 340ee960..5f6d2d5e 100644 --- a/tests/__snapshots__/syntax-esm-react-eslint8.x-typescript +++ b/tests/__snapshots__/syntax-esm-react-eslint8.x-typescript @@ -5,9 +5,10 @@ import pluginReactConfig from "eslint-plugin-react/configs/recommended.js"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, ...tseslint.configs.recommended, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, pluginReactConfig, ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/syntax-esm-react-eslint9.x-javascript b/tests/__snapshots__/syntax-esm-react-eslint9.x-javascript index 8694f3d3..12f7faf7 100644 --- a/tests/__snapshots__/syntax-esm-react-eslint9.x-javascript +++ b/tests/__snapshots__/syntax-esm-react-eslint9.x-javascript @@ -5,8 +5,9 @@ import { fixupConfigRules } from "@eslint/compat"; export default [ + {files: ["**/*.{js,mjs,cjs,jsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, ...fixupConfigRules(pluginReactConfig), ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/syntax-esm-react-eslint9.x-typescript b/tests/__snapshots__/syntax-esm-react-eslint9.x-typescript index e77935b5..9782593e 100644 --- a/tests/__snapshots__/syntax-esm-react-eslint9.x-typescript +++ b/tests/__snapshots__/syntax-esm-react-eslint9.x-typescript @@ -6,9 +6,10 @@ import { fixupConfigRules } from "@eslint/compat"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, + { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, {languageOptions: { globals: globals.browser }}, ...tseslint.configs.recommended, - { files: ["**/*.jsx"], languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } }, ...fixupConfigRules(pluginReactConfig), ];", "configFilename": "eslint.config.js", diff --git a/tests/__snapshots__/syntax-esm-vue-javascript b/tests/__snapshots__/syntax-esm-vue-javascript index ea7c0572..1d4b7ef9 100644 --- a/tests/__snapshots__/syntax-esm-vue-javascript +++ b/tests/__snapshots__/syntax-esm-vue-javascript @@ -4,6 +4,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,vue}"]}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...pluginVue.configs["flat/essential"], ];", diff --git a/tests/__snapshots__/syntax-esm-vue-typescript b/tests/__snapshots__/syntax-esm-vue-typescript index f3d8ecdf..87be71ca 100644 --- a/tests/__snapshots__/syntax-esm-vue-typescript +++ b/tests/__snapshots__/syntax-esm-vue-typescript @@ -5,6 +5,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,vue}"]}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...tseslint.configs.recommended, ...pluginVue.configs["flat/essential"], diff --git a/tests/__snapshots__/syntax-script-none-typescript b/tests/__snapshots__/syntax-script-none-typescript index 0fe3b202..c62e105a 100644 --- a/tests/__snapshots__/syntax-script-none-typescript +++ b/tests/__snapshots__/syntax-script-none-typescript @@ -4,6 +4,7 @@ import tseslint from "typescript-eslint"; export default [ + {files: ["**/*.{js,mjs,cjs,ts}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "script"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...tseslint.configs.recommended, diff --git a/tests/__snapshots__/syntax-script-vue-javascript b/tests/__snapshots__/syntax-script-vue-javascript index dcdb5f00..d665aea2 100644 --- a/tests/__snapshots__/syntax-script-vue-javascript +++ b/tests/__snapshots__/syntax-script-vue-javascript @@ -4,6 +4,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "script"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...pluginVue.configs["flat/essential"], diff --git a/tests/__snapshots__/syntax-script-vue-typescript b/tests/__snapshots__/syntax-script-vue-typescript index c4e2f12c..cd4a8e0b 100644 --- a/tests/__snapshots__/syntax-script-vue-typescript +++ b/tests/__snapshots__/syntax-script-vue-typescript @@ -5,6 +5,7 @@ import pluginVue from "eslint-plugin-vue"; export default [ + {files: ["**/*.{js,mjs,cjs,ts,vue}"]}, {files: ["**/*.js"], languageOptions: {sourceType: "script"}}, {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...tseslint.configs.recommended,