eslint-plugin-unicorn 38.0.1 → 41.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configs/all.js +5 -13
- package/configs/recommended.js +20 -13
- package/index.js +3 -2
- package/package.json +71 -28
- package/readme.md +37 -141
- package/rules/better-regex.js +3 -0
- package/rules/catch-error-name.js +4 -1
- package/rules/consistent-destructuring.js +2 -0
- package/rules/consistent-function-scoping.js +10 -6
- package/rules/custom-error-definition.js +2 -0
- package/rules/empty-brace-spaces.js +2 -2
- package/rules/error-message.js +2 -0
- package/rules/escape-case.js +2 -0
- package/rules/expiring-todo-comments.js +23 -12
- package/rules/explicit-length-check.js +2 -0
- package/rules/filename-case.js +4 -12
- package/rules/fix/append-argument.js +1 -1
- package/rules/fix/index.js +3 -0
- package/rules/fix/remove-argument.js +2 -1
- package/rules/fix/remove-parentheses.js +11 -0
- package/rules/fix/replace-argument.js +8 -0
- package/rules/fix/replace-string-literal.js +11 -0
- package/rules/import-index.js +3 -1
- package/rules/import-style.js +69 -70
- package/rules/new-for-builtins.js +2 -0
- package/rules/no-abusive-eslint-disable.js +2 -0
- package/rules/no-array-callback-reference.js +9 -8
- package/rules/no-array-for-each.js +6 -1
- package/rules/no-array-method-this-argument.js +1 -0
- package/rules/no-array-push-push.js +12 -3
- package/rules/no-array-reduce.js +3 -0
- package/rules/no-await-expression-member.js +84 -0
- package/rules/no-console-spaces.js +2 -0
- package/rules/no-document-cookie.js +3 -2
- package/rules/no-empty-file.js +15 -1
- package/rules/no-for-loop.js +2 -0
- package/rules/no-hex-escape.js +2 -0
- package/rules/no-instanceof-array.js +2 -0
- package/rules/no-invalid-remove-event-listener.js +1 -1
- package/rules/no-keyword-prefix.js +3 -2
- package/rules/no-lonely-if.js +2 -0
- package/rules/no-nested-ternary.js +2 -0
- package/rules/no-new-array.js +22 -19
- package/rules/no-new-buffer.js +7 -4
- package/rules/no-null.js +3 -1
- package/rules/no-object-as-default-parameter.js +2 -0
- package/rules/no-process-exit.js +2 -0
- package/rules/no-static-only-class.js +2 -1
- package/rules/no-thenable.js +127 -0
- package/rules/no-this-assignment.js +2 -0
- package/rules/no-unreadable-array-destructuring.js +2 -0
- package/rules/no-unsafe-regex.js +2 -0
- package/rules/no-unused-properties.js +2 -0
- package/rules/no-useless-fallback-in-spread.js +3 -9
- package/rules/no-useless-length-check.js +1 -0
- package/rules/no-useless-promise-resolve-reject.js +204 -0
- package/rules/no-useless-spread.js +3 -6
- package/rules/no-useless-undefined.js +6 -2
- package/rules/no-zero-fractions.js +2 -0
- package/rules/number-literal-case.js +2 -0
- package/rules/numeric-separators-style.js +3 -2
- package/rules/prefer-add-event-listener.js +7 -1
- package/rules/prefer-array-find.js +4 -2
- package/rules/prefer-array-flat-map.js +2 -0
- package/rules/prefer-array-flat.js +2 -1
- package/rules/prefer-array-index-of.js +1 -0
- package/rules/prefer-array-some.js +2 -0
- package/rules/prefer-at.js +44 -28
- package/rules/prefer-code-point.js +56 -0
- package/rules/prefer-date-now.js +2 -0
- package/rules/prefer-default-parameters.js +3 -1
- package/rules/prefer-dom-node-append.js +2 -0
- package/rules/prefer-dom-node-dataset.js +50 -27
- package/rules/prefer-dom-node-remove.js +2 -0
- package/rules/prefer-dom-node-text-content.js +2 -0
- package/rules/prefer-export-from.js +187 -78
- package/rules/prefer-includes.js +2 -0
- package/rules/prefer-json-parse-buffer.js +158 -0
- package/rules/prefer-keyboard-event-key.js +18 -7
- package/rules/prefer-math-trunc.js +7 -5
- package/rules/prefer-modern-dom-apis.js +2 -0
- package/rules/prefer-module.js +16 -14
- package/rules/prefer-negative-index.js +2 -0
- package/rules/prefer-node-protocol.js +4 -3
- package/rules/prefer-number-properties.js +3 -1
- package/rules/prefer-object-from-entries.js +4 -5
- package/rules/prefer-optional-catch-binding.js +2 -0
- package/rules/prefer-prototype-methods.js +3 -2
- package/rules/prefer-query-selector.js +2 -0
- package/rules/prefer-reflect-apply.js +7 -5
- package/rules/prefer-regexp-test.js +2 -0
- package/rules/prefer-set-has.js +4 -2
- package/rules/prefer-spread.js +2 -0
- package/rules/prefer-string-replace-all.js +2 -0
- package/rules/prefer-string-slice.js +126 -132
- package/rules/prefer-string-starts-ends-with.js +2 -0
- package/rules/prefer-string-trim-start-end.js +2 -0
- package/rules/prefer-switch.js +3 -1
- package/rules/prefer-ternary.js +3 -1
- package/rules/prefer-top-level-await.js +34 -2
- package/rules/prefer-type-error.js +2 -0
- package/rules/prevent-abbreviations.js +78 -72
- package/rules/relative-url-style.js +109 -0
- package/rules/require-array-join-separator.js +1 -0
- package/rules/require-number-to-fixed-digits-argument.js +9 -5
- package/rules/require-post-message-target-origin.js +1 -0
- package/rules/selectors/not-dom-node.js +2 -1
- package/rules/string-content.js +3 -1
- package/rules/template-indent.js +12 -4
- package/rules/text-encoding-identifier-case.js +69 -0
- package/rules/throw-new-error.js +3 -1
- package/rules/utils/create-deprecated-rules.js +1 -1
- package/rules/utils/get-builtin-rule.js +1 -1
- package/rules/utils/get-key-name.js +39 -0
- package/rules/utils/get-references.js +3 -3
- package/rules/utils/get-variable-identifiers.js +2 -3
- package/rules/utils/is-function-self-used-inside.js +1 -1
- package/rules/utils/is-number.js +224 -0
- package/rules/utils/is-same-reference.js +4 -4
- package/rules/utils/rule.js +41 -3
- package/rules/utils/should-add-parentheses-to-logical-expression-child.js +2 -1
- package/rules/utils/should-add-parentheses-to-member-expression-object.js +1 -1
- package/configs/base.js +0 -13
- package/configs/conflicting-rules.js +0 -6
- package/rules/prefer-object-has-own.js +0 -105
- package/rules/utils/get-property-name.js +0 -30
package/configs/all.js
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
const
|
|
2
|
+
const {rules, ...baseConfigs} = require('./recommended.js');
|
|
3
3
|
|
|
4
4
|
module.exports = {
|
|
5
|
-
...
|
|
6
|
-
rules:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
.filter(
|
|
10
|
-
ruleEntry =>
|
|
11
|
-
!Object.keys(conflictingRules.rules).includes(ruleEntry[0]),
|
|
12
|
-
)
|
|
13
|
-
.map(ruleEntry => [ruleEntry[0], 'error']),
|
|
14
|
-
),
|
|
15
|
-
...conflictingRules.rules,
|
|
16
|
-
},
|
|
5
|
+
...baseConfigs,
|
|
6
|
+
rules: Object.fromEntries(Object.entries(rules).map(
|
|
7
|
+
([ruleId, severity]) => [ruleId, ruleId.startsWith('unicorn/') ? 'error' : severity],
|
|
8
|
+
)),
|
|
17
9
|
};
|
package/configs/recommended.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
module.exports = {
|
|
3
|
-
|
|
3
|
+
env: {
|
|
4
|
+
es2022: true,
|
|
5
|
+
},
|
|
6
|
+
parserOptions: {
|
|
7
|
+
ecmaVersion: 'latest',
|
|
8
|
+
sourceType: 'module',
|
|
9
|
+
},
|
|
10
|
+
plugins: [
|
|
11
|
+
'unicorn',
|
|
12
|
+
],
|
|
4
13
|
rules: {
|
|
5
14
|
'unicorn/better-regex': 'error',
|
|
6
15
|
'unicorn/catch-error-name': 'error',
|
|
@@ -22,6 +31,7 @@ module.exports = {
|
|
|
22
31
|
'unicorn/no-array-method-this-argument': 'error',
|
|
23
32
|
'unicorn/no-array-push-push': 'error',
|
|
24
33
|
'unicorn/no-array-reduce': 'error',
|
|
34
|
+
'unicorn/no-await-expression-member': 'error',
|
|
25
35
|
'unicorn/no-console-spaces': 'error',
|
|
26
36
|
'unicorn/no-document-cookie': 'error',
|
|
27
37
|
'unicorn/no-empty-file': 'error',
|
|
@@ -39,12 +49,14 @@ module.exports = {
|
|
|
39
49
|
'unicorn/no-object-as-default-parameter': 'error',
|
|
40
50
|
'unicorn/no-process-exit': 'error',
|
|
41
51
|
'unicorn/no-static-only-class': 'error',
|
|
52
|
+
'unicorn/no-thenable': 'error',
|
|
42
53
|
'unicorn/no-this-assignment': 'error',
|
|
43
54
|
'unicorn/no-unreadable-array-destructuring': 'error',
|
|
44
55
|
'unicorn/no-unsafe-regex': 'off',
|
|
45
56
|
'unicorn/no-unused-properties': 'off',
|
|
46
57
|
'unicorn/no-useless-fallback-in-spread': 'error',
|
|
47
58
|
'unicorn/no-useless-length-check': 'error',
|
|
59
|
+
'unicorn/no-useless-promise-resolve-reject': 'error',
|
|
48
60
|
'unicorn/no-useless-spread': 'error',
|
|
49
61
|
'unicorn/no-useless-undefined': 'error',
|
|
50
62
|
'unicorn/no-zero-fractions': 'error',
|
|
@@ -58,6 +70,7 @@ module.exports = {
|
|
|
58
70
|
'unicorn/prefer-array-some': 'error',
|
|
59
71
|
// TODO: Enable this by default when targeting a Node.js version that supports `Array#at`.
|
|
60
72
|
'unicorn/prefer-at': 'off',
|
|
73
|
+
'unicorn/prefer-code-point': 'error',
|
|
61
74
|
'unicorn/prefer-date-now': 'error',
|
|
62
75
|
'unicorn/prefer-default-parameters': 'error',
|
|
63
76
|
'unicorn/prefer-dom-node-append': 'error',
|
|
@@ -66,6 +79,7 @@ module.exports = {
|
|
|
66
79
|
'unicorn/prefer-dom-node-text-content': 'error',
|
|
67
80
|
'unicorn/prefer-export-from': 'error',
|
|
68
81
|
'unicorn/prefer-includes': 'error',
|
|
82
|
+
'unicorn/prefer-json-parse-buffer': 'error',
|
|
69
83
|
'unicorn/prefer-keyboard-event-key': 'error',
|
|
70
84
|
'unicorn/prefer-math-trunc': 'error',
|
|
71
85
|
'unicorn/prefer-modern-dom-apis': 'error',
|
|
@@ -74,8 +88,6 @@ module.exports = {
|
|
|
74
88
|
'unicorn/prefer-node-protocol': 'error',
|
|
75
89
|
'unicorn/prefer-number-properties': 'error',
|
|
76
90
|
'unicorn/prefer-object-from-entries': 'error',
|
|
77
|
-
// TODO: Enable this by default when targeting Node.js 16.
|
|
78
|
-
'unicorn/prefer-object-has-own': 'off',
|
|
79
91
|
'unicorn/prefer-optional-catch-binding': 'error',
|
|
80
92
|
'unicorn/prefer-prototype-methods': 'error',
|
|
81
93
|
'unicorn/prefer-query-selector': 'error',
|
|
@@ -94,20 +106,15 @@ module.exports = {
|
|
|
94
106
|
'unicorn/prefer-top-level-await': 'off',
|
|
95
107
|
'unicorn/prefer-type-error': 'error',
|
|
96
108
|
'unicorn/prevent-abbreviations': 'error',
|
|
109
|
+
'unicorn/relative-url-style': 'error',
|
|
97
110
|
'unicorn/require-array-join-separator': 'error',
|
|
98
111
|
'unicorn/require-number-to-fixed-digits-argument': 'error',
|
|
99
|
-
'
|
|
112
|
+
// Turned off because we can't distinguish `widow.postMessage` and `{Worker,MessagePort,Client,BroadcastChannel}#postMessage()`
|
|
113
|
+
// See #1396
|
|
114
|
+
'unicorn/require-post-message-target-origin': 'off',
|
|
100
115
|
'unicorn/string-content': 'off',
|
|
101
116
|
'unicorn/template-indent': 'warn',
|
|
117
|
+
'unicorn/text-encoding-identifier-case': 'error',
|
|
102
118
|
'unicorn/throw-new-error': 'error',
|
|
103
|
-
...require('./conflicting-rules.js').rules,
|
|
104
119
|
},
|
|
105
|
-
overrides: [
|
|
106
|
-
{
|
|
107
|
-
files: ['*.ts', '*.tsx'],
|
|
108
|
-
rules: {
|
|
109
|
-
'unicorn/require-post-message-target-origin': 'off',
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
],
|
|
113
120
|
};
|
package/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const createDeprecatedRules = require('./rules/utils/create-deprecated-rules.js');
|
|
3
3
|
const {loadRules} = require('./rules/utils/rule.js');
|
|
4
4
|
const recommendedConfig = require('./configs/recommended.js');
|
|
5
|
-
const
|
|
5
|
+
const allRulesEnabledConfig = require('./configs/all.js');
|
|
6
6
|
|
|
7
7
|
const deprecatedRules = createDeprecatedRules({
|
|
8
8
|
// {ruleId: ReplacementRuleId | ReplacementRuleId[]}, if no replacement, use `{ruleId: []}`
|
|
@@ -15,6 +15,7 @@ const deprecatedRules = createDeprecatedRules({
|
|
|
15
15
|
'prefer-flat-map': 'unicorn/prefer-array-flat-map',
|
|
16
16
|
'prefer-node-append': 'unicorn/prefer-dom-node-append',
|
|
17
17
|
'prefer-node-remove': 'unicorn/prefer-dom-node-remove',
|
|
18
|
+
'prefer-object-has-own': 'prefer-object-has-own',
|
|
18
19
|
'prefer-replace-all': 'unicorn/prefer-string-replace-all',
|
|
19
20
|
'prefer-starts-ends-with': 'unicorn/prefer-string-starts-ends-with',
|
|
20
21
|
'prefer-text-content': 'unicorn/prefer-dom-node-text-content',
|
|
@@ -29,6 +30,6 @@ module.exports = {
|
|
|
29
30
|
},
|
|
30
31
|
configs: {
|
|
31
32
|
recommended: recommendedConfig,
|
|
32
|
-
all,
|
|
33
|
+
all: allRulesEnabledConfig,
|
|
33
34
|
},
|
|
34
35
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-unicorn",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "41.0.0",
|
|
4
4
|
"description": "Various awesome ESLint rules",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/eslint-plugin-unicorn",
|
|
@@ -14,13 +14,21 @@
|
|
|
14
14
|
"node": ">=12"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
17
|
+
"create-rule": "node ./scripts/create-rule.mjs && npm run generate-rule-notices && npm run generate-rules-table",
|
|
18
|
+
"fix": "run-p --continue-on-error fix:*",
|
|
19
|
+
"fix:js": "npm run lint:js -- --fix",
|
|
20
|
+
"fix:md": "npm run lint:md -- --fix",
|
|
21
|
+
"generate-rule-notices": "node ./scripts/generate-rule-notices.mjs",
|
|
22
|
+
"generate-rules-table": "node ./scripts/generate-rules-table.mjs",
|
|
20
23
|
"integration": "node ./test/integration/test.mjs",
|
|
24
|
+
"lint": "run-p --continue-on-error lint:*",
|
|
25
|
+
"lint:js": "xo",
|
|
26
|
+
"lint:md": "markdownlint \"**/*.md\"",
|
|
27
|
+
"lint:package-json": "npmPkgJsonLint .",
|
|
28
|
+
"run-rules-on-codebase": "node ./test/run-rules-on-codebase/lint.mjs",
|
|
21
29
|
"smoke": "eslint-remote-tester --config ./test/smoke/eslint-remote-tester.config.js",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
30
|
+
"test": "npm-run-all --continue-on-error lint test:*",
|
|
31
|
+
"test:js": "c8 ava"
|
|
24
32
|
},
|
|
25
33
|
"files": [
|
|
26
34
|
"index.js",
|
|
@@ -38,48 +46,51 @@
|
|
|
38
46
|
"xo"
|
|
39
47
|
],
|
|
40
48
|
"dependencies": {
|
|
41
|
-
"@babel/helper-validator-identifier": "^7.
|
|
42
|
-
"ci-info": "^3.
|
|
49
|
+
"@babel/helper-validator-identifier": "^7.15.7",
|
|
50
|
+
"ci-info": "^3.3.0",
|
|
43
51
|
"clean-regexp": "^1.0.0",
|
|
44
|
-
"eslint-template-visitor": "^2.3.2",
|
|
45
52
|
"eslint-utils": "^3.0.0",
|
|
46
53
|
"esquery": "^1.4.0",
|
|
47
|
-
"indent-string": "4",
|
|
54
|
+
"indent-string": "^4.0.0",
|
|
48
55
|
"is-builtin-module": "^3.1.0",
|
|
49
56
|
"lodash": "^4.17.21",
|
|
50
57
|
"pluralize": "^8.0.0",
|
|
51
58
|
"read-pkg-up": "^7.0.1",
|
|
52
|
-
"regexp-tree": "^0.1.
|
|
59
|
+
"regexp-tree": "^0.1.24",
|
|
53
60
|
"safe-regex": "^2.1.1",
|
|
54
61
|
"semver": "^7.3.5",
|
|
55
62
|
"strip-indent": "^3.0.0"
|
|
56
63
|
},
|
|
57
64
|
"devDependencies": {
|
|
58
|
-
"@babel/code-frame": "^7.
|
|
59
|
-
"@babel/core": "^7.
|
|
60
|
-
"@babel/eslint-parser": "^7.16.
|
|
65
|
+
"@babel/code-frame": "^7.16.0",
|
|
66
|
+
"@babel/core": "^7.16.5",
|
|
67
|
+
"@babel/eslint-parser": "^7.16.5",
|
|
61
68
|
"@lubien/fixture-beta-package": "^1.0.0-beta.1",
|
|
62
|
-
"@typescript-eslint/parser": "^5.
|
|
69
|
+
"@typescript-eslint/parser": "^5.7.0",
|
|
63
70
|
"ava": "^3.15.0",
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
71
|
+
"c8": "^7.11.0",
|
|
72
|
+
"chalk": "^5.0.0",
|
|
73
|
+
"enquirer": "^2.3.6",
|
|
74
|
+
"eslint": "^8.8.0",
|
|
67
75
|
"eslint-ava-rule-tester": "^4.0.0",
|
|
68
|
-
"eslint-plugin-eslint-plugin": "^4.0
|
|
76
|
+
"eslint-plugin-eslint-plugin": "^4.1.0",
|
|
77
|
+
"eslint-plugin-internal-rules": "file:./scripts/internal-rules/",
|
|
69
78
|
"eslint-remote-tester": "^2.0.1",
|
|
70
79
|
"eslint-remote-tester-repositories": "^0.0.3",
|
|
71
|
-
"execa": "^
|
|
80
|
+
"execa": "^6.0.0",
|
|
72
81
|
"listr": "^0.14.3",
|
|
73
|
-
"lodash-es": "4.17.21",
|
|
82
|
+
"lodash-es": "^4.17.21",
|
|
83
|
+
"markdownlint-cli": "^0.30.0",
|
|
74
84
|
"mem": "^9.0.1",
|
|
75
|
-
"
|
|
85
|
+
"npm-package-json-lint": "^5.4.2",
|
|
86
|
+
"npm-run-all": "^4.1.5",
|
|
76
87
|
"outdent": "^0.8.0",
|
|
77
|
-
"typescript": "^4.4
|
|
78
|
-
"vue-eslint-parser": "^8.0.
|
|
79
|
-
"xo": "^0.
|
|
88
|
+
"typescript": "^4.5.4",
|
|
89
|
+
"vue-eslint-parser": "^8.0.1",
|
|
90
|
+
"xo": "^0.47.0"
|
|
80
91
|
},
|
|
81
92
|
"peerDependencies": {
|
|
82
|
-
"eslint": ">=
|
|
93
|
+
"eslint": ">=8.8.0"
|
|
83
94
|
},
|
|
84
95
|
"ava": {
|
|
85
96
|
"files": [
|
|
@@ -87,7 +98,7 @@
|
|
|
87
98
|
"test/unit/*.mjs"
|
|
88
99
|
]
|
|
89
100
|
},
|
|
90
|
-
"
|
|
101
|
+
"c8": {
|
|
91
102
|
"reporter": [
|
|
92
103
|
"text",
|
|
93
104
|
"lcov"
|
|
@@ -100,7 +111,16 @@
|
|
|
100
111
|
"test/integration/{fixtures,fixtures-local}/**"
|
|
101
112
|
],
|
|
102
113
|
"rules": {
|
|
103
|
-
"unicorn/no-null": "error"
|
|
114
|
+
"unicorn/no-null": "error",
|
|
115
|
+
"unicorn/prefer-array-flat": [
|
|
116
|
+
"error",
|
|
117
|
+
{
|
|
118
|
+
"functions": [
|
|
119
|
+
"flat",
|
|
120
|
+
"flatten"
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
]
|
|
104
124
|
},
|
|
105
125
|
"overrides": [
|
|
106
126
|
{
|
|
@@ -136,7 +156,30 @@
|
|
|
136
156
|
"eslint-plugin/require-meta-has-suggestions": "off",
|
|
137
157
|
"eslint-plugin/require-meta-schema": "off"
|
|
138
158
|
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"files": [
|
|
162
|
+
"rules/**/*.js"
|
|
163
|
+
],
|
|
164
|
+
"plugins": [
|
|
165
|
+
"internal-rules"
|
|
166
|
+
],
|
|
167
|
+
"rules": {
|
|
168
|
+
"internal-rules/prefer-negative-boolean-attribute": "error"
|
|
169
|
+
}
|
|
139
170
|
}
|
|
140
171
|
]
|
|
172
|
+
},
|
|
173
|
+
"npmpackagejsonlint": {
|
|
174
|
+
"rules": {
|
|
175
|
+
"prefer-caret-version-devDependencies": [
|
|
176
|
+
"error",
|
|
177
|
+
{
|
|
178
|
+
"exceptions": [
|
|
179
|
+
"eslint-plugin-internal-rules"
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
]
|
|
183
|
+
}
|
|
141
184
|
}
|
|
142
185
|
}
|
package/readme.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# eslint-plugin-unicorn [](https://codecov.io/gh/sindresorhus/eslint-plugin-unicorn/branch/main) [](https://npmjs.com/package/eslint-plugin-unicorn)
|
|
2
2
|
|
|
3
|
+
<!-- markdownlint-disable-next-line no-inline-html -->
|
|
3
4
|
<img src="https://cloud.githubusercontent.com/assets/170270/18659176/1cc373d0-7f33-11e6-890f-0ba35362ee7e.jpg" width="180" align="right">
|
|
4
5
|
|
|
5
6
|
> Various awesome ESLint rules
|
|
@@ -10,22 +11,20 @@ You might want to check out [XO](https://github.com/xojs/xo), which includes thi
|
|
|
10
11
|
|
|
11
12
|
## Install
|
|
12
13
|
|
|
13
|
-
```
|
|
14
|
-
|
|
14
|
+
```sh
|
|
15
|
+
npm install --save-dev eslint eslint-plugin-unicorn
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
## Usage
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
Use a [preset config](#preset-configs) or configure each rules in `package.json`.
|
|
20
21
|
|
|
21
|
-
<!-- Do not manually modify this table. Run: `npm run generate-usage-example` -->
|
|
22
|
-
<!-- USAGE_EXAMPLE_START -->
|
|
23
22
|
```json
|
|
24
23
|
{
|
|
25
24
|
"name": "my-awesome-project",
|
|
26
25
|
"eslintConfig": {
|
|
27
26
|
"env": {
|
|
28
|
-
"
|
|
27
|
+
"es2022": true
|
|
29
28
|
},
|
|
30
29
|
"parserOptions": {
|
|
31
30
|
"ecmaVersion": "latest",
|
|
@@ -36,127 +35,22 @@ Configure it in `package.json`.
|
|
|
36
35
|
],
|
|
37
36
|
"rules": {
|
|
38
37
|
"unicorn/better-regex": "error",
|
|
39
|
-
"unicorn
|
|
40
|
-
|
|
41
|
-
"unicorn/consistent-function-scoping": "error",
|
|
42
|
-
"unicorn/custom-error-definition": "off",
|
|
43
|
-
"unicorn/empty-brace-spaces": "error",
|
|
44
|
-
"unicorn/error-message": "error",
|
|
45
|
-
"unicorn/escape-case": "error",
|
|
46
|
-
"unicorn/expiring-todo-comments": "error",
|
|
47
|
-
"unicorn/explicit-length-check": "error",
|
|
48
|
-
"unicorn/filename-case": "error",
|
|
49
|
-
"unicorn/import-index": "off",
|
|
50
|
-
"unicorn/import-style": "error",
|
|
51
|
-
"unicorn/new-for-builtins": "error",
|
|
52
|
-
"unicorn/no-abusive-eslint-disable": "error",
|
|
53
|
-
"unicorn/no-array-callback-reference": "error",
|
|
54
|
-
"unicorn/no-array-for-each": "error",
|
|
55
|
-
"unicorn/no-array-method-this-argument": "error",
|
|
56
|
-
"unicorn/no-array-push-push": "error",
|
|
57
|
-
"unicorn/no-array-reduce": "error",
|
|
58
|
-
"unicorn/no-console-spaces": "error",
|
|
59
|
-
"unicorn/no-document-cookie": "error",
|
|
60
|
-
"unicorn/no-empty-file": "error",
|
|
61
|
-
"unicorn/no-for-loop": "error",
|
|
62
|
-
"unicorn/no-hex-escape": "error",
|
|
63
|
-
"unicorn/no-instanceof-array": "error",
|
|
64
|
-
"unicorn/no-invalid-remove-event-listener": "error",
|
|
65
|
-
"unicorn/no-keyword-prefix": "off",
|
|
66
|
-
"unicorn/no-lonely-if": "error",
|
|
67
|
-
"no-nested-ternary": "off",
|
|
68
|
-
"unicorn/no-nested-ternary": "error",
|
|
69
|
-
"unicorn/no-new-array": "error",
|
|
70
|
-
"unicorn/no-new-buffer": "error",
|
|
71
|
-
"unicorn/no-null": "error",
|
|
72
|
-
"unicorn/no-object-as-default-parameter": "error",
|
|
73
|
-
"unicorn/no-process-exit": "error",
|
|
74
|
-
"unicorn/no-static-only-class": "error",
|
|
75
|
-
"unicorn/no-this-assignment": "error",
|
|
76
|
-
"unicorn/no-unreadable-array-destructuring": "error",
|
|
77
|
-
"unicorn/no-unsafe-regex": "off",
|
|
78
|
-
"unicorn/no-unused-properties": "off",
|
|
79
|
-
"unicorn/no-useless-fallback-in-spread": "error",
|
|
80
|
-
"unicorn/no-useless-length-check": "error",
|
|
81
|
-
"unicorn/no-useless-spread": "error",
|
|
82
|
-
"unicorn/no-useless-undefined": "error",
|
|
83
|
-
"unicorn/no-zero-fractions": "error",
|
|
84
|
-
"unicorn/number-literal-case": "error",
|
|
85
|
-
"unicorn/numeric-separators-style": "error",
|
|
86
|
-
"unicorn/prefer-add-event-listener": "error",
|
|
87
|
-
"unicorn/prefer-array-find": "error",
|
|
88
|
-
"unicorn/prefer-array-flat": "error",
|
|
89
|
-
"unicorn/prefer-array-flat-map": "error",
|
|
90
|
-
"unicorn/prefer-array-index-of": "error",
|
|
91
|
-
"unicorn/prefer-array-some": "error",
|
|
92
|
-
"unicorn/prefer-at": "off",
|
|
93
|
-
"unicorn/prefer-date-now": "error",
|
|
94
|
-
"unicorn/prefer-default-parameters": "error",
|
|
95
|
-
"unicorn/prefer-dom-node-append": "error",
|
|
96
|
-
"unicorn/prefer-dom-node-dataset": "error",
|
|
97
|
-
"unicorn/prefer-dom-node-remove": "error",
|
|
98
|
-
"unicorn/prefer-dom-node-text-content": "error",
|
|
99
|
-
"unicorn/prefer-export-from": "error",
|
|
100
|
-
"unicorn/prefer-includes": "error",
|
|
101
|
-
"unicorn/prefer-keyboard-event-key": "error",
|
|
102
|
-
"unicorn/prefer-math-trunc": "error",
|
|
103
|
-
"unicorn/prefer-modern-dom-apis": "error",
|
|
104
|
-
"unicorn/prefer-module": "error",
|
|
105
|
-
"unicorn/prefer-negative-index": "error",
|
|
106
|
-
"unicorn/prefer-node-protocol": "error",
|
|
107
|
-
"unicorn/prefer-number-properties": "error",
|
|
108
|
-
"unicorn/prefer-object-from-entries": "error",
|
|
109
|
-
"unicorn/prefer-object-has-own": "off",
|
|
110
|
-
"unicorn/prefer-optional-catch-binding": "error",
|
|
111
|
-
"unicorn/prefer-prototype-methods": "error",
|
|
112
|
-
"unicorn/prefer-query-selector": "error",
|
|
113
|
-
"unicorn/prefer-reflect-apply": "error",
|
|
114
|
-
"unicorn/prefer-regexp-test": "error",
|
|
115
|
-
"unicorn/prefer-set-has": "error",
|
|
116
|
-
"unicorn/prefer-spread": "error",
|
|
117
|
-
"unicorn/prefer-string-replace-all": "off",
|
|
118
|
-
"unicorn/prefer-string-slice": "error",
|
|
119
|
-
"unicorn/prefer-string-starts-ends-with": "error",
|
|
120
|
-
"unicorn/prefer-string-trim-start-end": "error",
|
|
121
|
-
"unicorn/prefer-switch": "error",
|
|
122
|
-
"unicorn/prefer-ternary": "error",
|
|
123
|
-
"unicorn/prefer-top-level-await": "off",
|
|
124
|
-
"unicorn/prefer-type-error": "error",
|
|
125
|
-
"unicorn/prevent-abbreviations": "error",
|
|
126
|
-
"unicorn/require-array-join-separator": "error",
|
|
127
|
-
"unicorn/require-number-to-fixed-digits-argument": "error",
|
|
128
|
-
"unicorn/require-post-message-target-origin": "error",
|
|
129
|
-
"unicorn/string-content": "off",
|
|
130
|
-
"unicorn/template-indent": "warn",
|
|
131
|
-
"unicorn/throw-new-error": "error"
|
|
132
|
-
},
|
|
133
|
-
"overrides": [
|
|
134
|
-
{
|
|
135
|
-
"files": [
|
|
136
|
-
"*.ts",
|
|
137
|
-
"*.tsx"
|
|
138
|
-
],
|
|
139
|
-
"rules": {
|
|
140
|
-
"unicorn/require-post-message-target-origin": "off"
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
]
|
|
38
|
+
"unicorn/…": "error"
|
|
39
|
+
}
|
|
144
40
|
}
|
|
145
41
|
}
|
|
146
42
|
```
|
|
147
|
-
<!-- USAGE_EXAMPLE_END -->
|
|
148
43
|
|
|
149
44
|
## Rules
|
|
150
45
|
|
|
151
46
|
Each rule has emojis denoting:
|
|
152
47
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
<!-- Do not manually modify this table. Run: `npm run generate-rules-table` -->
|
|
158
|
-
<!-- RULES_TABLE_START -->
|
|
48
|
+
- ✅ if it belongs to the `recommended` configuration
|
|
49
|
+
- 🔧 if some problems reported by the rule are automatically fixable by the `--fix` [command line](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems) option
|
|
50
|
+
- 💡 if some problems reported by the rule are manually fixable by editor [suggestions](https://eslint.org/docs/developer-guide/working-with-rules#providing-suggestions)
|
|
159
51
|
|
|
52
|
+
<!-- Do not manually modify RULES_TABLE part. Run: `npm run generate-rules-table` -->
|
|
53
|
+
<!-- RULES_TABLE -->
|
|
160
54
|
| Name | Description | ✅ | 🔧 | 💡 |
|
|
161
55
|
| :-- | :-- | :-- | :-- | :-- |
|
|
162
56
|
| [better-regex](docs/rules/better-regex.md) | Improve regexes by making them shorter, consistent, and safer. | ✅ | 🔧 | |
|
|
@@ -179,6 +73,7 @@ Each rule has emojis denoting:
|
|
|
179
73
|
| [no-array-method-this-argument](docs/rules/no-array-method-this-argument.md) | Disallow using the `this` argument in array methods. | ✅ | 🔧 | 💡 |
|
|
180
74
|
| [no-array-push-push](docs/rules/no-array-push-push.md) | Enforce combining multiple `Array#push()` into one call. | ✅ | 🔧 | 💡 |
|
|
181
75
|
| [no-array-reduce](docs/rules/no-array-reduce.md) | Disallow `Array#reduce()` and `Array#reduceRight()`. | ✅ | | |
|
|
76
|
+
| [no-await-expression-member](docs/rules/no-await-expression-member.md) | Forbid member access from await expression. | ✅ | 🔧 | |
|
|
182
77
|
| [no-console-spaces](docs/rules/no-console-spaces.md) | Do not use leading/trailing space between `console.log` parameters. | ✅ | 🔧 | |
|
|
183
78
|
| [no-document-cookie](docs/rules/no-document-cookie.md) | Do not use `document.cookie` directly. | ✅ | | |
|
|
184
79
|
| [no-empty-file](docs/rules/no-empty-file.md) | Disallow empty files. | ✅ | | |
|
|
@@ -195,12 +90,14 @@ Each rule has emojis denoting:
|
|
|
195
90
|
| [no-object-as-default-parameter](docs/rules/no-object-as-default-parameter.md) | Disallow the use of objects as default parameters. | ✅ | | |
|
|
196
91
|
| [no-process-exit](docs/rules/no-process-exit.md) | Disallow `process.exit()`. | ✅ | | |
|
|
197
92
|
| [no-static-only-class](docs/rules/no-static-only-class.md) | Forbid classes that only have static members. | ✅ | 🔧 | |
|
|
93
|
+
| [no-thenable](docs/rules/no-thenable.md) | Disallow `then` property. | ✅ | | |
|
|
198
94
|
| [no-this-assignment](docs/rules/no-this-assignment.md) | Disallow assigning `this` to a variable. | ✅ | | |
|
|
199
95
|
| [no-unreadable-array-destructuring](docs/rules/no-unreadable-array-destructuring.md) | Disallow unreadable array destructuring. | ✅ | 🔧 | |
|
|
200
96
|
| [no-unsafe-regex](docs/rules/no-unsafe-regex.md) | Disallow unsafe regular expressions. | | | |
|
|
201
97
|
| [no-unused-properties](docs/rules/no-unused-properties.md) | Disallow unused object properties. | | | |
|
|
202
98
|
| [no-useless-fallback-in-spread](docs/rules/no-useless-fallback-in-spread.md) | Forbid useless fallback when spreading in object literals. | ✅ | 🔧 | |
|
|
203
99
|
| [no-useless-length-check](docs/rules/no-useless-length-check.md) | Disallow useless array length check. | ✅ | 🔧 | |
|
|
100
|
+
| [no-useless-promise-resolve-reject](docs/rules/no-useless-promise-resolve-reject.md) | Disallow returning/yielding `Promise.resolve/reject()` in async functions or promise callbacks | ✅ | 🔧 | |
|
|
204
101
|
| [no-useless-spread](docs/rules/no-useless-spread.md) | Disallow unnecessary spread. | ✅ | 🔧 | |
|
|
205
102
|
| [no-useless-undefined](docs/rules/no-useless-undefined.md) | Disallow useless `undefined`. | ✅ | 🔧 | |
|
|
206
103
|
| [no-zero-fractions](docs/rules/no-zero-fractions.md) | Disallow number literals with zero fractions or dangling dots. | ✅ | 🔧 | |
|
|
@@ -213,14 +110,16 @@ Each rule has emojis denoting:
|
|
|
213
110
|
| [prefer-array-index-of](docs/rules/prefer-array-index-of.md) | Prefer `Array#indexOf()` over `Array#findIndex()` when looking for the index of an item. | ✅ | 🔧 | 💡 |
|
|
214
111
|
| [prefer-array-some](docs/rules/prefer-array-some.md) | Prefer `.some(…)` over `.filter(…).length` check and `.find(…)`. | ✅ | 🔧 | 💡 |
|
|
215
112
|
| [prefer-at](docs/rules/prefer-at.md) | Prefer `.at()` method for index access and `String#charAt()`. | | 🔧 | 💡 |
|
|
113
|
+
| [prefer-code-point](docs/rules/prefer-code-point.md) | Prefer `String#codePointAt(…)` over `String#charCodeAt(…)` and `String.fromCodePoint(…)` over `String.fromCharCode(…)`. | ✅ | | 💡 |
|
|
216
114
|
| [prefer-date-now](docs/rules/prefer-date-now.md) | Prefer `Date.now()` to get the number of milliseconds since the Unix Epoch. | ✅ | 🔧 | |
|
|
217
115
|
| [prefer-default-parameters](docs/rules/prefer-default-parameters.md) | Prefer default parameters over reassignment. | ✅ | 🔧 | 💡 |
|
|
218
116
|
| [prefer-dom-node-append](docs/rules/prefer-dom-node-append.md) | Prefer `Node#append()` over `Node#appendChild()`. | ✅ | 🔧 | |
|
|
219
|
-
| [prefer-dom-node-dataset](docs/rules/prefer-dom-node-dataset.md) | Prefer using `.dataset` on DOM elements over
|
|
117
|
+
| [prefer-dom-node-dataset](docs/rules/prefer-dom-node-dataset.md) | Prefer using `.dataset` on DOM elements over calling attribute methods. | ✅ | 🔧 | |
|
|
220
118
|
| [prefer-dom-node-remove](docs/rules/prefer-dom-node-remove.md) | Prefer `childNode.remove()` over `parentNode.removeChild(childNode)`. | ✅ | 🔧 | 💡 |
|
|
221
119
|
| [prefer-dom-node-text-content](docs/rules/prefer-dom-node-text-content.md) | Prefer `.textContent` over `.innerText`. | ✅ | | 💡 |
|
|
222
|
-
| [prefer-export-from](docs/rules/prefer-export-from.md) | Prefer `export…from` when re-exporting. | ✅ | 🔧 |
|
|
120
|
+
| [prefer-export-from](docs/rules/prefer-export-from.md) | Prefer `export…from` when re-exporting. | ✅ | 🔧 | 💡 |
|
|
223
121
|
| [prefer-includes](docs/rules/prefer-includes.md) | Prefer `.includes()` over `.indexOf()` and `Array#some()` when checking for existence or non-existence. | ✅ | 🔧 | 💡 |
|
|
122
|
+
| [prefer-json-parse-buffer](docs/rules/prefer-json-parse-buffer.md) | Prefer reading a JSON file as a buffer. | ✅ | 🔧 | |
|
|
224
123
|
| [prefer-keyboard-event-key](docs/rules/prefer-keyboard-event-key.md) | Prefer `KeyboardEvent#key` over `KeyboardEvent#keyCode`. | ✅ | 🔧 | |
|
|
225
124
|
| [prefer-math-trunc](docs/rules/prefer-math-trunc.md) | Enforce the use of `Math.trunc` instead of bitwise operators. | ✅ | 🔧 | 💡 |
|
|
226
125
|
| [prefer-modern-dom-apis](docs/rules/prefer-modern-dom-apis.md) | Prefer `.before()` over `.insertBefore()`, `.replaceWith()` over `.replaceChild()`, prefer one of `.before()`, `.after()`, `.append()` or `.prepend()` over `insertAdjacentText()` and `insertAdjacentElement()`. | ✅ | 🔧 | |
|
|
@@ -229,7 +128,6 @@ Each rule has emojis denoting:
|
|
|
229
128
|
| [prefer-node-protocol](docs/rules/prefer-node-protocol.md) | Prefer using the `node:` protocol when importing Node.js builtin modules. | ✅ | 🔧 | |
|
|
230
129
|
| [prefer-number-properties](docs/rules/prefer-number-properties.md) | Prefer `Number` static properties over global ones. | ✅ | 🔧 | 💡 |
|
|
231
130
|
| [prefer-object-from-entries](docs/rules/prefer-object-from-entries.md) | Prefer using `Object.fromEntries(…)` to transform a list of key-value pairs into an object. | ✅ | 🔧 | |
|
|
232
|
-
| [prefer-object-has-own](docs/rules/prefer-object-has-own.md) | Prefer `Object.hasOwn(…)` over `Object.prototype.hasOwnProperty.call(…)`. | | 🔧 | |
|
|
233
131
|
| [prefer-optional-catch-binding](docs/rules/prefer-optional-catch-binding.md) | Prefer omitting the `catch` binding parameter. | ✅ | 🔧 | |
|
|
234
132
|
| [prefer-prototype-methods](docs/rules/prefer-prototype-methods.md) | Prefer borrowing methods from the prototype instead of the instance. | ✅ | 🔧 | |
|
|
235
133
|
| [prefer-query-selector](docs/rules/prefer-query-selector.md) | Prefer `.querySelector()` over `.getElementById()`, `.querySelectorAll()` over `.getElementsByClassName()` and `.getElementsByTagName()`. | ✅ | 🔧 | |
|
|
@@ -246,24 +144,29 @@ Each rule has emojis denoting:
|
|
|
246
144
|
| [prefer-top-level-await](docs/rules/prefer-top-level-await.md) | Prefer top-level await over top-level promises and async function calls. | | | 💡 |
|
|
247
145
|
| [prefer-type-error](docs/rules/prefer-type-error.md) | Enforce throwing `TypeError` in type checking conditions. | ✅ | 🔧 | |
|
|
248
146
|
| [prevent-abbreviations](docs/rules/prevent-abbreviations.md) | Prevent abbreviations. | ✅ | 🔧 | |
|
|
147
|
+
| [relative-url-style](docs/rules/relative-url-style.md) | Enforce consistent relative URL style. | ✅ | 🔧 | |
|
|
249
148
|
| [require-array-join-separator](docs/rules/require-array-join-separator.md) | Enforce using the separator argument with `Array#join()`. | ✅ | 🔧 | |
|
|
250
149
|
| [require-number-to-fixed-digits-argument](docs/rules/require-number-to-fixed-digits-argument.md) | Enforce using the digits argument with `Number#toFixed()`. | ✅ | 🔧 | |
|
|
251
|
-
| [require-post-message-target-origin](docs/rules/require-post-message-target-origin.md) | Enforce using the `targetOrigin` argument with `window.postMessage()`. |
|
|
150
|
+
| [require-post-message-target-origin](docs/rules/require-post-message-target-origin.md) | Enforce using the `targetOrigin` argument with `window.postMessage()`. | | | 💡 |
|
|
252
151
|
| [string-content](docs/rules/string-content.md) | Enforce better string content. | | 🔧 | 💡 |
|
|
253
|
-
| [template-indent](docs/rules/template-indent.md) | Fix whitespace-insensitive template indentation. |
|
|
152
|
+
| [template-indent](docs/rules/template-indent.md) | Fix whitespace-insensitive template indentation. | ✅ | 🔧 | |
|
|
153
|
+
| [text-encoding-identifier-case](docs/rules/text-encoding-identifier-case.md) | Enforce consistent case for text encoding identifiers. | ✅ | | 💡 |
|
|
254
154
|
| [throw-new-error](docs/rules/throw-new-error.md) | Require `new` when throwing an error. | ✅ | 🔧 | |
|
|
155
|
+
<!-- /RULES_TABLE -->
|
|
255
156
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
## Deprecated Rules
|
|
157
|
+
### Deprecated Rules
|
|
259
158
|
|
|
260
159
|
See [docs/deprecated-rules.md](docs/deprecated-rules.md)
|
|
261
160
|
|
|
262
|
-
##
|
|
161
|
+
## Preset configs
|
|
263
162
|
|
|
264
|
-
|
|
163
|
+
See the [ESLint docs](https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files) for more information about extending config files.
|
|
265
164
|
|
|
266
|
-
|
|
165
|
+
**Note**: Preset configs will also enable the correct [parser options](https://eslint.org/docs/user-guide/configuring/language-options#specifying-parser-options) and [environment](https://eslint.org/docs/user-guide/configuring/language-options#specifying-environments).
|
|
166
|
+
|
|
167
|
+
### Recommended config
|
|
168
|
+
|
|
169
|
+
This plugin exports a [`recommended` config](configs/recommended.js) that enforces good practices.
|
|
267
170
|
|
|
268
171
|
```json
|
|
269
172
|
{
|
|
@@ -274,16 +177,10 @@ Enable it in your `package.json` with the `extends` option:
|
|
|
274
177
|
}
|
|
275
178
|
```
|
|
276
179
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
**Note**: This config will also enable the correct [parser options](https://eslint.org/docs/user-guide/configuring/language-options#specifying-parser-options) and [environment](https://eslint.org/docs/user-guide/configuring/language-options#specifying-environments).
|
|
280
|
-
|
|
281
|
-
## All config
|
|
180
|
+
### All config
|
|
282
181
|
|
|
283
182
|
This plugin exports an [`all` config](configs/all.js) that makes use of all rules (except for deprecated ones).
|
|
284
183
|
|
|
285
|
-
Enable it in your `package.json` with the `extends` option:
|
|
286
|
-
|
|
287
184
|
```json
|
|
288
185
|
{
|
|
289
186
|
"name": "my-awesome-project",
|
|
@@ -293,16 +190,15 @@ Enable it in your `package.json` with the `extends` option:
|
|
|
293
190
|
}
|
|
294
191
|
```
|
|
295
192
|
|
|
296
|
-
See the [ESLint docs](https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files) for more information about extending config files.
|
|
297
|
-
|
|
298
193
|
## Maintainers
|
|
299
194
|
|
|
300
195
|
- [Sindre Sorhus](https://github.com/sindresorhus)
|
|
301
|
-
- [Adam Babcock](https://github.com/MrHen)
|
|
302
|
-
- [futpib](https://github.com/futpib)
|
|
303
196
|
- [Fisker Cheung](https://github.com/fisker)
|
|
197
|
+
- [Bryan Mishkin](https://github.com/bmish)
|
|
198
|
+
- [futpib](https://github.com/futpib)
|
|
304
199
|
|
|
305
|
-
|
|
200
|
+
### Former
|
|
306
201
|
|
|
307
202
|
- [Jeroen Engels](https://github.com/jfmengels)
|
|
308
203
|
- [Sam Verschueren](https://github.com/SamVerschueren)
|
|
204
|
+
- [Adam Babcock](https://github.com/MrHen)
|
package/rules/better-regex.js
CHANGED
|
@@ -14,6 +14,7 @@ const newRegExp = [
|
|
|
14
14
|
'[arguments.0.type="Literal"]',
|
|
15
15
|
].join('');
|
|
16
16
|
|
|
17
|
+
/** @param {import('eslint').Rule.RuleContext} context */
|
|
17
18
|
const create = context => {
|
|
18
19
|
const {sortCharacterClasses} = context.options[0] || {};
|
|
19
20
|
|
|
@@ -101,6 +102,7 @@ const create = context => {
|
|
|
101
102
|
const schema = [
|
|
102
103
|
{
|
|
103
104
|
type: 'object',
|
|
105
|
+
additionalProperties: false,
|
|
104
106
|
properties: {
|
|
105
107
|
sortCharacterClasses: {
|
|
106
108
|
type: 'boolean',
|
|
@@ -110,6 +112,7 @@ const schema = [
|
|
|
110
112
|
},
|
|
111
113
|
];
|
|
112
114
|
|
|
115
|
+
/** @type {import('eslint').Rule.RuleModule} */
|
|
113
116
|
module.exports = {
|
|
114
117
|
create,
|
|
115
118
|
meta: {
|
|
@@ -32,6 +32,7 @@ const selector = matches([
|
|
|
32
32
|
].join(''),
|
|
33
33
|
]);
|
|
34
34
|
|
|
35
|
+
/** @param {import('eslint').Rule.RuleContext} context */
|
|
35
36
|
const create = context => {
|
|
36
37
|
const options = {
|
|
37
38
|
name: 'error',
|
|
@@ -64,7 +65,7 @@ const create = context => {
|
|
|
64
65
|
|
|
65
66
|
// This was reported https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1075#issuecomment-768072967
|
|
66
67
|
// But can't reproduce, just ignore this case
|
|
67
|
-
/*
|
|
68
|
+
/* c8 ignore next 3 */
|
|
68
69
|
if (!variable) {
|
|
69
70
|
return;
|
|
70
71
|
}
|
|
@@ -100,6 +101,7 @@ const create = context => {
|
|
|
100
101
|
const schema = [
|
|
101
102
|
{
|
|
102
103
|
type: 'object',
|
|
104
|
+
additionalProperties: false,
|
|
103
105
|
properties: {
|
|
104
106
|
name: {
|
|
105
107
|
type: 'string',
|
|
@@ -112,6 +114,7 @@ const schema = [
|
|
|
112
114
|
},
|
|
113
115
|
];
|
|
114
116
|
|
|
117
|
+
/** @type {import('eslint').Rule.RuleModule} */
|
|
115
118
|
module.exports = {
|
|
116
119
|
create,
|
|
117
120
|
meta: {
|