Skip to content

Commit 066e38c

Browse files
committed
feat!: support eslint v9 & requires node >= 18
1 parent 7bf0bbf commit 066e38c

File tree

29 files changed

+952
-1126
lines changed

29 files changed

+952
-1126
lines changed

.eslintrc.js

Lines changed: 0 additions & 48 deletions
This file was deleted.

.github/workflows/ci.yml

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,37 @@ jobs:
1212
fail-fast: false
1313
matrix:
1414
node-version:
15-
- '18'
16-
- '17'
17-
- '16'
15+
- 22
16+
- 21
17+
- 20
18+
- 18
1819
os:
1920
- ubuntu-latest
2021
steps:
21-
- uses: actions/checkout@v2
22-
- uses: actions/setup-node@v2
22+
- uses: actions/checkout@v4
23+
- uses: actions/setup-node@v4
2324
with:
2425
node-version: ${{ matrix.node-version }}
25-
- run: npm install
26+
- run: npm install --force # ts-eslint does not support eslint v9 yet.
2627
- run: npm test
2728

2829
lint:
2930
runs-on: ubuntu-latest
3031
steps:
31-
- uses: actions/checkout@v2
32-
- uses: actions/setup-node@v2
32+
- uses: actions/checkout@v4
33+
- uses: actions/setup-node@v4
3334
with:
34-
node-version: '16'
35-
- run: npm install
35+
node-version: "lts/*"
36+
- run: npm install --force # ts-eslint does not support eslint v9 yet.
3637
- run: npm run lint
3738

38-
eslint6:
39+
eslint8:
3940
runs-on: ubuntu-latest
4041
steps:
41-
- uses: actions/checkout@v2
42-
- uses: actions/setup-node@v2
42+
- uses: actions/checkout@v4
43+
- uses: actions/setup-node@v4
4344
with:
44-
node-version: '16'
45-
- run: npm install
46-
- run: npm install --save-dev eslint@6
47-
- run: npm test
48-
49-
eslint7:
50-
runs-on: ubuntu-latest
51-
steps:
52-
- uses: actions/checkout@v2
53-
- uses: actions/setup-node@v2
54-
with:
55-
node-version: '16'
56-
- run: npm install
57-
- run: npm install --save-dev eslint@7
45+
node-version: "lts/*"
46+
- run: npm install --force
47+
- run: npm install --save-dev eslint@8
5848
- run: npm test

eslint.config.mjs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import baseConfig from "eslint-config-eslint";
2+
import eslintPlugin from "eslint-plugin-eslint-plugin";
3+
import autofixPlugin from "eslint-plugin-autofix";
4+
import noAutofixPlugin from "eslint-plugin-no-autofix";
5+
import nPlugin from "eslint-plugin-n"; // eslint-disable-line n/no-extraneous-import
6+
import globals from "globals";
7+
8+
export default [
9+
...baseConfig,
10+
eslintPlugin.configs["flat/recommended"],
11+
{ files: ["packages/*/tests/**/*"], languageOptions: { globals: globals.mocha } },
12+
{
13+
plugins: { autofix: autofixPlugin, "no-autofix": noAutofixPlugin },
14+
rules: { "eslint-comments/require-description": 0, "no-autofix/eslint-plugin/test-case-shorthand-strings": "error" }
15+
},
16+
...nPlugin.configs["flat/mixed-esm-and-cjs"]
17+
];

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
"author": "薛定谔的猫 <[email protected]>",
66
"description": "some eslint plugins",
77
"devDependencies": {
8-
"eslint": "^8.1.0",
9-
"eslint-config-eslint": "^7.0.0",
10-
"eslint-plugin-eslint-plugin": "^4.0.1",
11-
"eslint-plugin-jsdoc": "^37.0.3",
12-
"eslint-plugin-node": "^11.1.0"
8+
"eslint": "^9.1.1",
9+
"eslint-config-eslint": "^9.0.0",
10+
"eslint-plugin-autofix": "file:./packages/autofix",
11+
"eslint-plugin-eslint-plugin": "^6.0.0",
12+
"eslint-plugin-no-autofix": "file:./packages/no-autofix",
13+
"globals": "^15.0.0"
1314
},
1415
"scripts": {
1516
"lint": "eslint packages/",
Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
1-
/**
2-
* @fileoverview configs:all for the plugin
3-
* @author 唯然<[email protected]>
4-
*/
5-
"use strict";
6-
7-
const packageMetadata = require("../../package");
8-
const PLUGIN_NAME = packageMetadata.name.replace(/^eslint-plugin-/u, "");
9-
const allRules = require("../rules");
10-
11-
const all = {
12-
plugins: [PLUGIN_NAME],
13-
rules: {}
14-
};
15-
16-
// turn off core rules
17-
Object.keys(allRules)
18-
.reduce((rules, ruleName) => Object.assign(rules, { [ruleName]: "off" }), all.rules);
19-
20-
// turn on plugin rules
21-
Object.keys(allRules)
22-
.reduce((rules, ruleName) => Object.assign(rules, { [`${PLUGIN_NAME}/${ruleName}`]: "error" }), all.rules);
23-
24-
module.exports = all;
1+
/**
2+
* @fileoverview configs:all for the plugin
3+
* @author 唯然<[email protected]>
4+
*/
5+
"use strict";
6+
7+
const packageMetadata = require("../../package");
8+
const PLUGIN_NAME = packageMetadata.name.replace(/^eslint-plugin-/u, "");
9+
const allRules = require("../rules");
10+
11+
const all = {
12+
plugins: [PLUGIN_NAME],
13+
rules: {}
14+
};
15+
16+
// turn off core rules
17+
Object.keys(allRules)
18+
.reduce((rules, ruleName) => Object.assign(rules, { [ruleName]: "off" }), all.rules);
19+
20+
// turn on plugin rules
21+
Object.keys(allRules)
22+
.reduce((rules, ruleName) => Object.assign(rules, { [`${PLUGIN_NAME}/${ruleName}`]: "error" }), all.rules);
23+
24+
module.exports = all;
25+

packages/autofix/lib/index.js

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
1-
/**
2-
* @fileoverview An ESLint plugin provides autofix for some core rules.
3-
* @author 唯然<[email protected]>
4-
*/
5-
"use strict";
6-
7-
const all = require("./configs/all");
8-
const recommended = require("./configs/recommended");
9-
const unsafe = require("./configs/unsafe");
10-
const rules = require("./rules");
11-
12-
module.exports = {
13-
configs: {
14-
all,
15-
recommended,
16-
unsafe
17-
},
18-
rules
19-
};
1+
/**
2+
* @fileoverview An ESLint plugin provides autofix for some core rules.
3+
* @author 唯然<[email protected]>
4+
*/
5+
"use strict";
6+
7+
const all = require("./configs/all");
8+
const recommended = require("./configs/recommended");
9+
const unsafe = require("./configs/unsafe");
10+
const rules = require("./rules");
11+
12+
const pkg = {
13+
configs: {
14+
all,
15+
recommended,
16+
unsafe
17+
},
18+
rules
19+
};
20+
21+
Object.assign(pkg.configs, {
22+
"flat/all": { ...pkg.configs.all, plugins: { autofix: pkg }, rules: pkg.configs.all.rules },
23+
"flat/recommended": { ...pkg.configs.recommended, plugins: { autofix: pkg }, rules: pkg.configs.recommended.rules },
24+
"flat/unsafe": { ...pkg.configs.unsafe, plugins: { autofix: pkg }, rules: pkg.configs.unsafe.rules }
25+
});
26+
27+
module.exports = pkg;

packages/autofix/lib/rules.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
const fs = require("fs");
1313
const path = require("path");
14-
const eslintVersion = Number.parseInt(require("eslint/package.json").version, 10);
14+
const {eslintVersion} = require("./utils.js")
1515

1616

1717
/**
@@ -30,10 +30,10 @@ function loadRule(ruleName) {
3030

3131
const allRules = {};
3232

33-
// eslint v6 restructed its codebase
33+
// eslint v6 restructured its codebase
3434
// TODO: this might be unreliable
3535
if (eslintVersion >= 8) {
36-
const { builtinRules } = require("eslint/use-at-your-own-risk"); // eslint-disable-line node/no-missing-require
36+
const { builtinRules } = require("eslint/use-at-your-own-risk");
3737

3838
for (const [ruleId, rule] of builtinRules) {
3939
if (rule.meta.fixable) {
@@ -49,7 +49,7 @@ if (eslintVersion >= 8) {
4949
}
5050
}
5151
} else {
52-
const builtin = require("eslint/lib/built-in-rules-index"); // eslint-disable-line node/no-missing-require
52+
const builtin = require("eslint/lib/built-in-rules-index"); // eslint-disable-line n/no-missing-require
5353

5454
Object.keys(builtin)
5555
.filter(rule => builtin[rule].meta.fixable)

packages/autofix/lib/utils.js

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,28 @@
1-
/**
2-
* @fileoverview utils used by the rule fixers.
3-
* @author 唯然<[email protected]>
4-
*/
5-
"use strict";
6-
const eslint = require("eslint");
7-
const linter = new eslint.Linter();
8-
9-
exports.getFixableRule = function(ruleName, recommended = false, fixable = "code") {
10-
const rule = linter.getRules().get(ruleName);
11-
12-
rule.meta.recommended = recommended;
13-
rule.meta.fixable = fixable;
14-
return rule;
15-
};
1+
/**
2+
* @fileoverview utils used by the rule fixers.
3+
* @author 唯然<[email protected]>
4+
*/
5+
"use strict";
6+
7+
exports.eslintVersion = Number.parseInt(require("eslint/package.json").version, 10);
8+
9+
// eslint v6 restructured its codebase
10+
// TODO: this might be unreliable
11+
if (exports.eslintVersion >= 8) {
12+
const { builtinRules } = require("eslint/use-at-your-own-risk");
13+
exports.builtinRules = builtinRules;
14+
} else if (exports.eslintVersion >= 6) {
15+
const builtin = require("eslint/lib/rules");
16+
exports.builtinRules = builtin;
17+
} else {
18+
const builtin = require("eslint/lib/built-in-rules-index"); // eslint-disable-line n/no-missing-require
19+
exports.builtinRules = builtin;
20+
}
21+
22+
exports.getFixableRule = function(ruleName, recommended = false, fixable = "code") {
23+
const rule = exports.builtinRules[ruleName] || exports.builtinRules.get(ruleName);
24+
25+
rule.meta.recommended = recommended;
26+
rule.meta.fixable = fixable;
27+
return rule;
28+
};

packages/autofix/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"mocha": "^9.1.3"
3333
},
3434
"peerDependencies": {
35-
"eslint": ">= 5.12.1"
35+
"eslint": ">=8"
3636
},
3737
"keywords": [
3838
"eslint plugin",

0 commit comments

Comments
 (0)