eslint-plugin-unicorn 59.0.1 → 61.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/index.d.ts +1 -0
- package/index.js +13 -2
- package/package.json +38 -39
- package/readme.md +141 -132
- package/rules/ast/call-or-new-expression.js +1 -0
- package/rules/ast/index.js +1 -1
- package/rules/ast/is-member-expression.js +1 -0
- package/rules/ast/is-negative-one.js +2 -2
- package/rules/ast/literal.js +1 -1
- package/rules/catch-error-name.js +2 -4
- package/rules/consistent-date-clone.js +1 -1
- package/rules/consistent-destructuring.js +0 -1
- package/rules/consistent-existence-index-check.js +3 -3
- package/rules/custom-error-definition.js +1 -1
- package/rules/error-message.js +17 -13
- package/rules/escape-case.js +1 -1
- package/rules/expiring-todo-comments.js +2 -1
- package/rules/explicit-length-check.js +2 -2
- package/rules/filename-case.js +3 -28
- package/rules/fix/index.js +5 -1
- package/rules/fix/remove-method-call.js +1 -1
- package/rules/fix/remove-object-property.js +21 -0
- package/rules/fix/replace-member-expression-property.js +9 -0
- package/rules/fix/replace-node-or-token-and-spaces-before.js +1 -0
- package/rules/import-style.js +7 -5
- package/rules/index.js +138 -266
- package/rules/new-for-builtins.js +1 -1
- package/rules/no-abusive-eslint-disable.js +1 -1
- package/rules/no-accessor-recursion.js +1 -1
- package/rules/no-anonymous-default-export.js +3 -3
- package/rules/no-array-callback-reference.js +0 -1
- package/rules/no-array-for-each.js +1 -1
- package/rules/no-array-method-this-argument.js +1 -2
- package/rules/no-array-reduce.js +0 -1
- package/rules/no-array-reverse.js +6 -0
- package/rules/no-array-sort.js +6 -0
- package/rules/no-await-in-promise-methods.js +1 -1
- package/rules/no-console-spaces.js +1 -1
- package/rules/no-document-cookie.js +1 -1
- package/rules/no-empty-file.js +1 -1
- package/rules/no-hex-escape.js +1 -1
- package/rules/no-instanceof-builtins.js +17 -25
- package/rules/no-invalid-fetch-options.js +1 -1
- package/rules/no-invalid-remove-event-listener.js +1 -2
- package/rules/no-lonely-if.js +1 -1
- package/rules/no-magic-array-flat-depth.js +3 -3
- package/rules/no-named-default.js +1 -1
- package/rules/no-negated-condition.js +1 -1
- package/rules/no-negation-in-equality-check.js +1 -1
- package/rules/no-nested-ternary.js +2 -2
- package/rules/no-new-array.js +1 -1
- package/rules/no-new-buffer.js +1 -1
- package/rules/no-null.js +0 -1
- package/rules/no-object-as-default-parameter.js +1 -1
- package/rules/no-process-exit.js +1 -1
- package/rules/no-single-promise-in-promise-methods.js +1 -1
- package/rules/no-static-only-class.js +1 -1
- package/rules/no-thenable.js +1 -1
- package/rules/no-this-assignment.js +1 -1
- package/rules/no-typeof-undefined.js +3 -3
- package/rules/no-unnecessary-array-flat-depth.js +1 -2
- package/rules/no-unnecessary-array-splice-count.js +1 -1
- package/rules/no-unnecessary-await.js +6 -2
- package/rules/no-unnecessary-polyfills.js +2 -2
- package/rules/no-unnecessary-slice-end.js +1 -1
- package/rules/no-unreadable-array-destructuring.js +1 -1
- package/rules/no-unreadable-iife.js +1 -1
- package/rules/no-useless-error-capture-stack-trace.js +146 -0
- package/rules/no-useless-fallback-in-spread.js +1 -1
- package/rules/no-useless-length-check.js +1 -1
- package/rules/no-useless-promise-resolve-reject.js +1 -1
- package/rules/no-useless-spread.js +1 -1
- package/rules/no-useless-switch-case.js +1 -1
- package/rules/no-useless-undefined.js +1 -1
- package/rules/no-zero-fractions.js +3 -3
- package/rules/number-literal-case.js +3 -3
- package/rules/numeric-separators-style.js +1 -1
- package/rules/prefer-add-event-listener.js +1 -1
- package/rules/prefer-array-find.js +12 -6
- package/rules/prefer-array-flat-map.js +1 -2
- package/rules/prefer-array-flat.js +10 -7
- package/rules/prefer-array-index-of.js +1 -1
- package/rules/prefer-array-some.js +1 -1
- package/rules/prefer-at.js +26 -29
- package/rules/prefer-bigint-literals.js +129 -0
- package/rules/prefer-blob-reading-methods.js +1 -1
- package/rules/prefer-class-fields.js +158 -0
- package/rules/prefer-classlist-toggle.js +223 -0
- package/rules/prefer-code-point.js +1 -2
- package/rules/prefer-date-now.js +1 -1
- package/rules/prefer-default-parameters.js +1 -2
- package/rules/prefer-dom-node-append.js +1 -1
- package/rules/prefer-dom-node-dataset.js +8 -3
- package/rules/prefer-dom-node-remove.js +1 -1
- package/rules/prefer-dom-node-text-content.js +1 -1
- package/rules/prefer-event-target.js +1 -1
- package/rules/prefer-global-this.js +1 -1
- package/rules/prefer-includes.js +7 -4
- package/rules/prefer-keyboard-event-key.js +3 -3
- package/rules/prefer-logical-operator-over-ternary.js +1 -1
- package/rules/prefer-math-min-max.js +2 -1
- package/rules/prefer-math-trunc.js +1 -1
- package/rules/prefer-modern-dom-apis.js +4 -2
- package/rules/prefer-modern-math-apis.js +1 -1
- package/rules/prefer-module.js +11 -13
- package/rules/prefer-native-coercion-functions.js +1 -1
- package/rules/prefer-negative-index.js +1 -1
- package/rules/prefer-node-protocol.js +1 -1
- package/rules/prefer-number-properties.js +1 -1
- package/rules/prefer-object-from-entries.js +1 -1
- package/rules/prefer-optional-catch-binding.js +1 -1
- package/rules/prefer-prototype-methods.js +1 -1
- package/rules/prefer-reflect-apply.js +1 -1
- package/rules/prefer-regexp-test.js +1 -1
- package/rules/prefer-set-has.js +9 -16
- package/rules/prefer-set-size.js +1 -1
- package/rules/prefer-single-call.js +1 -1
- package/rules/prefer-string-raw.js +5 -19
- package/rules/prefer-string-replace-all.js +38 -6
- package/rules/prefer-string-slice.js +5 -5
- package/rules/prefer-string-starts-ends-with.js +1 -1
- package/rules/prefer-string-trim-start-end.js +1 -1
- package/rules/prefer-structured-clone.js +1 -1
- package/rules/prefer-switch.js +2 -2
- package/rules/prefer-ternary.js +2 -1
- package/rules/prefer-top-level-await.js +1 -1
- package/rules/prefer-type-error.js +22 -6
- package/rules/prevent-abbreviations.js +8 -4
- package/rules/relative-url-style.js +1 -1
- package/rules/require-array-join-separator.js +1 -1
- package/rules/require-module-attributes.js +120 -0
- package/rules/require-module-specifiers.js +158 -0
- package/rules/require-number-to-fixed-digits-argument.js +1 -2
- package/rules/require-post-message-target-origin.js +0 -1
- package/rules/shared/builtin-errors.js +1 -1
- package/rules/shared/negative-index.js +2 -2
- package/rules/shared/no-array-mutate-rule.js +140 -0
- package/rules/shared/simple-array-search-rule.js +0 -1
- package/rules/template-indent.js +1 -1
- package/rules/text-encoding-identifier-case.js +8 -9
- package/rules/throw-new-error.js +1 -1
- package/rules/utils/get-token-store.js +24 -0
- package/rules/utils/global-reference-tracker.js +1 -1
- package/rules/utils/index.js +5 -1
- package/rules/utils/is-number.js +3 -2
- package/rules/utils/is-unresolved-variable.js +14 -0
- package/rules/utils/needs-semicolon.js +1 -0
- package/rules/utils/numeric.js +4 -4
- package/rules/utils/rule.js +20 -18
- package/rules/utils/should-add-parentheses-to-unary-expression.js +24 -0
- package/rules/utils/string-cases.js +2 -0
- package/rules/fix/remove-member-expression-property.js +0 -7
- package/rules/utils/is-shadowed.js +0 -31
- package/rules/utils/lodash.js +0 -1567
package/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type {ESLint, Linter} from 'eslint';
|
|
|
3
3
|
declare const eslintPluginUnicorn: ESLint.Plugin & {
|
|
4
4
|
configs: {
|
|
5
5
|
recommended: Linter.FlatConfig;
|
|
6
|
+
unopinionated: Linter.FlatConfig;
|
|
6
7
|
all: Linter.FlatConfig;
|
|
7
8
|
|
|
8
9
|
/** @deprecated Use `all` instead. The `flat/` prefix is no longer needed. */
|
package/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import createDeprecatedRules from './rules/utils/create-deprecated-rules.js';
|
|
2
2
|
import flatConfigBase from './configs/flat-config-base.js';
|
|
3
|
-
import
|
|
3
|
+
import * as rawRules from './rules/index.js';
|
|
4
|
+
import {createRules} from './rules/utils/rule.js';
|
|
4
5
|
import packageJson from './package.json' with {type: 'json'};
|
|
5
6
|
|
|
7
|
+
const rules = createRules(rawRules);
|
|
8
|
+
|
|
6
9
|
const deprecatedRules = createDeprecatedRules({
|
|
7
10
|
// {ruleId: {message: string, replacedBy: string[]}}
|
|
8
11
|
'no-instanceof-array': {
|
|
@@ -33,6 +36,13 @@ const recommendedRules = Object.fromEntries(
|
|
|
33
36
|
]),
|
|
34
37
|
);
|
|
35
38
|
|
|
39
|
+
const unopinionatedRules = Object.fromEntries(
|
|
40
|
+
Object.entries(rules).map(([id, rule]) => [
|
|
41
|
+
`unicorn/${id}`,
|
|
42
|
+
rule.meta.docs.recommended === 'unopinionated' ? 'error' : 'off',
|
|
43
|
+
]),
|
|
44
|
+
);
|
|
45
|
+
|
|
36
46
|
const allRules = Object.fromEntries(
|
|
37
47
|
Object.keys(rules).map(id => [
|
|
38
48
|
`unicorn/${id}`,
|
|
@@ -58,13 +68,14 @@ const unicorn = {
|
|
|
58
68
|
version: packageJson.version,
|
|
59
69
|
},
|
|
60
70
|
rules: {
|
|
61
|
-
...rules,
|
|
71
|
+
...createRules(rules),
|
|
62
72
|
...deprecatedRules,
|
|
63
73
|
},
|
|
64
74
|
};
|
|
65
75
|
|
|
66
76
|
const configs = {
|
|
67
77
|
recommended: createConfig(recommendedRules, 'unicorn/recommended'),
|
|
78
|
+
unopinionated: createConfig(unopinionatedRules, 'unicorn/unopinionated'),
|
|
68
79
|
all: createConfig(allRules, 'unicorn/all'),
|
|
69
80
|
|
|
70
81
|
// TODO: Remove this at some point. Kept for now to avoid breaking users.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-unicorn",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "61.0.0",
|
|
4
4
|
"description": "More than 100 powerful ESLint rules",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "sindresorhus/eslint-plugin-unicorn",
|
|
@@ -17,19 +17,18 @@
|
|
|
17
17
|
},
|
|
18
18
|
"sideEffects": false,
|
|
19
19
|
"engines": {
|
|
20
|
-
"node": "^
|
|
20
|
+
"node": "^20.10.0 || >=21.0.0"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"bundle-lodash": "echo export {defaultsDeep, camelCase, kebabCase, snakeCase, upperFirst, lowerFirst} from 'lodash-es'; | npx esbuild --bundle --outfile=rules/utils/lodash.js --format=esm",
|
|
24
23
|
"create-rule": "node ./scripts/create-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs",
|
|
25
24
|
"create-rules-index-file": "node ./scripts/create-rules-index-file.js",
|
|
26
|
-
"fix": "run-p --continue-on-error fix
|
|
27
|
-
"fix:eslint-docs": "eslint-doc-generator
|
|
25
|
+
"fix": "run-p --continue-on-error \"fix:*\"",
|
|
26
|
+
"fix:eslint-docs": "eslint-doc-generator",
|
|
28
27
|
"fix:js": "npm run lint:js -- --fix",
|
|
29
28
|
"fix:markdown": "npm run lint:markdown -- --fix",
|
|
30
29
|
"fix:snapshots": "ava --update-snapshots",
|
|
31
30
|
"integration": "node ./test/integration/test.js",
|
|
32
|
-
"lint": "run-p --continue-on-error lint
|
|
31
|
+
"lint": "run-p --continue-on-error \"lint:*\"",
|
|
33
32
|
"lint:eslint-docs": "npm run fix:eslint-docs -- --check",
|
|
34
33
|
"lint:js": "eslint",
|
|
35
34
|
"lint:markdown": "markdownlint \"**/*.md\"",
|
|
@@ -37,7 +36,7 @@
|
|
|
37
36
|
"rename-rule": "node ./scripts/rename-rule.js && npm run create-rules-index-file && npm run fix:eslint-docs",
|
|
38
37
|
"run-rules-on-codebase": "eslint --config=./eslint.dogfooding.config.js",
|
|
39
38
|
"smoke": "eslint-remote-tester --config ./test/smoke/eslint-remote-tester.config.js",
|
|
40
|
-
"test": "npm-run-all --continue-on-error lint test
|
|
39
|
+
"test": "npm-run-all --continue-on-error lint \"test:*\"",
|
|
41
40
|
"test:js": "c8 ava"
|
|
42
41
|
},
|
|
43
42
|
"files": [
|
|
@@ -57,60 +56,60 @@
|
|
|
57
56
|
"xo"
|
|
58
57
|
],
|
|
59
58
|
"dependencies": {
|
|
60
|
-
"@babel/helper-validator-identifier": "^7.
|
|
61
|
-
"@eslint-community/eslint-utils": "^4.
|
|
62
|
-
"@eslint/plugin-kit": "^0.
|
|
63
|
-
"
|
|
59
|
+
"@babel/helper-validator-identifier": "^7.27.1",
|
|
60
|
+
"@eslint-community/eslint-utils": "^4.7.0",
|
|
61
|
+
"@eslint/plugin-kit": "^0.3.3",
|
|
62
|
+
"change-case": "^5.4.4",
|
|
63
|
+
"ci-info": "^4.3.0",
|
|
64
64
|
"clean-regexp": "^1.0.0",
|
|
65
|
-
"core-js-compat": "^3.
|
|
65
|
+
"core-js-compat": "^3.44.0",
|
|
66
66
|
"esquery": "^1.6.0",
|
|
67
67
|
"find-up-simple": "^1.0.1",
|
|
68
|
-
"globals": "^16.
|
|
68
|
+
"globals": "^16.3.0",
|
|
69
69
|
"indent-string": "^5.0.0",
|
|
70
70
|
"is-builtin-module": "^5.0.0",
|
|
71
71
|
"jsesc": "^3.1.0",
|
|
72
72
|
"pluralize": "^8.0.0",
|
|
73
73
|
"regexp-tree": "^0.1.27",
|
|
74
74
|
"regjsparser": "^0.12.0",
|
|
75
|
-
"semver": "^7.7.
|
|
75
|
+
"semver": "^7.7.2",
|
|
76
76
|
"strip-indent": "^4.0.0"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@babel/code-frame": "^7.
|
|
80
|
-
"@babel/core": "^7.
|
|
81
|
-
"@babel/eslint-parser": "^7.
|
|
82
|
-
"@eslint/eslintrc": "^3.3.
|
|
79
|
+
"@babel/code-frame": "^7.27.1",
|
|
80
|
+
"@babel/core": "^7.28.0",
|
|
81
|
+
"@babel/eslint-parser": "^7.28.0",
|
|
82
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
83
83
|
"@lubien/fixture-beta-package": "^1.0.0-beta.1",
|
|
84
|
-
"@typescript-eslint/parser": "^8.
|
|
85
|
-
"ava": "^6.
|
|
84
|
+
"@typescript-eslint/parser": "^8.37.0",
|
|
85
|
+
"ava": "^6.4.1",
|
|
86
86
|
"c8": "^10.1.3",
|
|
87
87
|
"enquirer": "^2.4.1",
|
|
88
|
-
"eslint": "^9.
|
|
88
|
+
"eslint": "^9.29.0",
|
|
89
89
|
"eslint-ava-rule-tester": "^5.0.1",
|
|
90
|
-
"eslint-config-xo": "^0.
|
|
91
|
-
"eslint-doc-generator": "^2.
|
|
92
|
-
"eslint-plugin-eslint-plugin": "^6.
|
|
93
|
-
"eslint-plugin-jsdoc": "^
|
|
94
|
-
"eslint-remote-tester": "^4.0.
|
|
95
|
-
"eslint-remote-tester-repositories": "^2.0.
|
|
96
|
-
"espree": "^10.
|
|
97
|
-
"listr2": "^
|
|
90
|
+
"eslint-config-xo": "^0.47.0",
|
|
91
|
+
"eslint-doc-generator": "^2.2.2",
|
|
92
|
+
"eslint-plugin-eslint-plugin": "^6.5.0",
|
|
93
|
+
"eslint-plugin-jsdoc": "^51.4.1",
|
|
94
|
+
"eslint-remote-tester": "^4.0.2",
|
|
95
|
+
"eslint-remote-tester-repositories": "^2.0.2",
|
|
96
|
+
"espree": "^10.4.0",
|
|
97
|
+
"listr2": "^9.0.1",
|
|
98
98
|
"lodash-es": "^4.17.21",
|
|
99
|
-
"markdownlint-cli": "^0.
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"npm-
|
|
104
|
-
"npm-run-all2": "^7.0.2",
|
|
99
|
+
"markdownlint-cli": "^0.45.0",
|
|
100
|
+
"nano-spawn": "^1.0.2",
|
|
101
|
+
"node-style-text": "^1.0.0",
|
|
102
|
+
"npm-package-json-lint": "^9.0.0",
|
|
103
|
+
"npm-run-all2": "^8.0.4",
|
|
105
104
|
"open-editor": "^5.1.0",
|
|
106
105
|
"outdent": "^0.8.0",
|
|
107
106
|
"pretty-ms": "^9.2.0",
|
|
108
|
-
"typescript": "^5.8.
|
|
109
|
-
"vue-eslint-parser": "^10.
|
|
110
|
-
"yaml": "^2.
|
|
107
|
+
"typescript": "^5.8.3",
|
|
108
|
+
"vue-eslint-parser": "^10.2.0",
|
|
109
|
+
"yaml": "^2.8.0"
|
|
111
110
|
},
|
|
112
111
|
"peerDependencies": {
|
|
113
|
-
"eslint": ">=9.
|
|
112
|
+
"eslint": ">=9.29.0"
|
|
114
113
|
},
|
|
115
114
|
"ava": {
|
|
116
115
|
"files": [
|