Skip to content

Commit b6a0d71

Browse files
authored
feat: add config "flat/all" (#401)
1 parent 42464ab commit b6a0d71

File tree

10 files changed

+137
-69
lines changed

10 files changed

+137
-69
lines changed

.eslint-doc-generatorrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const config = {
88
"flat/recommended-module",
99
"flat/recommended",
1010
"flat/mixed-esm-and-cjs",
11+
"flat/all",
1112
],
1213
urlConfigs: "https://github.com/eslint-community/eslint-plugin-n#-configs",
1314
configEmoji: [

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ About each config:
194194
- `recommended`: Considers both CommonJS and ES Modules. If [`"type":"module"` field](https://medium.com/@nodejs/announcing-a-new-experimental-modules-1be8d2d6c2ff#b023) existed in package.json then it considers files as ES Modules. Otherwise it considers files as CommonJS. In addition, it considers `*.mjs` files as ES Modules and `*.cjs` files as CommonJS.
195195
- `recommended-module`: Considers all files as ES Modules.
196196
- `recommended-script`: Considers all files as CommonJS.
197+
- `flat/all`: enables all of the rules shipped with the package. This configuration is **not recommended** for production use because it may change with every minor and major version. Use at your own risk.
197198

198199
These preset configs:
199200

lib/all-rules.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @fileoverview All rules in the plugin.
3+
* @author aladdin-add<[email protected]>
4+
* TODO: maybe auto-generated in the future?
5+
*/
6+
"use strict"
7+
8+
/** @import { Rule } from 'eslint' */
9+
10+
/** @type {Record<string, Rule.RuleModule> } */
11+
module.exports = {
12+
"callback-return": require("./rules/callback-return"),
13+
"exports-style": require("./rules/exports-style"),
14+
"file-extension-in-import": require("./rules/file-extension-in-import"),
15+
"global-require": require("./rules/global-require"),
16+
"handle-callback-err": require("./rules/handle-callback-err"),
17+
"no-callback-literal": require("./rules/no-callback-literal"),
18+
"no-deprecated-api": require("./rules/no-deprecated-api"),
19+
"no-exports-assign": require("./rules/no-exports-assign"),
20+
"no-extraneous-import": require("./rules/no-extraneous-import"),
21+
"no-extraneous-require": require("./rules/no-extraneous-require"),
22+
"no-missing-import": require("./rules/no-missing-import"),
23+
"no-missing-require": require("./rules/no-missing-require"),
24+
"no-mixed-requires": require("./rules/no-mixed-requires"),
25+
"no-new-require": require("./rules/no-new-require"),
26+
"no-path-concat": require("./rules/no-path-concat"),
27+
"no-process-env": require("./rules/no-process-env"),
28+
"no-process-exit": require("./rules/no-process-exit"),
29+
"no-restricted-import": require("./rules/no-restricted-import"),
30+
"no-restricted-require": require("./rules/no-restricted-require"),
31+
"no-sync": require("./rules/no-sync"),
32+
"no-top-level-await": require("./rules/no-top-level-await"),
33+
"no-unpublished-bin": require("./rules/no-unpublished-bin"),
34+
"no-unpublished-import": require("./rules/no-unpublished-import"),
35+
"no-unpublished-require": require("./rules/no-unpublished-require"),
36+
"no-unsupported-features/es-builtins": require("./rules/no-unsupported-features/es-builtins"),
37+
"no-unsupported-features/es-syntax": require("./rules/no-unsupported-features/es-syntax"),
38+
"no-unsupported-features/node-builtins": require("./rules/no-unsupported-features/node-builtins"),
39+
"prefer-global/buffer": require("./rules/prefer-global/buffer"),
40+
"prefer-global/console": require("./rules/prefer-global/console"),
41+
"prefer-global/process": require("./rules/prefer-global/process"),
42+
"prefer-global/text-decoder": require("./rules/prefer-global/text-decoder"),
43+
"prefer-global/text-encoder": require("./rules/prefer-global/text-encoder"),
44+
"prefer-global/url-search-params": require("./rules/prefer-global/url-search-params"),
45+
"prefer-global/url": require("./rules/prefer-global/url"),
46+
"prefer-node-protocol": require("./rules/prefer-node-protocol"),
47+
"prefer-promises/dns": require("./rules/prefer-promises/dns"),
48+
"prefer-promises/fs": require("./rules/prefer-promises/fs"),
49+
"process-exit-as-throw": require("./rules/process-exit-as-throw"),
50+
hashbang: require("./rules/hashbang"),
51+
52+
// Deprecated rules.
53+
"no-hide-core-modules": require("./rules/no-hide-core-modules"),
54+
shebang: require("./rules/shebang"),
55+
}

lib/configs/_commons.js

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
"use strict"
22

3-
/**
4-
* @type {import('eslint').Linter.RulesRecord}
5-
*/
6-
module.exports.commonRules = {
7-
"n/no-deprecated-api": "error",
8-
"n/no-extraneous-import": "error",
9-
"n/no-extraneous-require": "error",
10-
"n/no-exports-assign": "error",
11-
"n/no-missing-import": "error",
12-
"n/no-missing-require": "error",
13-
"n/no-process-exit": "error",
14-
"n/no-unpublished-bin": "error",
15-
"n/no-unpublished-import": "error",
16-
"n/no-unpublished-require": "error",
17-
"n/no-unsupported-features/es-builtins": "error",
18-
"n/no-unsupported-features/es-syntax": "error",
19-
"n/no-unsupported-features/node-builtins": "error",
20-
"n/process-exit-as-throw": "error",
21-
"n/hashbang": "error",
3+
const rules = require("../all-rules")
4+
5+
/** @type {import('eslint').Linter.RulesRecord} */
6+
const recommendeRulesConfig = {}
7+
8+
/** @type {import('eslint').Linter.RulesRecord} */
9+
const allRulesConfig = {}
10+
11+
for (const [ruleName, rule] of Object.entries(rules)) {
12+
const scopedRuleName = `n/${ruleName}`
13+
// only non-deprecated rules
14+
if (rule.meta?.deprecated !== true) {
15+
allRulesConfig[scopedRuleName] = "error"
16+
17+
if (rule.meta?.docs?.recommended === true) {
18+
recommendeRulesConfig[scopedRuleName] = "error"
19+
}
20+
}
2221
}
22+
23+
exports.recommendeRulesConfig = recommendeRulesConfig
24+
exports.allRulesConfig = allRulesConfig

lib/configs/all.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @fileoverview config for enabling all rules in the plugin.
3+
* @author aladdin-add<[email protected]>SS
4+
*/
5+
"use strict"
6+
7+
const { allRulesConfig } = require("./_commons")
8+
const recommendeConfig = require("./recommended")
9+
10+
/**
11+
* https://eslint.org/docs/latest/use/configure/configuration-files-new
12+
* @type {import('eslint').Linter.FlatConfig}
13+
*/
14+
exports.flat = {
15+
name: "node/flat/all",
16+
languageOptions: recommendeConfig.flat.languageOptions ?? {},
17+
rules: allRulesConfig,
18+
}

lib/configs/recommended-module.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use strict"
22

33
const globals = require("globals")
4-
const { commonRules } = require("./_commons")
4+
const { recommendeRulesConfig } = require("./_commons")
55

66
/**
77
* https://eslint.org/docs/latest/use/configure/configuration-files
@@ -25,7 +25,7 @@ module.exports.eslintrc = {
2525
sourceType: "module",
2626
},
2727
rules: {
28-
...commonRules,
28+
...recommendeRulesConfig,
2929
"n/no-unsupported-features/es-syntax": [
3030
"error",
3131
{ ignores: ["modules"] },

lib/configs/recommended-script.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use strict"
22

33
const globals = require("globals")
4-
const { commonRules } = require("./_commons")
4+
const { recommendeRulesConfig } = require("./_commons")
55

66
/**
77
* https://eslint.org/docs/latest/use/configure/configuration-files
@@ -25,7 +25,7 @@ module.exports.eslintrc = {
2525
sourceType: "script",
2626
},
2727
rules: {
28-
...commonRules,
28+
...recommendeRulesConfig,
2929
"n/no-unsupported-features/es-syntax": ["error", { ignores: [] }],
3030
},
3131
}

lib/index.js

Lines changed: 5 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ const pkg = require("../package.json")
44
const esmConfig = require("./configs/recommended-module")
55
const cjsConfig = require("./configs/recommended-script")
66
const recommendedConfig = require("./configs/recommended")
7+
const allRulesConfig = require("./configs/all")
8+
const allRules = require("./all-rules")
79

810
/** @import { ESLint, Linter } from 'eslint' */
911

@@ -13,51 +15,7 @@ const base = {
1315
name: pkg.name,
1416
version: pkg.version,
1517
},
16-
rules: {
17-
"callback-return": require("./rules/callback-return"),
18-
"exports-style": require("./rules/exports-style"),
19-
"file-extension-in-import": require("./rules/file-extension-in-import"),
20-
"global-require": require("./rules/global-require"),
21-
"handle-callback-err": require("./rules/handle-callback-err"),
22-
"no-callback-literal": require("./rules/no-callback-literal"),
23-
"no-deprecated-api": require("./rules/no-deprecated-api"),
24-
"no-exports-assign": require("./rules/no-exports-assign"),
25-
"no-extraneous-import": require("./rules/no-extraneous-import"),
26-
"no-extraneous-require": require("./rules/no-extraneous-require"),
27-
"no-missing-import": require("./rules/no-missing-import"),
28-
"no-missing-require": require("./rules/no-missing-require"),
29-
"no-mixed-requires": require("./rules/no-mixed-requires"),
30-
"no-new-require": require("./rules/no-new-require"),
31-
"no-path-concat": require("./rules/no-path-concat"),
32-
"no-process-env": require("./rules/no-process-env"),
33-
"no-process-exit": require("./rules/no-process-exit"),
34-
"no-restricted-import": require("./rules/no-restricted-import"),
35-
"no-restricted-require": require("./rules/no-restricted-require"),
36-
"no-sync": require("./rules/no-sync"),
37-
"no-top-level-await": require("./rules/no-top-level-await"),
38-
"no-unpublished-bin": require("./rules/no-unpublished-bin"),
39-
"no-unpublished-import": require("./rules/no-unpublished-import"),
40-
"no-unpublished-require": require("./rules/no-unpublished-require"),
41-
"no-unsupported-features/es-builtins": require("./rules/no-unsupported-features/es-builtins"),
42-
"no-unsupported-features/es-syntax": require("./rules/no-unsupported-features/es-syntax"),
43-
"no-unsupported-features/node-builtins": require("./rules/no-unsupported-features/node-builtins"),
44-
"prefer-global/buffer": require("./rules/prefer-global/buffer"),
45-
"prefer-global/console": require("./rules/prefer-global/console"),
46-
"prefer-global/process": require("./rules/prefer-global/process"),
47-
"prefer-global/text-decoder": require("./rules/prefer-global/text-decoder"),
48-
"prefer-global/text-encoder": require("./rules/prefer-global/text-encoder"),
49-
"prefer-global/url-search-params": require("./rules/prefer-global/url-search-params"),
50-
"prefer-global/url": require("./rules/prefer-global/url"),
51-
"prefer-node-protocol": require("./rules/prefer-node-protocol"),
52-
"prefer-promises/dns": require("./rules/prefer-promises/dns"),
53-
"prefer-promises/fs": require("./rules/prefer-promises/fs"),
54-
"process-exit-as-throw": require("./rules/process-exit-as-throw"),
55-
hashbang: require("./rules/hashbang"),
56-
57-
// Deprecated rules.
58-
"no-hide-core-modules": require("./rules/no-hide-core-modules"),
59-
shebang: require("./rules/shebang"),
60-
},
18+
rules: allRules,
6119
}
6220
/**
6321
* @typedef {{
@@ -68,6 +26,7 @@ const base = {
6826
* 'flat/recommended-script': Linter.Config;
6927
* 'flat/recommended': Linter.Config;
7028
* 'flat/mixed-esm-and-cjs': Linter.Config[];
29+
* 'flat/all': Linter.Config;
7130
* }} Configs
7231
*/
7332

@@ -84,6 +43,7 @@ const configs = {
8443
{ files: ["**/*.mjs"], plugins: { n: base }, ...esmConfig.flat },
8544
{ files: ["**/*.cjs"], plugins: { n: base }, ...cjsConfig.flat },
8645
],
46+
"flat/all": { plugins: { n: base }, ...allRulesConfig.flat },
8747
}
8848

8949
/** @type {ESLint.Plugin & { configs: Configs }} */

lib/rules/no-process-exit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = {
1717
type: "suggestion",
1818
docs: {
1919
description: "disallow the use of `process.exit()`",
20-
recommended: false,
20+
recommended: true,
2121
url: "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-process-exit.md",
2222
},
2323
fixable: null,

tests/lib/configs/flat.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"use strict"
2+
3+
const assert = require("assert")
4+
const pkg = require("eslint-plugin-n")
5+
6+
describe("flat configs", () => {
7+
it("should correctly export the plugin", () => {
8+
assert.strictEqual(typeof pkg, "object")
9+
assert.strictEqual(pkg.meta.name, "eslint-plugin-n")
10+
assert(pkg.configs)
11+
assert(pkg.rules)
12+
})
13+
14+
it("should export flat/recommended-module", () => {
15+
const config = pkg.configs["flat/recommended-module"]
16+
assert.strictEqual(config.plugins.n, pkg)
17+
assert(config.rules, "should have rules configured")
18+
})
19+
20+
it("should export flat/recommeded-script", () => {
21+
const config = pkg.configs["flat/recommended-script"]
22+
assert.strictEqual(config.plugins.n, pkg)
23+
assert(config.rules, "should have rules configured")
24+
})
25+
26+
it("should export flat/all", () => {
27+
const config = pkg.configs["flat/all"]
28+
assert.strictEqual(config.plugins.n, pkg)
29+
assert(config.rules, "should have rules configured")
30+
})
31+
})

0 commit comments

Comments
 (0)