@@ -123,6 +123,15 @@ export class ConfigGenerator {
123123 const purpose = this . answers . purpose ;
124124 const useTs = this . answers . useTs ;
125125
126+ if ( purpose === "syntax" ) {
127+
128+ // no need to install any plugin
129+ } else if ( purpose === "problems" ) {
130+ this . result . devDependencies . push ( "@eslint/js" ) ;
131+ importContent += "import js from \"@eslint/js\";\n" ;
132+ exportContent += ` { files: ["${ extensions } "], plugins: { js }, extends: ["js/recommended"] },\n` ;
133+ }
134+
126135 if ( languages . includes ( "javascript" ) ) {
127136 if ( this . answers . moduleType === "commonjs" || this . answers . moduleType === "script" ) {
128137 exportContent += ` { files: ["**/*.js"], languageOptions: { sourceType: "${ this . answers . moduleType } " } },\n` ;
@@ -139,64 +148,59 @@ export class ConfigGenerator {
139148
140149 exportContent += ` { files: ["${ extensions } "], languageOptions: { ${ envContent [ this . answers . env . join ( "," ) ] } } },\n` ;
141150 }
142- }
143-
144- if ( purpose === "syntax" ) {
151+ if ( useTs ) {
152+ this . result . devDependencies . push ( "typescript-eslint" ) ;
153+ importContent += "import tseslint from \"typescript-eslint\";\n" ;
154+ exportContent += " tseslint.configs.recommended,\n" ;
155+ }
145156
146- // no need to install any plugin
147- } else if ( purpose === "problems" ) {
148- this . result . devDependencies . push ( "@eslint/js" ) ;
149- importContent += "import js from \"@eslint/js\";\n" ;
150- exportContent += ` { files: ["${ extensions } "], plugins: { js }, extends: ["js/recommended"] },\n` ;
151- }
157+ if ( this . answers . framework === "vue" ) {
158+ this . result . devDependencies . push ( "eslint-plugin-vue" ) ;
159+ importContent += "import pluginVue from \"eslint-plugin-vue\";\n" ;
160+ exportContent += " pluginVue.configs[\"flat/essential\"],\n" ;
152161
153- if ( useTs ) {
154- this . result . devDependencies . push ( "typescript-eslint" ) ;
155- importContent += "import tseslint from \"typescript-eslint\";\n" ;
156- exportContent += " tseslint.configs.recommended,\n" ;
157- }
158-
159- if ( this . answers . framework === "vue" ) {
160- this . result . devDependencies . push ( "eslint-plugin-vue" ) ;
161- importContent += "import pluginVue from \"eslint-plugin-vue\";\n" ;
162- exportContent += " pluginVue.configs[\"flat/essential\"],\n" ;
162+ // https://eslint.vuejs.org/user-guide/#how-to-use-a-custom-parser
163+ if ( this . answers . language === "typescript" ) {
164+ exportContent += " { files: [\"**/*.vue\"], languageOptions: { parserOptions: { parser: tseslint.parser } } },\n" ;
165+ }
166+ }
163167
164- // https://eslint.vuejs.org/user-guide/#how-to-use-a-custom-parser
165- if ( this . answers . language === "typescript" ) {
166- exportContent += " { files: [\"**/*.vue\"], languageOptions: { parserOptions: { parser: tseslint.parser } } },\n" ;
168+ if ( this . answers . framework === "react" ) {
169+ this . result . devDependencies . push ( "eslint-plugin-react" ) ;
170+ importContent += "import pluginReact from \"eslint-plugin-react\";\n" ;
171+ exportContent += " pluginReact.configs.flat.recommended,\n" ;
167172 }
168- }
169173
170- if ( this . answers . framework === "react" ) {
171- this . result . devDependencies . push ( "eslint-plugin-react" ) ;
172- importContent += "import pluginReact from \"eslint-plugin-react\";\n" ;
173- exportContent += " pluginReact.configs.flat.recommended,\n" ;
174+ if ( needCompatHelper ) {
175+ this . result . devDependencies . push ( "@eslint/eslintrc" , "@eslint/js" ) ;
176+ }
174177 }
175178
176179 if ( languages . some ( item => item . startsWith ( "json" ) ) ) {
177180 this . result . devDependencies . push ( "@eslint/json" ) ;
178181 importContent += "import json from \"@eslint/json\";\n" ;
179- }
180- if ( languages . includes ( "json" ) ) {
181- const config = purpose === "syntax"
182- ? " {files: [\"**/*.json\"], plugins: {json}, language: \"json/json\"},\n"
183- : " {files: [\"**/*.json\"], language: \"json/json\", ...json.configs.recommended},\n" ;
184182
185- exportContent += config ;
186- }
187- if ( languages . includes ( "jsonc" ) ) {
188- const config = purpose === "syntax"
189- ? " {files: [\"**/*.jsonc\"], plugins: {json}, language: \"json/jsonc\"},\n"
190- : " {files: [\"**/*.jsonc\"], language: \"json/jsonc\", ...json.configs.recommended},\n" ;
183+ if ( languages . includes ( "json" ) ) {
184+ const config = purpose === "syntax"
185+ ? " { files: [\"**/*.json\"], plugins: { json }, language: \"json/json\" },\n"
186+ : " { files: [\"**/*.json\"], language: \"json/json\", ...json.configs.recommended},\n" ;
191187
192- exportContent += config ;
193- }
194- if ( languages . includes ( "json5 " ) ) {
195- const config = purpose === "syntax"
196- ? " {files: [\"**/*.json5 \"], plugins: {json}, language: \"json/json5\" },\n"
197- : " {files: [\"**/*.json5 \"], language: \"json/json5 \", ...json.configs.recommended},\n" ;
188+ exportContent += config ;
189+ }
190+ if ( languages . includes ( "jsonc " ) ) {
191+ const config = purpose === "syntax"
192+ ? " { files: [\"**/*.jsonc \"], plugins: { json }, language: \"json/jsonc\" },\n"
193+ : " { files: [\"**/*.jsonc \"], language: \"json/jsonc \", ...json.configs.recommended },\n" ;
198194
199- exportContent += config ;
195+ exportContent += config ;
196+ }
197+ if ( languages . includes ( "json5" ) ) {
198+ const config = purpose === "syntax"
199+ ? " { files: [\"**/*.json5\"], plugins: { json }, language: \"json/json5\" },\n"
200+ : " { files: [\"**/*.json5\"], language: \"json/json5\", ...json.configs.recommended },\n" ;
201+
202+ exportContent += config ;
203+ }
200204 }
201205
202206 if ( languages . includes ( "md" ) ) {
@@ -205,8 +209,8 @@ export class ConfigGenerator {
205209
206210 if ( purpose === "syntax" ) {
207211 const config = this . answers . mdType === "commonmark"
208- ? " {files: [\"**/*.md\"], plugins: {markdown}, language: \"markdown/commonmark\"},\n"
209- : " {files: [\"**/*.md\"], plugins: {markdown}, language: \"markdown/gfm\"},\n" ;
212+ ? " { files: [\"**/*.md\"], plugins: {markdown}, language: \"markdown/commonmark\" },\n"
213+ : " { files: [\"**/*.md\"], plugins: {markdown}, language: \"markdown/gfm\" },\n" ;
210214
211215 exportContent += config ;
212216 } else if ( purpose === "problems" ) {
@@ -215,7 +219,7 @@ export class ConfigGenerator {
215219 if ( this . answers . mdType === "gfm" ) {
216220
217221 // the default is commonmark
218- exportContent += " {files: [\"**/*.md\"], language: \"markdown/gfm\"},\n" ;
222+ exportContent += " { files: [\"**/*.md\"], language: \"markdown/gfm\" },\n" ;
219223 }
220224 }
221225 }
@@ -256,14 +260,6 @@ export class ConfigGenerator {
256260 }
257261 }
258262
259- if ( needCompatHelper ) {
260- this . result . devDependencies . push ( "@eslint/eslintrc" , "@eslint/js" ) ;
261- }
262-
263- const lintFilesConfig = ` { files: ["${ extensions } "] },\n` ;
264-
265- exportContent = `${ lintFilesConfig } ${ exportContent } ` ;
266-
267263 this . result . configContent = `${ importContent }
268264${ needCompatHelper ? helperContent : "" }
269265export default defineConfig([\n${ exportContent || " {}\n" } ]);` ; // defaults to `[{}]` to avoid empty config warning
0 commit comments