Skip to content

Commit

Permalink
fix: use eslint v9 when choosing react
Browse files Browse the repository at this point in the history
fixes #106
  • Loading branch information
aladdin-add committed May 10, 2024
1 parent 12886ee commit 9fd8cee
Show file tree
Hide file tree
Showing 43 changed files with 96 additions and 64 deletions.
28 changes: 18 additions & 10 deletions lib/config-generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export class ConfigGenerator {
this.packageJsonPath = options.packageJsonPath || findPackageJson(this.cwd);
this.answers = options.answers || {};
this.result = {
devDependencies: [],
devDependencies: ["eslint@^9.2.0"],
configFilename: "eslint.config.js",
configContent: ""
};
Expand Down Expand Up @@ -67,7 +67,7 @@ export class ConfigGenerator {
message: "Which framework does your project use?",
initial: 0,
choices: [
{ message: "React", name: "react" },
{ message: "React (eslint v8 is required to ensure compatibility with eslint-plugin-react)", name: "react" },
{ message: "Vue.js", name: "vue" },
{ message: "None of these", name: "none" }
]
Expand Down Expand Up @@ -166,9 +166,10 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug
}

if (this.answers.framework === "react") {
this.result.devDependencies.push("eslint-plugin-react");
this.result.devDependencies.push("eslint-plugin-react", "@eslint/compat");
importContent += "import pluginReactConfig from \"eslint-plugin-react/configs/recommended.js\";\n";
exportContent += " pluginReactConfig,\n";
importContent += "import { fixupConfigRules } from \"@eslint/compat\";\n";
exportContent += " ...fixupConfigRules(pluginReactConfig),\n";
}
if (this.answers.config) {
const config = this.answers.config;
Expand All @@ -179,7 +180,19 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug
const peers = fetchPeerDependencies(config.packageName);

if (peers !== null) {
this.result.devDependencies.push(...peers);
const eslintIndex = peers.findIndex(dep => (dep.startsWith("eslint@")));

if (eslintIndex === -1) {
// eslint is not in the peer dependencies

this.result.devDependencies.push(...peers);
} else {

// eslint is in the peer dependencies => overwrite eslint version
this.result.devDependencies[0] = peers[eslintIndex];
peers.splice(eslintIndex, 1);
this.result.devDependencies.push(...peers);
}
}

if (config.type === "flat" || config.type === void 0) {
Expand All @@ -198,11 +211,6 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug
this.result.devDependencies.push("@eslint/eslintrc", "@eslint/js");
}

const hasEslint = this.result.devDependencies.some(dep => (/^eslint(@|$)/u.test(dep)));

if (!hasEslint) {
this.result.devDependencies.push("eslint");
}
this.result.configContent = `${importContent}
${needCompatHelper ? helperContent : ""}
export default [\n${exportContent}];`;
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/config@eslint-config-airbnb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ export default [
];",
"configFilename": "eslint.config.mjs",
"devDependencies": [
"eslint-config-airbnb",
"eslint@^7.32.0 || ^8.2.0",
"eslint-config-airbnb",
"eslint-plugin-import@^2.25.3",
"eslint-plugin-jsx-a11y@^6.5.1",
"eslint-plugin-react@^7.28.0",
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/config@eslint-config-airbnb-base
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ export default [
];",
"configFilename": "eslint.config.mjs",
"devDependencies": [
"eslint-config-airbnb-base",
"eslint@^7.32.0 || ^8.2.0",
"eslint-config-airbnb-base",
"eslint-plugin-import@^2.25.2",
"@eslint/eslintrc",
"@eslint/js",
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/config@eslint-config-standard
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ export default [
];",
"configFilename": "eslint.config.mjs",
"devDependencies": [
"eslint-config-standard",
"eslint@^8.0.1",
"eslint-config-standard",
"eslint-plugin-import@^2.25.2",
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise@^6.0.0",
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/config@eslint-config-standard-flat
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ export default [
];",
"configFilename": "eslint.config.mjs",
"devDependencies": [
"eslint-config-standard",
"eslint@^8.0.1",
"eslint-config-standard",
"eslint-plugin-import@^2.25.2",
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise@^6.0.0",
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/config@eslint-config-standard-flat2
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ export default [
];",
"configFilename": "eslint.config.mjs",
"devDependencies": [
"eslint-config-standard",
"eslint@^8.0.1",
"eslint-config-standard",
"eslint-plugin-import@^2.25.2",
"eslint-plugin-n@^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise@^6.0.0",
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/config@eslint-config-xo
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ export default [
];",
"configFilename": "eslint.config.mjs",
"devDependencies": [
"eslint-config-xo",
"eslint@>=8.56.0",
"eslint-config-xo",
"@eslint/eslintrc",
"@eslint/js",
],
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-commonjs-none-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-commonjs-none-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint",
],
}
6 changes: 4 additions & 2 deletions tests/__snapshots__/problems-commonjs-react-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,21 @@
"configContent": "import globals from "globals";
import pluginJs from "@eslint/js";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import { fixupConfigRules } from "@eslint/compat";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginJs.configs.recommended,
pluginReactConfig,
...fixupConfigRules(pluginReactConfig),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint-plugin-react",
"eslint",
"@eslint/compat",
],
}
6 changes: 4 additions & 2 deletions tests/__snapshots__/problems-commonjs-react-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import { fixupConfigRules } from "@eslint/compat";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
pluginReactConfig,
...fixupConfigRules(pluginReactConfig),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint-plugin-react",
"eslint",
"@eslint/compat",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-commonjs-vue-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint-plugin-vue",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-commonjs-vue-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint-plugin-vue",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-esm-none-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-esm-none-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint",
],
}
6 changes: 4 additions & 2 deletions tests/__snapshots__/problems-esm-react-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@
"configContent": "import globals from "globals";
import pluginJs from "@eslint/js";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import { fixupConfigRules } from "@eslint/compat";


export default [
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginJs.configs.recommended,
pluginReactConfig,
...fixupConfigRules(pluginReactConfig),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint-plugin-react",
"eslint",
"@eslint/compat",
],
}
6 changes: 4 additions & 2 deletions tests/__snapshots__/problems-esm-react-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,22 @@
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import { fixupConfigRules } from "@eslint/compat";


export default [
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
pluginReactConfig,
...fixupConfigRules(pluginReactConfig),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint-plugin-react",
"eslint",
"@eslint/compat",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-esm-vue-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint-plugin-vue",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-esm-vue-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint-plugin-vue",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-script-none-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-script-none-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export default [
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint",
],
}
6 changes: 4 additions & 2 deletions tests/__snapshots__/problems-script-react-javascript
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,21 @@
"configContent": "import globals from "globals";
import pluginJs from "@eslint/js";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import { fixupConfigRules } from "@eslint/compat";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "script"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginJs.configs.recommended,
pluginReactConfig,
...fixupConfigRules(pluginReactConfig),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"eslint-plugin-react",
"eslint",
"@eslint/compat",
],
}
6 changes: 4 additions & 2 deletions tests/__snapshots__/problems-script-react-typescript
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import { fixupConfigRules } from "@eslint/compat";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "script"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
pluginReactConfig,
...fixupConfigRules(pluginReactConfig),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint@^9.2.0",
"globals",
"@eslint/js",
"typescript-eslint",
"eslint-plugin-react",
"eslint",
"@eslint/compat",
],
}

0 comments on commit 9fd8cee

Please sign in to comment.