Skip to content

Commit 0fbc01a

Browse files
authored
refactor: combine environment config with base config (#176)
1 parent 6adb2da commit 0fbc01a

20 files changed

+65
-48
lines changed

lib/config-generator.js

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,31 @@ const __dirname = path.dirname(__filename);
6060
const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: js.configs.recommended});
6161
`;
6262

63+
/**
64+
* Adds environment configuration to the ESLint config.
65+
* @param {Object} options The options for adding environment config.
66+
* @param {string[]} options.env The environment types to add.
67+
* @param {string[]} options.devDependencies The dev dependencies array to modify.
68+
* @returns {{config: string, importContent: string}} The environment configuration content and import statement.
69+
*/
70+
function addEnvironmentConfig({ env, devDependencies }) {
71+
if (!env?.length) {
72+
return { config: "", importContent: "" };
73+
}
74+
75+
devDependencies.push("globals");
76+
const envContent = {
77+
browser: "globals: globals.browser",
78+
node: "globals: globals.node",
79+
"browser,node": "globals: {...globals.browser, ...globals.node}"
80+
};
81+
82+
return {
83+
config: `languageOptions: { ${envContent[env.join(",")]} }`,
84+
importContent: "import globals from \"globals\";\n"
85+
};
86+
}
87+
6388
//-----------------------------------------------------------------------------
6489
// Exports
6590
//-----------------------------------------------------------------------------
@@ -133,23 +158,34 @@ export class ConfigGenerator {
133158
if (purpose === "problems") {
134159
this.result.devDependencies.push("@eslint/js");
135160
importContent += "import js from \"@eslint/js\";\n";
136-
exportContent += ` { files: ["${extensions}"], plugins: { js }, extends: ["js/recommended"] },\n`;
161+
let configContent = ` { files: ["${extensions}"], plugins: { js }, extends: ["js/recommended"]`;
162+
163+
const { config, importContent: envImport } = addEnvironmentConfig({
164+
env: this.answers.env,
165+
devDependencies: this.result.devDependencies
166+
});
167+
168+
importContent += envImport;
169+
if (config) {
170+
configContent += `, ${config}`;
171+
}
172+
173+
exportContent += `${configContent} },\n`;
137174
}
138175

139176
if (this.answers.moduleType === "commonjs" || this.answers.moduleType === "script") {
140177
exportContent += ` { files: ["**/*.js"], languageOptions: { sourceType: "${this.answers.moduleType}" } },\n`;
141178
}
142179

143-
if (this.answers.env?.length > 0) {
144-
this.result.devDependencies.push("globals");
145-
importContent += "import globals from \"globals\";\n";
146-
const envContent = {
147-
browser: "globals: globals.browser",
148-
node: "globals: globals.node",
149-
"browser,node": "globals: {...globals.browser, ...globals.node}"
150-
};
180+
if (this.answers.env?.length > 0 && purpose !== "problems") {
181+
const { config, importContent: envImport } = addEnvironmentConfig({
182+
env: this.answers.env,
183+
devDependencies: this.result.devDependencies
184+
});
185+
186+
importContent += envImport;
151187

152-
exportContent += ` { files: ["${extensions}"], languageOptions: { ${envContent[this.answers.env.join(",")]} } },\n`;
188+
exportContent += ` { files: ["${extensions}"], ${config} },\n`;
153189
}
154190
if (useTs) {
155191
this.result.devDependencies.push("typescript-eslint");

tests/__snapshots__/esm-javascript-json-problems

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([
9-
{ files: ["**/*.{js,mjs,cjs}"], plugins: { js }, extends: ["js/recommended"] },
10-
{ files: ["**/*.{js,mjs,cjs}"], languageOptions: { globals: globals.node } },
9+
{ files: ["**/*.{js,mjs,cjs}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: globals.node } },
1110
{ files: ["**/*.json"], plugins: { json }, language: "json/json", extends: ["json/recommended"] },
1211
]);
1312
",

tests/__snapshots__/problems-commonjs-none-javascript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import { defineConfig } from "eslint/config";
55

66

77
export default defineConfig([
8-
{ files: ["**/*.{js,mjs,cjs}"], plugins: { js }, extends: ["js/recommended"] },
8+
{ files: ["**/*.{js,mjs,cjs}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
99
{ files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
10-
{ files: ["**/*.{js,mjs,cjs}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1110
]);
1211
",
1312
"configFilename": "eslint.config.js",

tests/__snapshots__/problems-commonjs-none-typescript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([
9-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], plugins: { js }, extends: ["js/recommended"] },
9+
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1010
{ files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
11-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1211
tseslint.configs.recommended,
1312
]);
1413
",

tests/__snapshots__/problems-commonjs-react-javascript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([
9-
{ files: ["**/*.{js,mjs,cjs,jsx}"], plugins: { js }, extends: ["js/recommended"] },
9+
{ files: ["**/*.{js,mjs,cjs,jsx}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1010
{ files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
11-
{ files: ["**/*.{js,mjs,cjs,jsx}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1211
pluginReact.configs.flat.recommended,
1312
]);
1413
",

tests/__snapshots__/problems-commonjs-react-typescript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ import { defineConfig } from "eslint/config";
77

88

99
export default defineConfig([
10-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], plugins: { js }, extends: ["js/recommended"] },
10+
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1111
{ files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
12-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1312
tseslint.configs.recommended,
1413
pluginReact.configs.flat.recommended,
1514
]);

tests/__snapshots__/problems-commonjs-vue-javascript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([
9-
{ files: ["**/*.{js,mjs,cjs,vue}"], plugins: { js }, extends: ["js/recommended"] },
9+
{ files: ["**/*.{js,mjs,cjs,vue}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1010
{ files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
11-
{ files: ["**/*.{js,mjs,cjs,vue}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1211
pluginVue.configs["flat/essential"],
1312
]);
1413
",

tests/__snapshots__/problems-commonjs-vue-typescript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ import { defineConfig } from "eslint/config";
77

88

99
export default defineConfig([
10-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,vue}"], plugins: { js }, extends: ["js/recommended"] },
10+
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,vue}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1111
{ files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } },
12-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,vue}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1312
tseslint.configs.recommended,
1413
pluginVue.configs["flat/essential"],
1514
{ files: ["**/*.vue"], languageOptions: { parserOptions: { parser: tseslint.parser } } },

tests/__snapshots__/problems-esm-none-javascript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { defineConfig } from "eslint/config";
55

66

77
export default defineConfig([
8-
{ files: ["**/*.{js,mjs,cjs}"], plugins: { js }, extends: ["js/recommended"] },
9-
{ files: ["**/*.{js,mjs,cjs}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
8+
{ files: ["**/*.{js,mjs,cjs}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
109
]);
1110
",
1211
"configFilename": "eslint.config.js",

tests/__snapshots__/problems-esm-none-typescript

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import { defineConfig } from "eslint/config";
66

77

88
export default defineConfig([
9-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], plugins: { js }, extends: ["js/recommended"] },
10-
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
9+
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: {...globals.browser, ...globals.node} } },
1110
tseslint.configs.recommended,
1211
]);
1312
",

0 commit comments

Comments
 (0)