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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: support flat config #81

Merged
merged 41 commits into from Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
cc4d8a6
feat!: support flat config
aladdin-add Jan 10, 2024
fcde6c3
fix: do not support multi configs
aladdin-add Feb 28, 2024
8ddf82a
fix: helpercontent
aladdin-add Feb 28, 2024
1199d6e
fix: review suggestions
aladdin-add Feb 28, 2024
222e432
fix: rm unused dev deps
aladdin-add Feb 28, 2024
4602713
fix: rm unused dev deps
aladdin-add Feb 29, 2024
a46bdf7
fix: add missing @eslint/eslintrc
aladdin-add Feb 29, 2024
893522d
chore: clean fixtures
aladdin-add Feb 29, 2024
595b5b7
fix: styleguide tests
aladdin-add Feb 29, 2024
9fd59b0
feat: allow styleguide to be string (type = flat)
aladdin-add Feb 29, 2024
f994131
fix: sourceType: script
aladdin-add Feb 29, 2024
ed29ad7
fix: indent
aladdin-add Feb 29, 2024
0cc0c41
fix: use `[].concat()` only for shared configs
aladdin-add Mar 1, 2024
d8d81d5
chore: c8 -> v8
aladdin-add Mar 1, 2024
74e83ab
refactor: do not throw in constructor
aladdin-add Mar 5, 2024
ec2642f
fix: rm deps debug
aladdin-add Mar 7, 2024
640d0d5
fix: shortname for scoped packages
aladdin-add Mar 7, 2024
9a8affb
chore: put env in .npmrc
aladdin-add Mar 12, 2024
399a0f7
fix: change cwd to the `package.json` located dir
aladdin-add Mar 12, 2024
85a6fb2
fix: review suggestions
aladdin-add Mar 13, 2024
07479e1
fix: generage config for sub-dir
aladdin-add Mar 14, 2024
d08ec84
Update lib/config-generator.js
aladdin-add Mar 14, 2024
6fe2d6a
chore: add tests for sub dir
aladdin-add Mar 15, 2024
bd4232b
Update lib/config-generator.js
aladdin-add Mar 18, 2024
082044d
Update lib/config-generator.js
aladdin-add Mar 18, 2024
bb8e042
fix: module => moduleType
aladdin-add Mar 19, 2024
8354c9f
fix: only apply sourceType to js files
aladdin-add Mar 19, 2024
ca75216
fix: problem => problems
aladdin-add Mar 20, 2024
71d5767
fix: eslint bin
aladdin-add Mar 20, 2024
2f61590
fix: update snapshots
aladdin-add Mar 20, 2024
1a6fe9d
chore: refactor export content
aladdin-add Mar 21, 2024
5b83cf0
fix: review suggestions
aladdin-add Mar 22, 2024
36ad1ec
Update README.md
aladdin-add Mar 22, 2024
c8011ce
Update lib/config-generator.js
aladdin-add Mar 24, 2024
a1eae82
Update README.md
aladdin-add Mar 25, 2024
0c19e32
chore: update snapshots
aladdin-add Mar 25, 2024
cdc4430
feat: offical vue supports
aladdin-add Mar 28, 2024
0551e86
fix: revert re-ordering
aladdin-add Mar 29, 2024
0a4c547
fix: allow skipping installing deps
aladdin-add Apr 3, 2024
e7da8c7
Update lib/config-generator.js
aladdin-add Apr 4, 2024
fce14fd
chore: update snapshots
aladdin-add Apr 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
41 changes: 18 additions & 23 deletions lib/config-generator.js
Expand Up @@ -148,10 +148,6 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug
let exportContent = "";
let needCompatHelper = false;

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

aladdin-add marked this conversation as resolved.
Show resolved Hide resolved
if (this.answers.purpose === "syntax") {

// no need to install any plugin
Expand Down Expand Up @@ -185,19 +181,6 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug
}
}

if (this.answers.env?.length > 0) {
this.result.devDependencies.push("globals");
importContent += "import globals from \"globals\";\n";
const envContent = {
browser: "globals: globals.browser",
node: "globals: globals.node",
"browser,node": "globals: {...globals.browser, ...globals.node}"
};

exportContent += ` {languageOptions: { ${envContent[this.answers.env.join(",")]} }},\n`;
}


if (this.answers.language === "typescript") {
this.result.devDependencies.push("typescript-eslint");
importContent += "import tseslint from \"typescript-eslint\";\n";
Expand All @@ -208,12 +191,8 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug

this.result.devDependencies.push("eslint-plugin-vue");

// importContent += "import pluginVue from \"eslint-plugin-vue\";\n";

// // TODO: there is a wip for flat support - https://github.com/vuejs/eslint-plugin-vue/pull/2319
// exportContent += " pluginVue.configs[\"flat/essential\"],\n";
needCompatHelper = true;
exportContent += " ...compat.extends(\"plugin:vue/vue3-essential\").map(config => ({files: [\"**/*.vue\"], ...config})),\n";
importContent += "import pluginVue from \"eslint-plugin-vue\";\n";
exportContent += " pluginVue.configs[\"flat/essential\"],\n";
aladdin-add marked this conversation as resolved.
Show resolved Hide resolved
}

if (this.answers.framework === "react") {
Expand All @@ -222,6 +201,22 @@ const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: plug
exportContent += " pluginReactConfig,\n";
}

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

if (this.answers.env?.length > 0) {
this.result.devDependencies.push("globals");
importContent += "import globals from \"globals\";\n";
const envContent = {
browser: "globals: globals.browser",
node: "globals: globals.node",
"browser,node": "globals: {...globals.browser, ...globals.node}"
};

exportContent += ` {languageOptions: { ${envContent[this.answers.env.join(",")]} }},\n`;
}

if (needCompatHelper) {
this.result.devDependencies.push("@eslint/eslintrc", "@eslint/js");
}
Expand Down
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-commonjs-none-javascript
Expand Up @@ -4,8 +4,8 @@ import globals from "globals";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
pluginJs.configs.recommended,
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
Expand Down
8 changes: 4 additions & 4 deletions tests/__snapshots__/problems-commonjs-none-typescript
@@ -1,20 +1,20 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import globals from "globals";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...tseslint.configs.recommended,
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"typescript-eslint",
"globals",
],
}
8 changes: 4 additions & 4 deletions tests/__snapshots__/problems-commonjs-react-javascript
@@ -1,20 +1,20 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import globals from "globals";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginReactConfig,
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"eslint-plugin-react",
"globals",
],
}
8 changes: 4 additions & 4 deletions tests/__snapshots__/problems-commonjs-react-typescript
@@ -1,23 +1,23 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import globals from "globals";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...tseslint.configs.recommended,
pluginReactConfig,
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"typescript-eslint",
"eslint-plugin-react",
"globals",
],
}
18 changes: 4 additions & 14 deletions tests/__snapshots__/problems-commonjs-vue-javascript
@@ -1,30 +1,20 @@
{
"configContent": "import pluginJs from "@eslint/js";
import pluginVue from "eslint-plugin-vue";
import globals from "globals";

import path from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
import pluginJs from "@eslint/js";

// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: pluginJs.configs.recommended});

export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
pluginJs.configs.recommended,
pluginVue.configs["flat/essential"],
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...compat.extends("plugin:vue/vue3-essential").map(config => ({files: ["**/*.vue"], ...config})),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"eslint-plugin-vue",
"@eslint/eslintrc",
"@eslint/js",
"globals",
],
}
22 changes: 6 additions & 16 deletions tests/__snapshots__/problems-commonjs-vue-typescript
@@ -1,33 +1,23 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";
import globals from "globals";

import path from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
import pluginJs from "@eslint/js";

// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: pluginJs.configs.recommended});

export default [
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...tseslint.configs.recommended,
...compat.extends("plugin:vue/vue3-essential").map(config => ({files: ["**/*.vue"], ...config})),
pluginVue.configs["flat/essential"],
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"typescript-eslint",
"eslint-plugin-vue",
"@eslint/eslintrc",
"@eslint/js",
"globals",
],
}
6 changes: 3 additions & 3 deletions tests/__snapshots__/problems-esm-none-typescript
@@ -1,19 +1,19 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import globals from "globals";


export default [
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...tseslint.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"typescript-eslint",
"globals",
],
}
6 changes: 3 additions & 3 deletions tests/__snapshots__/problems-esm-react-javascript
@@ -1,19 +1,19 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import globals from "globals";


export default [
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
pluginReactConfig,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"eslint-plugin-react",
"globals",
],
}
6 changes: 3 additions & 3 deletions tests/__snapshots__/problems-esm-react-typescript
@@ -1,22 +1,22 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import globals from "globals";


export default [
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...tseslint.configs.recommended,
pluginReactConfig,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"typescript-eslint",
"eslint-plugin-react",
"globals",
],
}
16 changes: 3 additions & 13 deletions tests/__snapshots__/problems-esm-vue-javascript
@@ -1,29 +1,19 @@
{
"configContent": "import pluginJs from "@eslint/js";
import pluginVue from "eslint-plugin-vue";
import globals from "globals";

import path from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
import pluginJs from "@eslint/js";

// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: pluginJs.configs.recommended});

export default [
pluginJs.configs.recommended,
pluginVue.configs["flat/essential"],
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...compat.extends("plugin:vue/vue3-essential").map(config => ({files: ["**/*.vue"], ...config})),
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"eslint-plugin-vue",
"@eslint/eslintrc",
"@eslint/js",
"globals",
],
}
20 changes: 5 additions & 15 deletions tests/__snapshots__/problems-esm-vue-typescript
@@ -1,32 +1,22 @@
{
"configContent": "import pluginJs from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";
import globals from "globals";

import path from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
import pluginJs from "@eslint/js";

// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: pluginJs.configs.recommended});

export default [
pluginJs.configs.recommended,
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
...tseslint.configs.recommended,
...compat.extends("plugin:vue/vue3-essential").map(config => ({files: ["**/*.vue"], ...config})),
pluginVue.configs["flat/essential"],
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
"devDependencies": [
"eslint",
"@eslint/js",
"globals",
"typescript-eslint",
"eslint-plugin-vue",
"@eslint/eslintrc",
"@eslint/js",
"globals",
],
}
2 changes: 1 addition & 1 deletion tests/__snapshots__/problems-script-none-javascript
Expand Up @@ -4,8 +4,8 @@ import globals from "globals";


export default [
{files: ["**/*.js"], languageOptions: {sourceType: "script"}},
pluginJs.configs.recommended,
{files: ["**/*.js"], languageOptions: {sourceType: "script"}},
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
];",
"configFilename": "eslint.config.js",
Expand Down