eslint-plugin-unicorn 33.0.1 → 36.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 +17 -0
- package/configs/base.js +13 -0
- package/configs/conflicting-rules.js +6 -0
- package/configs/recommended.js +110 -0
- package/index.js +10 -105
- package/package.json +40 -48
- package/readme.md +54 -8
- package/rules/better-regex.js +32 -33
- package/rules/catch-error-name.js +79 -92
- package/rules/consistent-destructuring.js +30 -38
- package/rules/consistent-function-scoping.js +38 -40
- package/rules/custom-error-definition.js +39 -44
- package/rules/empty-brace-spaces.js +30 -49
- package/rules/error-message.js +61 -57
- package/rules/escape-case.js +38 -44
- package/rules/expiring-todo-comments.js +63 -60
- package/rules/explicit-length-check.js +55 -59
- package/rules/filename-case.js +48 -39
- package/rules/fix/append-argument.js +1 -1
- package/rules/{utils → fix}/extend-fix-range.js +0 -0
- package/rules/fix/fix-space-around-keywords.js +35 -0
- package/rules/fix/index.js +15 -2
- package/rules/fix/remove-argument.js +31 -0
- package/rules/fix/remove-member-expression-property.js +11 -0
- package/rules/fix/remove-method-call.js +20 -0
- package/rules/{utils → fix}/remove-spaces-after.js +0 -0
- package/rules/{utils → fix}/rename-variable.js +3 -2
- package/rules/{utils → fix}/replace-node-or-token-and-spaces-before.js +4 -4
- package/rules/{utils → fix}/replace-reference-identifier.js +7 -7
- package/rules/{utils → fix}/replace-string-raw.js +5 -3
- package/rules/{utils → fix}/replace-template-element.js +4 -2
- package/rules/fix/switch-call-expression-to-new-expression.js +18 -0
- package/rules/fix/switch-new-expression-to-call-expression.js +5 -5
- package/rules/import-index.js +12 -14
- package/rules/import-style.js +55 -60
- package/rules/new-for-builtins.js +21 -21
- package/rules/no-abusive-eslint-disable.js +13 -16
- package/rules/no-array-callback-reference.js +47 -38
- package/rules/no-array-for-each.js +44 -44
- package/rules/no-array-method-this-argument.js +168 -0
- package/rules/no-array-push-push.js +27 -28
- package/rules/no-array-reduce.js +67 -36
- package/rules/no-console-spaces.js +22 -25
- package/rules/no-document-cookie.js +16 -21
- package/rules/no-for-loop.js +59 -70
- package/rules/no-hex-escape.js +16 -23
- package/rules/no-instanceof-array.js +32 -30
- package/rules/no-invalid-remove-event-listener.js +54 -0
- package/rules/no-keyword-prefix.js +40 -45
- package/rules/no-lonely-if.js +25 -28
- package/rules/no-nested-ternary.js +10 -14
- package/rules/no-new-array.js +23 -22
- package/rules/no-new-buffer.js +22 -28
- package/rules/no-null.js +46 -70
- package/rules/no-object-as-default-parameter.js +24 -19
- package/rules/no-process-exit.js +15 -18
- package/rules/no-static-only-class.js +43 -47
- package/rules/no-this-assignment.js +11 -14
- package/rules/no-unreadable-array-destructuring.js +16 -16
- package/rules/no-unsafe-regex.js +44 -45
- package/rules/no-unused-properties.js +42 -62
- package/rules/no-useless-fallback-in-spread.js +76 -0
- package/rules/no-useless-length-check.js +148 -0
- package/rules/no-useless-spread.js +224 -0
- package/rules/no-useless-undefined.js +39 -33
- package/rules/no-zero-fractions.js +50 -52
- package/rules/number-literal-case.js +23 -27
- package/rules/numeric-separators-style.js +26 -28
- package/rules/prefer-add-event-listener.js +23 -27
- package/rules/prefer-array-find.js +78 -72
- package/rules/prefer-array-flat-map.js +39 -109
- package/rules/prefer-array-flat.js +63 -60
- package/rules/prefer-array-index-of.js +6 -11
- package/rules/prefer-array-some.js +125 -35
- package/rules/prefer-at.js +313 -0
- package/rules/prefer-date-now.js +57 -53
- package/rules/prefer-default-parameters.js +32 -35
- package/rules/prefer-dom-node-append.js +20 -25
- package/rules/prefer-dom-node-dataset.js +28 -33
- package/rules/prefer-dom-node-remove.js +19 -22
- package/rules/prefer-dom-node-text-content.js +48 -21
- package/rules/prefer-includes.js +18 -21
- package/rules/prefer-keyboard-event-key.js +76 -87
- package/rules/prefer-math-trunc.js +28 -26
- package/rules/prefer-modern-dom-apis.js +38 -43
- package/rules/prefer-module.js +90 -78
- package/rules/prefer-negative-index.js +38 -50
- package/rules/prefer-node-protocol.js +17 -19
- package/rules/prefer-number-properties.js +30 -28
- package/rules/prefer-object-from-entries.js +274 -0
- package/rules/prefer-object-has-own.js +36 -27
- package/rules/prefer-optional-catch-binding.js +42 -47
- package/rules/prefer-prototype-methods.js +51 -141
- package/rules/prefer-query-selector.js +32 -37
- package/rules/prefer-reflect-apply.js +38 -43
- package/rules/prefer-regexp-test.js +57 -65
- package/rules/prefer-set-has.js +83 -88
- package/rules/prefer-spread.js +142 -87
- package/rules/prefer-string-replace-all.js +24 -30
- package/rules/prefer-string-slice.js +22 -38
- package/rules/prefer-string-starts-ends-with.js +28 -31
- package/rules/prefer-string-trim-start-end.js +19 -24
- package/rules/prefer-switch.js +26 -28
- package/rules/prefer-ternary.js +59 -65
- package/rules/prefer-top-level-await.js +101 -0
- package/rules/prefer-type-error.js +36 -41
- package/rules/prevent-abbreviations.js +155 -149
- package/rules/require-array-join-separator.js +14 -19
- package/rules/require-number-to-fixed-digits-argument.js +13 -16
- package/rules/require-post-message-target-origin.js +69 -0
- package/rules/selectors/call-or-new-expression-selector.js +48 -20
- package/rules/selectors/empty-array-selector.js +2 -2
- package/rules/selectors/empty-object-selector.js +2 -2
- package/rules/selectors/index.js +17 -15
- package/rules/selectors/member-expression-selector.js +30 -15
- package/rules/selectors/method-call-selector.js +22 -17
- package/rules/selectors/not-dom-node.js +5 -5
- package/rules/selectors/not-function.js +18 -8
- package/rules/selectors/not-left-hand-side.js +15 -0
- package/rules/selectors/prototype-method-selector.js +26 -14
- package/rules/selectors/reference-identifier-selector.js +4 -4
- package/rules/selectors/require-selector.js +4 -4
- package/rules/shared/abbreviations.js +82 -69
- package/rules/shared/dom-events.js +275 -0
- package/rules/shared/event-keys.js +1 -1
- package/rules/shared/negative-index.js +12 -12
- package/rules/shared/simple-array-search-rule.js +20 -20
- package/rules/shared/typed-array.js +16 -0
- package/rules/string-content.js +38 -40
- package/rules/throw-new-error.js +14 -18
- package/rules/utils/assert-token.js +3 -3
- package/rules/utils/avoid-capture.js +100 -59
- package/rules/utils/boolean.js +42 -25
- package/rules/utils/builtins.js +8 -13
- package/rules/utils/cartesian-product-samples.js +2 -11
- package/rules/utils/create-deprecated-rules.js +7 -6
- package/rules/utils/escape-template-element-raw.js +1 -1
- package/rules/utils/get-call-expression-arguments-text.js +1 -1
- package/rules/utils/get-documentation-url.js +1 -1
- package/rules/utils/get-references.js +4 -4
- package/rules/utils/{get-child-scopes-recursive.js → get-scopes.js} +3 -3
- package/rules/utils/get-variable-identifiers.js +1 -1
- package/rules/utils/has-same-range.js +4 -4
- package/rules/utils/is-left-hand-side.js +13 -0
- package/rules/utils/is-logical-expression.js +3 -3
- package/rules/utils/is-method-named.js +5 -8
- package/rules/utils/is-new-expression-with-parentheses.js +3 -3
- package/rules/utils/is-node-matches.js +8 -8
- package/rules/utils/is-object-method.js +5 -5
- package/rules/utils/is-same-reference.js +7 -7
- package/rules/utils/is-shadowed.js +3 -3
- package/rules/utils/is-shorthand-export-local.js +1 -1
- package/rules/utils/is-shorthand-import-local.js +1 -1
- package/rules/utils/is-shorthand-property-assignment-pattern-left.js +5 -4
- package/rules/utils/is-shorthand-property-value.js +3 -3
- package/rules/utils/is-static-require.js +9 -9
- package/rules/utils/needs-semicolon.js +4 -4
- package/rules/utils/numeric.js +2 -2
- package/rules/utils/parentheses.js +2 -2
- package/rules/utils/rule.js +110 -0
- package/rules/utils/should-add-parentheses-to-conditional-expression-child.js +4 -4
- package/rules/utils/should-add-parentheses-to-logical-expression-child.js +7 -7
- package/rules/utils/should-add-parentheses-to-member-expression-object.js +3 -2
- package/rules/utils/should-add-parentheses-to-new-expression-callee.js +32 -0
- package/rules/utils/should-add-parentheses-to-spread-element-argument.js +1 -1
- package/rules/utils/to-location.js +1 -1
- package/rules/utils/dom-events.json +0 -98
package/configs/all.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const conflictingRules = require('./conflicting-rules.js');
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
...require('./base.js'),
|
|
6
|
+
rules: {
|
|
7
|
+
...Object.fromEntries(
|
|
8
|
+
Object.entries(require('./recommended.js').rules)
|
|
9
|
+
.filter(
|
|
10
|
+
ruleEntry =>
|
|
11
|
+
!Object.keys(conflictingRules.rules).includes(ruleEntry[0]),
|
|
12
|
+
)
|
|
13
|
+
.map(ruleEntry => [ruleEntry[0], 'error']),
|
|
14
|
+
),
|
|
15
|
+
...conflictingRules.rules,
|
|
16
|
+
},
|
|
17
|
+
};
|
package/configs/base.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
module.exports = {
|
|
3
|
+
...require('./base.js'),
|
|
4
|
+
rules: {
|
|
5
|
+
'unicorn/better-regex': 'error',
|
|
6
|
+
'unicorn/catch-error-name': 'error',
|
|
7
|
+
'unicorn/consistent-destructuring': 'error',
|
|
8
|
+
'unicorn/consistent-function-scoping': 'error',
|
|
9
|
+
'unicorn/custom-error-definition': 'off',
|
|
10
|
+
'unicorn/empty-brace-spaces': 'error',
|
|
11
|
+
'unicorn/error-message': 'error',
|
|
12
|
+
'unicorn/escape-case': 'error',
|
|
13
|
+
'unicorn/expiring-todo-comments': 'error',
|
|
14
|
+
'unicorn/explicit-length-check': 'error',
|
|
15
|
+
'unicorn/filename-case': 'error',
|
|
16
|
+
'unicorn/import-index': 'off',
|
|
17
|
+
'unicorn/import-style': 'error',
|
|
18
|
+
'unicorn/new-for-builtins': 'error',
|
|
19
|
+
'unicorn/no-abusive-eslint-disable': 'error',
|
|
20
|
+
'unicorn/no-array-callback-reference': 'error',
|
|
21
|
+
'unicorn/no-array-for-each': 'error',
|
|
22
|
+
'unicorn/no-array-method-this-argument': 'error',
|
|
23
|
+
'unicorn/no-array-push-push': 'error',
|
|
24
|
+
'unicorn/no-array-reduce': 'error',
|
|
25
|
+
'unicorn/no-console-spaces': 'error',
|
|
26
|
+
'unicorn/no-document-cookie': 'error',
|
|
27
|
+
'unicorn/no-for-loop': 'error',
|
|
28
|
+
'unicorn/no-hex-escape': 'error',
|
|
29
|
+
'unicorn/no-instanceof-array': 'error',
|
|
30
|
+
'unicorn/no-invalid-remove-event-listener': 'error',
|
|
31
|
+
'unicorn/no-keyword-prefix': 'off',
|
|
32
|
+
'unicorn/no-lonely-if': 'error',
|
|
33
|
+
'no-nested-ternary': 'off',
|
|
34
|
+
'unicorn/no-nested-ternary': 'error',
|
|
35
|
+
'unicorn/no-new-array': 'error',
|
|
36
|
+
'unicorn/no-new-buffer': 'error',
|
|
37
|
+
'unicorn/no-null': 'error',
|
|
38
|
+
'unicorn/no-object-as-default-parameter': 'error',
|
|
39
|
+
'unicorn/no-process-exit': 'error',
|
|
40
|
+
'unicorn/no-static-only-class': 'error',
|
|
41
|
+
'unicorn/no-this-assignment': 'error',
|
|
42
|
+
'unicorn/no-unreadable-array-destructuring': 'error',
|
|
43
|
+
'unicorn/no-unsafe-regex': 'off',
|
|
44
|
+
'unicorn/no-unused-properties': 'off',
|
|
45
|
+
'unicorn/no-useless-fallback-in-spread': 'error',
|
|
46
|
+
'unicorn/no-useless-length-check': 'error',
|
|
47
|
+
'unicorn/no-useless-spread': 'error',
|
|
48
|
+
'unicorn/no-useless-undefined': 'error',
|
|
49
|
+
'unicorn/no-zero-fractions': 'error',
|
|
50
|
+
'unicorn/number-literal-case': 'error',
|
|
51
|
+
'unicorn/numeric-separators-style': 'error',
|
|
52
|
+
'unicorn/prefer-add-event-listener': 'error',
|
|
53
|
+
'unicorn/prefer-array-find': 'error',
|
|
54
|
+
'unicorn/prefer-array-flat': 'error',
|
|
55
|
+
'unicorn/prefer-array-flat-map': 'error',
|
|
56
|
+
'unicorn/prefer-array-index-of': 'error',
|
|
57
|
+
'unicorn/prefer-array-some': 'error',
|
|
58
|
+
// TODO: Enable this by default when targeting a Node.js version that supports `Array#at`.
|
|
59
|
+
'unicorn/prefer-at': 'off',
|
|
60
|
+
'unicorn/prefer-date-now': 'error',
|
|
61
|
+
'unicorn/prefer-default-parameters': 'error',
|
|
62
|
+
'unicorn/prefer-dom-node-append': 'error',
|
|
63
|
+
'unicorn/prefer-dom-node-dataset': 'error',
|
|
64
|
+
'unicorn/prefer-dom-node-remove': 'error',
|
|
65
|
+
'unicorn/prefer-dom-node-text-content': 'error',
|
|
66
|
+
'unicorn/prefer-includes': 'error',
|
|
67
|
+
'unicorn/prefer-keyboard-event-key': 'error',
|
|
68
|
+
'unicorn/prefer-math-trunc': 'error',
|
|
69
|
+
'unicorn/prefer-modern-dom-apis': 'error',
|
|
70
|
+
'unicorn/prefer-module': 'error',
|
|
71
|
+
'unicorn/prefer-negative-index': 'error',
|
|
72
|
+
'unicorn/prefer-node-protocol': 'error',
|
|
73
|
+
'unicorn/prefer-number-properties': 'error',
|
|
74
|
+
'unicorn/prefer-object-from-entries': 'error',
|
|
75
|
+
// TODO: Enable this by default when targeting a Node.js version that supports `Object.hasOwn`.
|
|
76
|
+
'unicorn/prefer-object-has-own': 'off',
|
|
77
|
+
'unicorn/prefer-optional-catch-binding': 'error',
|
|
78
|
+
'unicorn/prefer-prototype-methods': 'error',
|
|
79
|
+
'unicorn/prefer-query-selector': 'error',
|
|
80
|
+
'unicorn/prefer-reflect-apply': 'error',
|
|
81
|
+
'unicorn/prefer-regexp-test': 'error',
|
|
82
|
+
'unicorn/prefer-set-has': 'error',
|
|
83
|
+
'unicorn/prefer-spread': 'error',
|
|
84
|
+
// TODO: Enable this by default when targeting Node.js 16.
|
|
85
|
+
'unicorn/prefer-string-replace-all': 'off',
|
|
86
|
+
'unicorn/prefer-string-slice': 'error',
|
|
87
|
+
'unicorn/prefer-string-starts-ends-with': 'error',
|
|
88
|
+
'unicorn/prefer-string-trim-start-end': 'error',
|
|
89
|
+
'unicorn/prefer-switch': 'error',
|
|
90
|
+
'unicorn/prefer-ternary': 'error',
|
|
91
|
+
// TODO: Enable this by default when targeting Node.js 14.
|
|
92
|
+
'unicorn/prefer-top-level-await': 'off',
|
|
93
|
+
'unicorn/prefer-type-error': 'error',
|
|
94
|
+
'unicorn/prevent-abbreviations': 'error',
|
|
95
|
+
'unicorn/require-array-join-separator': 'error',
|
|
96
|
+
'unicorn/require-number-to-fixed-digits-argument': 'error',
|
|
97
|
+
'unicorn/require-post-message-target-origin': 'error',
|
|
98
|
+
'unicorn/string-content': 'off',
|
|
99
|
+
'unicorn/throw-new-error': 'error',
|
|
100
|
+
...require('./conflicting-rules.js').rules,
|
|
101
|
+
},
|
|
102
|
+
overrides: [
|
|
103
|
+
{
|
|
104
|
+
files: ['*.ts', '*.tsx'],
|
|
105
|
+
rules: {
|
|
106
|
+
'unicorn/require-post-message-target-origin': 'off',
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
package/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
2
|
+
const createDeprecatedRules = require('./rules/utils/create-deprecated-rules.js');
|
|
3
|
+
const {loadRules} = require('./rules/utils/rule.js');
|
|
4
|
+
const recommendedConfig = require('./configs/recommended.js');
|
|
5
|
+
const all = require('./configs/all.js');
|
|
5
6
|
|
|
6
7
|
const deprecatedRules = createDeprecatedRules({
|
|
7
8
|
// {ruleId: ReplacementRuleId | ReplacementRuleId[]}, if no replacement, use `{ruleId: []}`
|
|
@@ -18,112 +19,16 @@ const deprecatedRules = createDeprecatedRules({
|
|
|
18
19
|
'prefer-starts-ends-with': 'unicorn/prefer-string-starts-ends-with',
|
|
19
20
|
'prefer-text-content': 'unicorn/prefer-dom-node-text-content',
|
|
20
21
|
'prefer-trim-start-end': 'unicorn/prefer-string-trim-start-end',
|
|
21
|
-
'regex-shorthand': 'unicorn/better-regex'
|
|
22
|
+
'regex-shorthand': 'unicorn/better-regex',
|
|
22
23
|
});
|
|
23
24
|
|
|
24
25
|
module.exports = {
|
|
25
26
|
rules: {
|
|
26
|
-
...
|
|
27
|
-
...deprecatedRules
|
|
27
|
+
...loadRules(),
|
|
28
|
+
...deprecatedRules,
|
|
28
29
|
},
|
|
29
30
|
configs: {
|
|
30
|
-
recommended:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
parserOptions: {
|
|
35
|
-
ecmaVersion: 2021,
|
|
36
|
-
sourceType: 'module'
|
|
37
|
-
},
|
|
38
|
-
plugins: [
|
|
39
|
-
'unicorn'
|
|
40
|
-
],
|
|
41
|
-
rules: {
|
|
42
|
-
'unicorn/better-regex': 'error',
|
|
43
|
-
'unicorn/catch-error-name': 'error',
|
|
44
|
-
'unicorn/consistent-destructuring': 'error',
|
|
45
|
-
'unicorn/consistent-function-scoping': 'error',
|
|
46
|
-
'unicorn/custom-error-definition': 'off',
|
|
47
|
-
'unicorn/empty-brace-spaces': 'error',
|
|
48
|
-
'unicorn/error-message': 'error',
|
|
49
|
-
'unicorn/escape-case': 'error',
|
|
50
|
-
'unicorn/expiring-todo-comments': 'error',
|
|
51
|
-
'unicorn/explicit-length-check': 'error',
|
|
52
|
-
'unicorn/filename-case': 'error',
|
|
53
|
-
'unicorn/import-index': 'off',
|
|
54
|
-
'unicorn/import-style': 'error',
|
|
55
|
-
'unicorn/new-for-builtins': 'error',
|
|
56
|
-
'unicorn/no-abusive-eslint-disable': 'error',
|
|
57
|
-
'unicorn/no-array-callback-reference': 'error',
|
|
58
|
-
'unicorn/no-array-for-each': 'error',
|
|
59
|
-
'unicorn/no-array-push-push': 'error',
|
|
60
|
-
'unicorn/no-array-reduce': 'error',
|
|
61
|
-
'unicorn/no-console-spaces': 'error',
|
|
62
|
-
'unicorn/no-document-cookie': 'error',
|
|
63
|
-
'unicorn/no-for-loop': 'error',
|
|
64
|
-
'unicorn/no-hex-escape': 'error',
|
|
65
|
-
'unicorn/no-instanceof-array': 'error',
|
|
66
|
-
'unicorn/no-keyword-prefix': 'off',
|
|
67
|
-
'unicorn/no-lonely-if': 'error',
|
|
68
|
-
'no-nested-ternary': 'off',
|
|
69
|
-
'unicorn/no-nested-ternary': 'error',
|
|
70
|
-
'unicorn/no-new-array': 'error',
|
|
71
|
-
'unicorn/no-new-buffer': 'error',
|
|
72
|
-
'unicorn/no-null': 'error',
|
|
73
|
-
'unicorn/no-object-as-default-parameter': 'error',
|
|
74
|
-
'unicorn/no-process-exit': 'error',
|
|
75
|
-
'unicorn/no-static-only-class': 'error',
|
|
76
|
-
'unicorn/no-this-assignment': 'error',
|
|
77
|
-
'unicorn/no-unreadable-array-destructuring': 'error',
|
|
78
|
-
'unicorn/no-unsafe-regex': 'off',
|
|
79
|
-
'unicorn/no-unused-properties': 'off',
|
|
80
|
-
'unicorn/no-useless-undefined': 'error',
|
|
81
|
-
'unicorn/no-zero-fractions': 'error',
|
|
82
|
-
'unicorn/number-literal-case': 'error',
|
|
83
|
-
'unicorn/numeric-separators-style': 'error',
|
|
84
|
-
'unicorn/prefer-add-event-listener': 'error',
|
|
85
|
-
'unicorn/prefer-array-find': 'error',
|
|
86
|
-
'unicorn/prefer-array-flat': 'error',
|
|
87
|
-
'unicorn/prefer-array-flat-map': 'error',
|
|
88
|
-
'unicorn/prefer-array-index-of': 'error',
|
|
89
|
-
'unicorn/prefer-array-some': 'error',
|
|
90
|
-
'unicorn/prefer-date-now': 'error',
|
|
91
|
-
'unicorn/prefer-default-parameters': 'error',
|
|
92
|
-
'unicorn/prefer-dom-node-append': 'error',
|
|
93
|
-
'unicorn/prefer-dom-node-dataset': 'error',
|
|
94
|
-
'unicorn/prefer-dom-node-remove': 'error',
|
|
95
|
-
'unicorn/prefer-dom-node-text-content': 'error',
|
|
96
|
-
'unicorn/prefer-includes': 'error',
|
|
97
|
-
'unicorn/prefer-keyboard-event-key': 'error',
|
|
98
|
-
'unicorn/prefer-math-trunc': 'error',
|
|
99
|
-
'unicorn/prefer-modern-dom-apis': 'error',
|
|
100
|
-
'unicorn/prefer-module': 'error',
|
|
101
|
-
'unicorn/prefer-negative-index': 'error',
|
|
102
|
-
'unicorn/prefer-node-protocol': 'error',
|
|
103
|
-
'unicorn/prefer-number-properties': 'error',
|
|
104
|
-
// TODO: Enable this by default when targeting Node.js support `Object.hasOwn`.
|
|
105
|
-
'unicorn/prefer-object-has-own': 'off',
|
|
106
|
-
'unicorn/prefer-optional-catch-binding': 'error',
|
|
107
|
-
'unicorn/prefer-prototype-methods': 'error',
|
|
108
|
-
'unicorn/prefer-query-selector': 'error',
|
|
109
|
-
'unicorn/prefer-reflect-apply': 'error',
|
|
110
|
-
'unicorn/prefer-regexp-test': 'error',
|
|
111
|
-
'unicorn/prefer-set-has': 'error',
|
|
112
|
-
'unicorn/prefer-spread': 'error',
|
|
113
|
-
// TODO: Enable this by default when targeting Node.js 16.
|
|
114
|
-
'unicorn/prefer-string-replace-all': 'off',
|
|
115
|
-
'unicorn/prefer-string-slice': 'error',
|
|
116
|
-
'unicorn/prefer-string-starts-ends-with': 'error',
|
|
117
|
-
'unicorn/prefer-string-trim-start-end': 'error',
|
|
118
|
-
'unicorn/prefer-switch': 'error',
|
|
119
|
-
'unicorn/prefer-ternary': 'error',
|
|
120
|
-
'unicorn/prefer-type-error': 'error',
|
|
121
|
-
'unicorn/prevent-abbreviations': 'error',
|
|
122
|
-
'unicorn/require-array-join-separator': 'error',
|
|
123
|
-
'unicorn/require-number-to-fixed-digits-argument': 'error',
|
|
124
|
-
'unicorn/string-content': 'off',
|
|
125
|
-
'unicorn/throw-new-error': 'error'
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
31
|
+
recommended: recommendedConfig,
|
|
32
|
+
all,
|
|
33
|
+
},
|
|
129
34
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-unicorn",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "36.0.0",
|
|
4
4
|
"description": "Various awesome ESLint rules",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/eslint-plugin-unicorn",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
"index.js",
|
|
27
|
-
"rules"
|
|
27
|
+
"rules",
|
|
28
|
+
"configs"
|
|
28
29
|
],
|
|
29
30
|
"keywords": [
|
|
30
31
|
"eslint",
|
|
@@ -37,46 +38,45 @@
|
|
|
37
38
|
"xo"
|
|
38
39
|
],
|
|
39
40
|
"dependencies": {
|
|
40
|
-
"
|
|
41
|
+
"@babel/helper-validator-identifier": "^7.14.9",
|
|
42
|
+
"ci-info": "^3.2.0",
|
|
41
43
|
"clean-regexp": "^1.0.0",
|
|
42
44
|
"eslint-template-visitor": "^2.3.2",
|
|
43
45
|
"eslint-utils": "^3.0.0",
|
|
44
|
-
"import-modules": "^2.1.0",
|
|
45
46
|
"is-builtin-module": "^3.1.0",
|
|
46
47
|
"lodash": "^4.17.21",
|
|
47
48
|
"pluralize": "^8.0.0",
|
|
48
49
|
"read-pkg-up": "^7.0.1",
|
|
49
50
|
"regexp-tree": "^0.1.23",
|
|
50
|
-
"reserved-words": "^0.1.2",
|
|
51
51
|
"safe-regex": "^2.1.1",
|
|
52
52
|
"semver": "^7.3.5"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@babel/code-frame": "7.
|
|
56
|
-
"@babel/core": "7.
|
|
57
|
-
"@babel/eslint-parser": "7.
|
|
55
|
+
"@babel/code-frame": "^7.14.5",
|
|
56
|
+
"@babel/core": "^7.15.5",
|
|
57
|
+
"@babel/eslint-parser": "^7.15.4",
|
|
58
58
|
"@lubien/fixture-beta-package": "^1.0.0-beta.1",
|
|
59
|
-
"@typescript-eslint/parser": "^4.
|
|
59
|
+
"@typescript-eslint/parser": "^4.31.0",
|
|
60
60
|
"ava": "^3.15.0",
|
|
61
|
-
"chalk": "^4.1.
|
|
61
|
+
"chalk": "^4.1.2",
|
|
62
62
|
"enquirer": "2.3.6",
|
|
63
|
-
"eslint": "^7.
|
|
63
|
+
"eslint": "^7.32.0",
|
|
64
64
|
"eslint-ava-rule-tester": "^4.0.0",
|
|
65
|
-
"eslint-plugin-eslint-plugin": "^3.
|
|
66
|
-
"eslint-remote-tester": "^1.
|
|
67
|
-
"execa": "^5.
|
|
65
|
+
"eslint-plugin-eslint-plugin": "^3.5.3",
|
|
66
|
+
"eslint-remote-tester": "^1.3.0",
|
|
67
|
+
"execa": "^5.1.1",
|
|
68
68
|
"listr": "^0.14.3",
|
|
69
69
|
"lodash-es": "4.17.21",
|
|
70
|
-
"mem": "
|
|
70
|
+
"mem": "^9.0.1",
|
|
71
71
|
"nyc": "^15.1.0",
|
|
72
72
|
"outdent": "^0.8.0",
|
|
73
73
|
"pify": "^5.0.0",
|
|
74
|
-
"typescript": "^4.2
|
|
75
|
-
"vue-eslint-parser": "^7.
|
|
76
|
-
"xo": "^0.
|
|
74
|
+
"typescript": "^4.4.2",
|
|
75
|
+
"vue-eslint-parser": "^7.11.0",
|
|
76
|
+
"xo": "^0.44.0"
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
|
-
"eslint": ">=7.
|
|
79
|
+
"eslint": ">=7.32.0"
|
|
80
80
|
},
|
|
81
81
|
"ava": {
|
|
82
82
|
"files": [
|
|
@@ -91,38 +91,15 @@
|
|
|
91
91
|
]
|
|
92
92
|
},
|
|
93
93
|
"xo": {
|
|
94
|
-
"plugins": [
|
|
95
|
-
"eslint-plugin"
|
|
96
|
-
],
|
|
97
|
-
"extends": [
|
|
98
|
-
"plugin:eslint-plugin/all"
|
|
99
|
-
],
|
|
100
94
|
"ignores": [
|
|
101
|
-
"test/integration/{fixtures,fixtures-local}/**",
|
|
102
95
|
".cache-eslint-remote-tester",
|
|
103
|
-
"eslint-remote-tester-results"
|
|
96
|
+
"eslint-remote-tester-results",
|
|
97
|
+
"test/integration/{fixtures,fixtures-local}/**"
|
|
104
98
|
],
|
|
105
99
|
"rules": {
|
|
106
|
-
"unicorn/no-null": "error"
|
|
107
|
-
"unicorn/prevent-abbreviations": [
|
|
108
|
-
"error",
|
|
109
|
-
{
|
|
110
|
-
"replacements": {
|
|
111
|
-
"ref": {
|
|
112
|
-
"reference": true
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
],
|
|
117
|
-
"import/extensions": "off"
|
|
100
|
+
"unicorn/no-null": "error"
|
|
118
101
|
},
|
|
119
102
|
"overrides": [
|
|
120
|
-
{
|
|
121
|
-
"files": "rules/utils/*.js",
|
|
122
|
-
"rules": {
|
|
123
|
-
"eslint-plugin/prefer-object-rule": "off"
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
103
|
{
|
|
127
104
|
"files": [
|
|
128
105
|
"**/*.js"
|
|
@@ -132,14 +109,29 @@
|
|
|
132
109
|
},
|
|
133
110
|
"rules": {
|
|
134
111
|
"strict": "error",
|
|
135
|
-
"unicorn/prefer-module": "off"
|
|
136
|
-
|
|
112
|
+
"unicorn/prefer-module": "off"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"files": [
|
|
117
|
+
"rules/*.js"
|
|
118
|
+
],
|
|
119
|
+
"plugins": [
|
|
120
|
+
"eslint-plugin"
|
|
121
|
+
],
|
|
122
|
+
"extends": [
|
|
123
|
+
"plugin:eslint-plugin/all"
|
|
124
|
+
],
|
|
125
|
+
"rules": {
|
|
137
126
|
"eslint-plugin/require-meta-docs-description": [
|
|
138
127
|
"error",
|
|
139
128
|
{
|
|
140
129
|
"pattern": ".+"
|
|
141
130
|
}
|
|
142
|
-
]
|
|
131
|
+
],
|
|
132
|
+
"eslint-plugin/require-meta-docs-url": "off",
|
|
133
|
+
"eslint-plugin/require-meta-has-suggestions": "off",
|
|
134
|
+
"eslint-plugin/require-meta-schema": "off"
|
|
143
135
|
}
|
|
144
136
|
}
|
|
145
137
|
]
|
package/readme.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# eslint-plugin-unicorn [](https://codecov.io/gh/sindresorhus/eslint-plugin-unicorn/branch/main)
|
|
1
|
+
# eslint-plugin-unicorn [](https://codecov.io/gh/sindresorhus/eslint-plugin-unicorn/branch/main) [](https://npmjs.com/package/eslint-plugin-unicorn)
|
|
2
2
|
|
|
3
3
|
<img src="https://cloud.githubusercontent.com/assets/170270/18659176/1cc373d0-7f33-11e6-890f-0ba35362ee7e.jpg" width="180" align="right">
|
|
4
4
|
|
|
@@ -52,6 +52,7 @@ Configure it in `package.json`.
|
|
|
52
52
|
"unicorn/no-abusive-eslint-disable": "error",
|
|
53
53
|
"unicorn/no-array-callback-reference": "error",
|
|
54
54
|
"unicorn/no-array-for-each": "error",
|
|
55
|
+
"unicorn/no-array-method-this-argument": "error",
|
|
55
56
|
"unicorn/no-array-push-push": "error",
|
|
56
57
|
"unicorn/no-array-reduce": "error",
|
|
57
58
|
"unicorn/no-console-spaces": "error",
|
|
@@ -59,6 +60,7 @@ Configure it in `package.json`.
|
|
|
59
60
|
"unicorn/no-for-loop": "error",
|
|
60
61
|
"unicorn/no-hex-escape": "error",
|
|
61
62
|
"unicorn/no-instanceof-array": "error",
|
|
63
|
+
"unicorn/no-invalid-remove-event-listener": "error",
|
|
62
64
|
"unicorn/no-keyword-prefix": "off",
|
|
63
65
|
"unicorn/no-lonely-if": "error",
|
|
64
66
|
"no-nested-ternary": "off",
|
|
@@ -73,6 +75,9 @@ Configure it in `package.json`.
|
|
|
73
75
|
"unicorn/no-unreadable-array-destructuring": "error",
|
|
74
76
|
"unicorn/no-unsafe-regex": "off",
|
|
75
77
|
"unicorn/no-unused-properties": "off",
|
|
78
|
+
"unicorn/no-useless-fallback-in-spread": "error",
|
|
79
|
+
"unicorn/no-useless-length-check": "error",
|
|
80
|
+
"unicorn/no-useless-spread": "error",
|
|
76
81
|
"unicorn/no-useless-undefined": "error",
|
|
77
82
|
"unicorn/no-zero-fractions": "error",
|
|
78
83
|
"unicorn/number-literal-case": "error",
|
|
@@ -83,6 +88,7 @@ Configure it in `package.json`.
|
|
|
83
88
|
"unicorn/prefer-array-flat-map": "error",
|
|
84
89
|
"unicorn/prefer-array-index-of": "error",
|
|
85
90
|
"unicorn/prefer-array-some": "error",
|
|
91
|
+
"unicorn/prefer-at": "off",
|
|
86
92
|
"unicorn/prefer-date-now": "error",
|
|
87
93
|
"unicorn/prefer-default-parameters": "error",
|
|
88
94
|
"unicorn/prefer-dom-node-append": "error",
|
|
@@ -97,6 +103,7 @@ Configure it in `package.json`.
|
|
|
97
103
|
"unicorn/prefer-negative-index": "error",
|
|
98
104
|
"unicorn/prefer-node-protocol": "error",
|
|
99
105
|
"unicorn/prefer-number-properties": "error",
|
|
106
|
+
"unicorn/prefer-object-from-entries": "error",
|
|
100
107
|
"unicorn/prefer-object-has-own": "off",
|
|
101
108
|
"unicorn/prefer-optional-catch-binding": "error",
|
|
102
109
|
"unicorn/prefer-prototype-methods": "error",
|
|
@@ -111,13 +118,26 @@ Configure it in `package.json`.
|
|
|
111
118
|
"unicorn/prefer-string-trim-start-end": "error",
|
|
112
119
|
"unicorn/prefer-switch": "error",
|
|
113
120
|
"unicorn/prefer-ternary": "error",
|
|
121
|
+
"unicorn/prefer-top-level-await": "off",
|
|
114
122
|
"unicorn/prefer-type-error": "error",
|
|
115
123
|
"unicorn/prevent-abbreviations": "error",
|
|
116
124
|
"unicorn/require-array-join-separator": "error",
|
|
117
125
|
"unicorn/require-number-to-fixed-digits-argument": "error",
|
|
126
|
+
"unicorn/require-post-message-target-origin": "error",
|
|
118
127
|
"unicorn/string-content": "off",
|
|
119
128
|
"unicorn/throw-new-error": "error"
|
|
120
|
-
}
|
|
129
|
+
},
|
|
130
|
+
"overrides": [
|
|
131
|
+
{
|
|
132
|
+
"files": [
|
|
133
|
+
"*.ts",
|
|
134
|
+
"*.tsx"
|
|
135
|
+
],
|
|
136
|
+
"rules": {
|
|
137
|
+
"unicorn/require-post-message-target-origin": "off"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
]
|
|
121
141
|
}
|
|
122
142
|
}
|
|
123
143
|
```
|
|
@@ -153,6 +173,7 @@ Each rule has emojis denoting:
|
|
|
153
173
|
| [no-abusive-eslint-disable](docs/rules/no-abusive-eslint-disable.md) | Enforce specifying rules to disable in `eslint-disable` comments. | ✅ | | |
|
|
154
174
|
| [no-array-callback-reference](docs/rules/no-array-callback-reference.md) | Prevent passing a function reference directly to iterator methods. | ✅ | | 💡 |
|
|
155
175
|
| [no-array-for-each](docs/rules/no-array-for-each.md) | Prefer `for…of` over `Array#forEach(…)`. | ✅ | 🔧 | |
|
|
176
|
+
| [no-array-method-this-argument](docs/rules/no-array-method-this-argument.md) | Disallow using the `this` argument in array methods. | ✅ | 🔧 | 💡 |
|
|
156
177
|
| [no-array-push-push](docs/rules/no-array-push-push.md) | Enforce combining multiple `Array#push()` into one call. | ✅ | 🔧 | 💡 |
|
|
157
178
|
| [no-array-reduce](docs/rules/no-array-reduce.md) | Disallow `Array#reduce()` and `Array#reduceRight()`. | ✅ | | |
|
|
158
179
|
| [no-console-spaces](docs/rules/no-console-spaces.md) | Do not use leading/trailing space between `console.log` parameters. | ✅ | 🔧 | |
|
|
@@ -160,6 +181,7 @@ Each rule has emojis denoting:
|
|
|
160
181
|
| [no-for-loop](docs/rules/no-for-loop.md) | Do not use a `for` loop that can be replaced with a `for-of` loop. | ✅ | 🔧 | |
|
|
161
182
|
| [no-hex-escape](docs/rules/no-hex-escape.md) | Enforce the use of Unicode escapes instead of hexadecimal escapes. | ✅ | 🔧 | |
|
|
162
183
|
| [no-instanceof-array](docs/rules/no-instanceof-array.md) | Require `Array.isArray()` instead of `instanceof Array`. | ✅ | 🔧 | |
|
|
184
|
+
| [no-invalid-remove-event-listener](docs/rules/no-invalid-remove-event-listener.md) | Prevent calling `EventTarget#removeEventListener()` with the result of an expression. | ✅ | | |
|
|
163
185
|
| [no-keyword-prefix](docs/rules/no-keyword-prefix.md) | Disallow identifiers starting with `new` or `class`. | | | |
|
|
164
186
|
| [no-lonely-if](docs/rules/no-lonely-if.md) | Disallow `if` statements as the only statement in `if` blocks without `else`. | ✅ | 🔧 | |
|
|
165
187
|
| [no-nested-ternary](docs/rules/no-nested-ternary.md) | Disallow nested ternary expressions. | ✅ | 🔧 | |
|
|
@@ -173,6 +195,9 @@ Each rule has emojis denoting:
|
|
|
173
195
|
| [no-unreadable-array-destructuring](docs/rules/no-unreadable-array-destructuring.md) | Disallow unreadable array destructuring. | ✅ | 🔧 | |
|
|
174
196
|
| [no-unsafe-regex](docs/rules/no-unsafe-regex.md) | Disallow unsafe regular expressions. | | | |
|
|
175
197
|
| [no-unused-properties](docs/rules/no-unused-properties.md) | Disallow unused object properties. | | | |
|
|
198
|
+
| [no-useless-fallback-in-spread](docs/rules/no-useless-fallback-in-spread.md) | Forbid useless fallback when spreading in object literals. | ✅ | 🔧 | |
|
|
199
|
+
| [no-useless-length-check](docs/rules/no-useless-length-check.md) | Disallow useless array length check. | ✅ | 🔧 | |
|
|
200
|
+
| [no-useless-spread](docs/rules/no-useless-spread.md) | Disallow unnecessary spread. | ✅ | 🔧 | |
|
|
176
201
|
| [no-useless-undefined](docs/rules/no-useless-undefined.md) | Disallow useless `undefined`. | ✅ | 🔧 | |
|
|
177
202
|
| [no-zero-fractions](docs/rules/no-zero-fractions.md) | Disallow number literals with zero fractions or dangling dots. | ✅ | 🔧 | |
|
|
178
203
|
| [number-literal-case](docs/rules/number-literal-case.md) | Enforce proper case for numeric literals. | ✅ | 🔧 | |
|
|
@@ -182,13 +207,14 @@ Each rule has emojis denoting:
|
|
|
182
207
|
| [prefer-array-flat](docs/rules/prefer-array-flat.md) | Prefer `Array#flat()` over legacy techniques to flatten arrays. | ✅ | 🔧 | |
|
|
183
208
|
| [prefer-array-flat-map](docs/rules/prefer-array-flat-map.md) | Prefer `.flatMap(…)` over `.map(…).flat()`. | ✅ | 🔧 | |
|
|
184
209
|
| [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. | ✅ | 🔧 | 💡 |
|
|
185
|
-
| [prefer-array-some](docs/rules/prefer-array-some.md) | Prefer `.some(…)` over `.find(…)`. | ✅ |
|
|
210
|
+
| [prefer-array-some](docs/rules/prefer-array-some.md) | Prefer `.some(…)` over `.filter(…).length` check and `.find(…)`. | ✅ | 🔧 | 💡 |
|
|
211
|
+
| [prefer-at](docs/rules/prefer-at.md) | Prefer `.at()` method for index access and `String#charAt()`. | | 🔧 | 💡 |
|
|
186
212
|
| [prefer-date-now](docs/rules/prefer-date-now.md) | Prefer `Date.now()` to get the number of milliseconds since the Unix Epoch. | ✅ | 🔧 | |
|
|
187
213
|
| [prefer-default-parameters](docs/rules/prefer-default-parameters.md) | Prefer default parameters over reassignment. | ✅ | 🔧 | 💡 |
|
|
188
214
|
| [prefer-dom-node-append](docs/rules/prefer-dom-node-append.md) | Prefer `Node#append()` over `Node#appendChild()`. | ✅ | 🔧 | |
|
|
189
215
|
| [prefer-dom-node-dataset](docs/rules/prefer-dom-node-dataset.md) | Prefer using `.dataset` on DOM elements over `.setAttribute(…)`. | ✅ | 🔧 | |
|
|
190
216
|
| [prefer-dom-node-remove](docs/rules/prefer-dom-node-remove.md) | Prefer `childNode.remove()` over `parentNode.removeChild(childNode)`. | ✅ | 🔧 | 💡 |
|
|
191
|
-
| [prefer-dom-node-text-content](docs/rules/prefer-dom-node-text-content.md) | Prefer `.textContent` over `.innerText`. | ✅ |
|
|
217
|
+
| [prefer-dom-node-text-content](docs/rules/prefer-dom-node-text-content.md) | Prefer `.textContent` over `.innerText`. | ✅ | | 💡 |
|
|
192
218
|
| [prefer-includes](docs/rules/prefer-includes.md) | Prefer `.includes()` over `.indexOf()` and `Array#some()` when checking for existence or non-existence. | ✅ | 🔧 | 💡 |
|
|
193
219
|
| [prefer-keyboard-event-key](docs/rules/prefer-keyboard-event-key.md) | Prefer `KeyboardEvent#key` over `KeyboardEvent#keyCode`. | ✅ | 🔧 | |
|
|
194
220
|
| [prefer-math-trunc](docs/rules/prefer-math-trunc.md) | Enforce the use of `Math.trunc` instead of bitwise operators. | ✅ | 🔧 | 💡 |
|
|
@@ -197,6 +223,7 @@ Each rule has emojis denoting:
|
|
|
197
223
|
| [prefer-negative-index](docs/rules/prefer-negative-index.md) | Prefer negative index over `.length - index` for `{String,Array,TypedArray}#slice()`, `Array#splice()` and `Array#at()`. | ✅ | 🔧 | |
|
|
198
224
|
| [prefer-node-protocol](docs/rules/prefer-node-protocol.md) | Prefer using the `node:` protocol when importing Node.js builtin modules. | ✅ | 🔧 | |
|
|
199
225
|
| [prefer-number-properties](docs/rules/prefer-number-properties.md) | Prefer `Number` static properties over global ones. | ✅ | 🔧 | 💡 |
|
|
226
|
+
| [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. | ✅ | 🔧 | |
|
|
200
227
|
| [prefer-object-has-own](docs/rules/prefer-object-has-own.md) | Prefer `Object.hasOwn(…)` over `Object.prototype.hasOwnProperty.call(…)`. | | 🔧 | |
|
|
201
228
|
| [prefer-optional-catch-binding](docs/rules/prefer-optional-catch-binding.md) | Prefer omitting the `catch` binding parameter. | ✅ | 🔧 | |
|
|
202
229
|
| [prefer-prototype-methods](docs/rules/prefer-prototype-methods.md) | Prefer borrowing methods from the prototype instead of the instance. | ✅ | 🔧 | |
|
|
@@ -204,17 +231,19 @@ Each rule has emojis denoting:
|
|
|
204
231
|
| [prefer-reflect-apply](docs/rules/prefer-reflect-apply.md) | Prefer `Reflect.apply()` over `Function#apply()`. | ✅ | 🔧 | |
|
|
205
232
|
| [prefer-regexp-test](docs/rules/prefer-regexp-test.md) | Prefer `RegExp#test()` over `String#match()` and `RegExp#exec()`. | ✅ | 🔧 | |
|
|
206
233
|
| [prefer-set-has](docs/rules/prefer-set-has.md) | Prefer `Set#has()` over `Array#includes()` when checking for existence or non-existence. | ✅ | 🔧 | 💡 |
|
|
207
|
-
| [prefer-spread](docs/rules/prefer-spread.md) | Prefer the spread operator over `Array.from(…)`, `Array#concat(…)` and `
|
|
234
|
+
| [prefer-spread](docs/rules/prefer-spread.md) | Prefer the spread operator over `Array.from(…)`, `Array#concat(…)`, `Array#slice()` and `String#split('')`. | ✅ | 🔧 | 💡 |
|
|
208
235
|
| [prefer-string-replace-all](docs/rules/prefer-string-replace-all.md) | Prefer `String#replaceAll()` over regex searches with the global flag. | | 🔧 | |
|
|
209
236
|
| [prefer-string-slice](docs/rules/prefer-string-slice.md) | Prefer `String#slice()` over `String#substr()` and `String#substring()`. | ✅ | 🔧 | |
|
|
210
237
|
| [prefer-string-starts-ends-with](docs/rules/prefer-string-starts-ends-with.md) | Prefer `String#startsWith()` & `String#endsWith()` over `RegExp#test()`. | ✅ | 🔧 | 💡 |
|
|
211
238
|
| [prefer-string-trim-start-end](docs/rules/prefer-string-trim-start-end.md) | Prefer `String#trimStart()` / `String#trimEnd()` over `String#trimLeft()` / `String#trimRight()`. | ✅ | 🔧 | |
|
|
212
239
|
| [prefer-switch](docs/rules/prefer-switch.md) | Prefer `switch` over multiple `else-if`. | ✅ | 🔧 | |
|
|
213
240
|
| [prefer-ternary](docs/rules/prefer-ternary.md) | Prefer ternary expressions over simple `if-else` statements. | ✅ | 🔧 | |
|
|
241
|
+
| [prefer-top-level-await](docs/rules/prefer-top-level-await.md) | Prefer top-level await over top-level promises and async function calls. | | | 💡 |
|
|
214
242
|
| [prefer-type-error](docs/rules/prefer-type-error.md) | Enforce throwing `TypeError` in type checking conditions. | ✅ | 🔧 | |
|
|
215
243
|
| [prevent-abbreviations](docs/rules/prevent-abbreviations.md) | Prevent abbreviations. | ✅ | 🔧 | |
|
|
216
244
|
| [require-array-join-separator](docs/rules/require-array-join-separator.md) | Enforce using the separator argument with `Array#join()`. | ✅ | 🔧 | |
|
|
217
245
|
| [require-number-to-fixed-digits-argument](docs/rules/require-number-to-fixed-digits-argument.md) | Enforce using the digits argument with `Number#toFixed()`. | ✅ | 🔧 | |
|
|
246
|
+
| [require-post-message-target-origin](docs/rules/require-post-message-target-origin.md) | Enforce using the `targetOrigin` argument with `window.postMessage()`. | ✅ | | 💡 |
|
|
218
247
|
| [string-content](docs/rules/string-content.md) | Enforce better string content. | | 🔧 | 💡 |
|
|
219
248
|
| [throw-new-error](docs/rules/throw-new-error.md) | Require `new` when throwing an error. | ✅ | 🔧 | |
|
|
220
249
|
|
|
@@ -226,7 +255,7 @@ See [docs/deprecated-rules.md](docs/deprecated-rules.md)
|
|
|
226
255
|
|
|
227
256
|
## Recommended config
|
|
228
257
|
|
|
229
|
-
This plugin exports a [`recommended` config](
|
|
258
|
+
This plugin exports a [`recommended` config](configs/recommended.js) that enforces good practices.
|
|
230
259
|
|
|
231
260
|
Enable it in your `package.json` with the `extends` option:
|
|
232
261
|
|
|
@@ -239,9 +268,26 @@ Enable it in your `package.json` with the `extends` option:
|
|
|
239
268
|
}
|
|
240
269
|
```
|
|
241
270
|
|
|
242
|
-
See the [ESLint docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information about extending config files.
|
|
271
|
+
See the [ESLint docs](https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files) for more information about extending config files.
|
|
272
|
+
|
|
273
|
+
**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).
|
|
274
|
+
|
|
275
|
+
## All config
|
|
276
|
+
|
|
277
|
+
This plugin exports an [`all` config](configs/all.js) that makes use of all rules (except for deprecated ones).
|
|
278
|
+
|
|
279
|
+
Enable it in your `package.json` with the `extends` option:
|
|
280
|
+
|
|
281
|
+
```json
|
|
282
|
+
{
|
|
283
|
+
"name": "my-awesome-project",
|
|
284
|
+
"eslintConfig": {
|
|
285
|
+
"extends": "plugin:unicorn/all"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
243
289
|
|
|
244
|
-
|
|
290
|
+
See the [ESLint docs](https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files) for more information about extending config files.
|
|
245
291
|
|
|
246
292
|
## Maintainers
|
|
247
293
|
|