Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: correct defineConfig usage in generated config #161

Merged
merged 11 commits into from
Apr 9, 2025
18 changes: 17 additions & 1 deletion lib/config-generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import path from "node:path";
import { spawnSync } from "node:child_process";
import { writeFile } from "node:fs/promises";
import enquirer from "enquirer";
import semverSatisfies from "semver/functions/satisfies";
import { isPackageTypeModule, installSyncSaveDev, fetchPeerDependencies, findPackageJson } from "./utils/npm-utils.js";
import { getShorthandName } from "./utils/naming.js";
import * as log from "./utils/logging.js";
Expand Down Expand Up @@ -119,7 +120,8 @@ export class ConfigGenerator {
const languages = this.answers.languages ?? ["javascript"];
const purpose = this.answers.purpose;

let importContent = "import { defineConfig } from \"eslint/config\";\n";
let isDefineConfigExported = false;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does it make sense to change to the default to true, as:

devDependencies: ["eslint"],
?

so the only thing is to change it to false when [email protected] is not allowed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aladdin-add I think it is okay like this, it's just about personal preferences.

let importContent = "";
let exportContent = "";
let needCompatHelper = false;

Expand Down Expand Up @@ -245,6 +247,11 @@ export class ConfigGenerator {

this.result.devDependencies.push(...peers);
} else {
const versionMatch = peers[eslintIndex].match(/eslint@(.+)/u);
const versionRequirement = versionMatch[1]; // Complete version requirement string

// Check if the version requirement allows for ESLint 9.22.0+
isDefineConfigExported = semverSatisfies("9.22.0", versionRequirement);

// eslint is in the peer dependencies => overwrite eslint version
this.result.devDependencies[0] = peers[eslintIndex];
Expand All @@ -263,6 +270,15 @@ export class ConfigGenerator {

exportContent += ` compat.extends("${shorthandName}"),\n`;
}
} else {
isDefineConfigExported = true;
}

if (isDefineConfigExported) {
importContent += "import { defineConfig } from \"eslint/config\";\n";
} else {
this.result.devDependencies.push("@eslint/config-helpers");
importContent += "import { defineConfig } from \"@eslint/config-helpers\";\n";
}

if (needCompatHelper) {
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@
},
"dependencies": {
"cross-spawn": "^7.0.2",
"enquirer": "^2.3.5"
"enquirer": "^2.3.5",
"semver": "^7.7.1"
},
"devDependencies": {
"@vitest/coverage-v8": "^1.3.1",
Expand Down
3 changes: 2 additions & 1 deletion tests/__snapshots__/config@eslint-config-airbnb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"configContent": "import { defineConfig } from "eslint/config";
"configContent": "import { defineConfig } from "@eslint/config-helpers";

import path from "node:path";
import { fileURLToPath } from "node:url";
Expand All @@ -22,6 +22,7 @@ export default defineConfig([
"eslint-plugin-import@^2.25.3",
"eslint-plugin-jsx-a11y@^6.5.1",
"eslint-plugin-react-hooks@^4.3.0",
"@eslint/config-helpers",
"@eslint/eslintrc",
"@eslint/js",
],
Expand Down
3 changes: 2 additions & 1 deletion tests/__snapshots__/config@eslint-config-airbnb-base
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"configContent": "import { defineConfig } from "eslint/config";
"configContent": "import { defineConfig } from "@eslint/config-helpers";

import path from "node:path";
import { fileURLToPath } from "node:url";
Expand All @@ -19,6 +19,7 @@ export default defineConfig([
"eslint@^7.32.0 || ^8.2.0",
"eslint-config-airbnb-base",
"eslint-plugin-import@^2.25.2",
"@eslint/config-helpers",
"@eslint/eslintrc",
"@eslint/js",
],
Expand Down
3 changes: 2 additions & 1 deletion tests/__snapshots__/config@eslint-config-standard
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"configContent": "import { defineConfig } from "eslint/config";
"configContent": "import { defineConfig } from "@eslint/config-helpers";

import path from "node:path";
import { fileURLToPath } from "node:url";
Expand All @@ -21,6 +21,7 @@ export default defineConfig([
"eslint-plugin-import@^2.25.2",
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise@^6.0.0",
"@eslint/config-helpers",
"@eslint/eslintrc",
"@eslint/js",
],
Expand Down
5 changes: 3 additions & 2 deletions tests/__snapshots__/config@eslint-config-standard-flat
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import config from "eslint-config-standard";
"configContent": "import config from "eslint-config-standard";
import { defineConfig } from "@eslint/config-helpers";


export default defineConfig([
Expand All @@ -13,6 +13,7 @@ export default defineConfig([
"eslint-plugin-import@^2.25.2",
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise@^6.0.0",
"@eslint/config-helpers",
],
"installFlags": [
"-D",
Expand Down
5 changes: 3 additions & 2 deletions tests/__snapshots__/config@eslint-config-standard-flat2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import config from "eslint-config-standard";
"configContent": "import config from "eslint-config-standard";
import { defineConfig } from "@eslint/config-helpers";


export default defineConfig([
Expand All @@ -13,6 +13,7 @@ export default defineConfig([
"eslint-plugin-import@^2.25.2",
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise@^6.0.0",
"@eslint/config-helpers",
],
"installFlags": [
"-D",
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/config@eslint-config-xo
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import config from "eslint-config-xo";
"configContent": "import config from "eslint-config-xo";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-css-problems
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import css from "@eslint/css";
"configContent": "import css from "@eslint/css";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-css-syntax
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import css from "@eslint/css";
"configContent": "import css from "@eslint/css";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-javascript-json-problems
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-json-problems
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import json from "@eslint/json";
"configContent": "import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-json-syntax
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import json from "@eslint/json";
"configContent": "import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-json5-problems
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import json from "@eslint/json";
"configContent": "import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-json5-syntax
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import json from "@eslint/json";
"configContent": "import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-jsonc-problems
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import json from "@eslint/json";
"configContent": "import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-jsonc-syntax
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import json from "@eslint/json";
"configContent": "import json from "@eslint/json";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-markdown-commonmark-problems
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import markdown from "@eslint/markdown";
"configContent": "import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-markdown-commonmark-syntax
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import markdown from "@eslint/markdown";
"configContent": "import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-markdown-gfm-problems
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import markdown from "@eslint/markdown";
"configContent": "import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/esm-markdown-gfm-syntax
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import markdown from "@eslint/markdown";
"configContent": "import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-commonjs-none-javascript
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-commonjs-none-typescript
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-commonjs-react-javascript
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import pluginReact from "eslint-plugin-react";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-commonjs-react-typescript
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginReact from "eslint-plugin-react";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-commonjs-vue-javascript
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import pluginVue from "eslint-plugin-vue";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-commonjs-vue-typescript
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-esm-none-javascript
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-esm-none-typescript
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-esm-react-javascript
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import pluginReact from "eslint-plugin-react";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-esm-react-typescript
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginReact from "eslint-plugin-react";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-esm-vue-javascript
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import pluginVue from "eslint-plugin-vue";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
4 changes: 2 additions & 2 deletions tests/__snapshots__/problems-esm-vue-typescript
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"configContent": "import { defineConfig } from "eslint/config";
import js from "@eslint/js";
"configContent": "import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";
import { defineConfig } from "eslint/config";


export default defineConfig([
Expand Down
Loading