eslint-plugin-unicorn 66.0.0 → 68.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.
Files changed (208) hide show
  1. package/configs/core-rule-replacements.js +9 -0
  2. package/index.js +11 -7
  3. package/package.json +6 -3
  4. package/readme.md +426 -270
  5. package/rules/ast/index.js +3 -0
  6. package/rules/ast/is-empty-node.js +1 -5
  7. package/rules/ast/is-loop.js +5 -0
  8. package/rules/ast/literal.js +5 -0
  9. package/rules/ast/loop-types.js +9 -0
  10. package/rules/better-dom-traversing.js +17 -8
  11. package/rules/class-reference-in-static-methods.js +14 -2
  12. package/rules/comment-content.js +654 -81
  13. package/rules/consistent-assert.js +1 -1
  14. package/rules/consistent-boolean-name.js +505 -0
  15. package/rules/consistent-class-member-order.js +41 -14
  16. package/rules/consistent-compound-words.js +7 -5
  17. package/rules/consistent-conditional-object-spread.js +354 -0
  18. package/rules/consistent-destructuring.js +5 -0
  19. package/rules/consistent-existence-index-check.js +1 -1
  20. package/rules/consistent-json-file-read.js +4 -16
  21. package/rules/consistent-optional-chaining.js +3 -20
  22. package/rules/default-export-style.js +569 -0
  23. package/rules/dom-node-dataset.js +167 -29
  24. package/rules/expiring-todo-comments.js +1 -2
  25. package/rules/explicit-length-check.js +15 -40
  26. package/rules/fix/index.js +2 -1
  27. package/rules/fix/{remove-expression-statement.js → remove-statement.js} +20 -7
  28. package/rules/fix/replace-node-with-expression.js +47 -0
  29. package/rules/fix/replace-reference-identifier.js +4 -1
  30. package/rules/import-style.js +7 -7
  31. package/rules/index.js +53 -1
  32. package/rules/logical-assignment-operators.js +125 -0
  33. package/rules/{prevent-abbreviations.js → name-replacements.js} +11 -9
  34. package/rules/new-for-builtins.js +42 -10
  35. package/rules/no-accessor-recursion.js +7 -0
  36. package/rules/no-accidental-bitwise-operator.js +97 -0
  37. package/rules/no-anonymous-default-export.js +2 -2
  38. package/rules/no-array-callback-reference.js +68 -8
  39. package/rules/no-array-concat-in-loop.js +45 -0
  40. package/rules/no-array-front-mutation.js +64 -0
  41. package/rules/no-array-reduce.js +66 -1
  42. package/rules/no-array-sort-for-min-max.js +225 -0
  43. package/rules/no-array-splice.js +246 -0
  44. package/rules/no-blob-to-file.js +1 -34
  45. package/rules/no-boolean-sort-comparator.js +215 -0
  46. package/rules/no-break-in-nested-loop.js +38 -14
  47. package/rules/no-chained-comparison.js +116 -0
  48. package/rules/no-collection-bracket-access.js +165 -0
  49. package/rules/no-computed-property-existence-check.js +3 -3
  50. package/rules/no-confusing-array-splice.js +2 -21
  51. package/rules/no-confusing-array-with.js +2 -20
  52. package/rules/no-constant-zero-expression.js +91 -0
  53. package/rules/no-declarations-before-early-exit.js +85 -33
  54. package/rules/no-double-comparison.js +117 -0
  55. package/rules/no-duplicate-if-branches.js +143 -0
  56. package/rules/no-duplicate-logical-operands.js +151 -0
  57. package/rules/no-duplicate-loops.js +3 -83
  58. package/rules/no-empty-file.js +9 -0
  59. package/rules/no-for-each.js +12 -13
  60. package/rules/no-for-loop.js +3 -15
  61. package/rules/no-global-object-property-assignment.js +1 -6
  62. package/rules/no-immediate-mutation.js +2 -2
  63. package/rules/no-impossible-length-comparison.js +166 -0
  64. package/rules/no-incorrect-query-selector.js +8 -22
  65. package/rules/no-incorrect-template-string-interpolation.js +22 -11
  66. package/rules/no-instanceof-builtins.js +14 -1
  67. package/rules/no-invalid-argument-count.js +1240 -14
  68. package/rules/no-invalid-character-comparison.js +121 -0
  69. package/rules/no-invalid-fetch-options.js +3 -1
  70. package/rules/no-keyword-prefix.js +14 -4
  71. package/rules/no-late-current-target-access.js +7 -39
  72. package/rules/no-loop-iterable-mutation.js +541 -0
  73. package/rules/no-manually-wrapped-comments.js +10 -2
  74. package/rules/no-misrefactored-assignment.js +102 -0
  75. package/rules/no-named-default.js +35 -2
  76. package/rules/no-non-function-verb-prefix.js +324 -0
  77. package/rules/no-nonstandard-builtin-properties.js +1381 -0
  78. package/rules/no-process-exit.js +16 -12
  79. package/rules/no-redundant-comparison.js +5 -12
  80. package/rules/no-return-array-push.js +25 -21
  81. package/rules/no-selector-as-dom-name.js +150 -0
  82. package/rules/no-thenable.js +27 -11
  83. package/rules/no-top-level-assignment-in-function.js +76 -0
  84. package/rules/no-uncalled-method.js +302 -0
  85. package/rules/no-undeclared-class-members.js +8 -6
  86. package/rules/no-unnecessary-boolean-comparison.js +131 -0
  87. package/rules/no-unnecessary-global-this.js +1 -6
  88. package/rules/no-unnecessary-splice.js +26 -158
  89. package/rules/no-unreadable-array-destructuring.js +61 -3
  90. package/rules/no-unreadable-for-of-expression.js +131 -0
  91. package/rules/no-unreadable-new-expression.js +1 -1
  92. package/rules/no-unreadable-object-destructuring.js +26 -1
  93. package/rules/no-unsafe-property-key.js +26 -0
  94. package/rules/no-unused-properties.js +4 -3
  95. package/rules/no-useless-boolean-cast.js +2 -11
  96. package/rules/no-useless-coercion.js +147 -0
  97. package/rules/no-useless-compound-assignment.js +110 -0
  98. package/rules/no-useless-continue.js +81 -0
  99. package/rules/no-useless-delete-check.js +353 -0
  100. package/rules/no-useless-else.js +16 -65
  101. package/rules/no-useless-error-capture-stack-trace.js +1 -1
  102. package/rules/no-useless-fallback-in-spread.js +7 -99
  103. package/rules/no-useless-logical-operand.js +248 -0
  104. package/rules/no-useless-override.js +217 -0
  105. package/rules/no-useless-undefined.js +11 -28
  106. package/rules/no-xor-as-exponentiation.js +59 -0
  107. package/rules/operator-assignment.js +111 -0
  108. package/rules/prefer-add-event-listener-options.js +1 -5
  109. package/rules/prefer-array-find.js +95 -5
  110. package/rules/prefer-array-flat-map.js +9 -21
  111. package/rules/prefer-array-flat.js +2 -25
  112. package/rules/prefer-array-from-async.js +273 -0
  113. package/rules/prefer-array-iterable-methods.js +157 -0
  114. package/rules/prefer-array-slice.js +97 -0
  115. package/rules/prefer-array-some.js +58 -33
  116. package/rules/prefer-at.js +2 -25
  117. package/rules/prefer-await.js +23 -20
  118. package/rules/prefer-boolean-return.js +224 -0
  119. package/rules/prefer-classlist-toggle.js +1 -1
  120. package/rules/prefer-continue.js +361 -0
  121. package/rules/prefer-default-parameters.js +10 -6
  122. package/rules/prefer-dispose.js +1 -5
  123. package/rules/prefer-early-return.js +160 -30
  124. package/rules/prefer-else-if.js +521 -0
  125. package/rules/prefer-event-target.js +3 -13
  126. package/rules/prefer-flat-math-min-max.js +103 -0
  127. package/rules/prefer-global-this.js +1 -1
  128. package/rules/prefer-has-check.js +946 -0
  129. package/rules/prefer-hoisting-branch-code.js +422 -0
  130. package/rules/prefer-identifier-import-export-specifiers.js +6 -11
  131. package/rules/prefer-includes-over-repeated-comparisons.js +5 -1
  132. package/rules/prefer-includes.js +6 -0
  133. package/rules/prefer-iterable-in-constructor.js +2 -2
  134. package/rules/prefer-logical-operator-over-ternary.js +122 -38
  135. package/rules/prefer-map-from-entries.js +482 -0
  136. package/rules/prefer-math-constants.js +103 -0
  137. package/rules/prefer-math-min-max.js +1 -5
  138. package/rules/prefer-minimal-ternary.js +49 -10
  139. package/rules/prefer-node-protocol.js +1 -0
  140. package/rules/prefer-number-properties.js +2 -5
  141. package/rules/prefer-object-from-entries.js +8 -3
  142. package/rules/prefer-object-iterable-methods.js +36 -11
  143. package/rules/prefer-optional-catch-binding.js +30 -24
  144. package/rules/prefer-private-class-fields.js +2 -8
  145. package/rules/prefer-promise-with-resolvers.js +248 -0
  146. package/rules/prefer-query-selector.js +110 -46
  147. package/rules/prefer-queue-microtask.js +7 -9
  148. package/rules/prefer-regexp-escape.js +263 -0
  149. package/rules/prefer-regexp-test.js +11 -16
  150. package/rules/prefer-scoped-selector.js +93 -4
  151. package/rules/prefer-set-has.js +1 -6
  152. package/rules/prefer-set-size.js +10 -2
  153. package/rules/prefer-short-arrow-method.js +3 -3
  154. package/rules/prefer-single-replace.js +218 -0
  155. package/rules/prefer-smaller-scope.js +2 -2
  156. package/rules/prefer-spread.js +15 -22
  157. package/rules/prefer-string-replace-all.js +5 -0
  158. package/rules/prefer-structured-clone.js +2 -2
  159. package/rules/prefer-switch.js +1 -0
  160. package/rules/prefer-ternary.js +4 -2
  161. package/rules/prefer-type-literal-last.js +32 -55
  162. package/rules/prefer-unary-minus.js +103 -0
  163. package/rules/prefer-url-can-parse.js +308 -0
  164. package/rules/prefer-while-loop-condition.js +252 -0
  165. package/rules/require-passive-events.js +12 -9
  166. package/rules/require-proxy-trap-boolean-return.js +40 -126
  167. package/rules/rule/to-eslint-listener.js +5 -3
  168. package/rules/shared/array-concat-in-loop.js +151 -0
  169. package/rules/shared/identifier-checks.js +4 -16
  170. package/rules/shared/iterator-helpers.js +104 -0
  171. package/rules/shared/{abbreviations.js → name-replacements.js} +57 -0
  172. package/rules/shared/no-array-mutate-rule.js +19 -2
  173. package/rules/shared/regexp-escape.js +81 -0
  174. package/rules/shared/splice-replacements.js +132 -0
  175. package/rules/string-content.js +11 -4
  176. package/rules/template-indent.js +2 -8
  177. package/rules/throw-new-error.js +7 -0
  178. package/rules/utils/block-scope.js +42 -0
  179. package/rules/utils/boolean.js +27 -11
  180. package/rules/utils/builtins.js +50 -1
  181. package/rules/utils/comments.js +16 -0
  182. package/rules/utils/comparison.js +17 -0
  183. package/rules/utils/contains-suspension-point.js +35 -0
  184. package/rules/utils/get-const-variable-initializer.js +31 -0
  185. package/rules/utils/global-reference-tracker.js +14 -1
  186. package/rules/utils/has-optional-chain-element.js +36 -4
  187. package/rules/utils/index.js +41 -3
  188. package/rules/utils/is-array.js +55 -377
  189. package/rules/utils/is-bigint.js +86 -0
  190. package/rules/utils/is-boolean.js +587 -0
  191. package/rules/utils/is-function-self-used-inside.js +1 -5
  192. package/rules/utils/is-left-hand-side.js +1 -0
  193. package/rules/utils/is-number.js +18 -2
  194. package/rules/utils/is-promise-type.js +28 -0
  195. package/rules/utils/is-same-reference.js +2 -1
  196. package/rules/utils/is-strong-precedence-node.js +32 -0
  197. package/rules/utils/is-weak-map.js +21 -0
  198. package/rules/utils/is-weak-set.js +21 -0
  199. package/rules/utils/length-or-size.js +53 -0
  200. package/rules/utils/member-expression.js +18 -0
  201. package/rules/utils/needs-semicolon.js +1 -5
  202. package/rules/utils/numeric.js +20 -0
  203. package/rules/utils/should-add-parentheses-to-logical-expression-child.js +8 -14
  204. package/rules/utils/should-add-parentheses-to-member-expression-object.js +1 -5
  205. package/rules/utils/should-add-parentheses-to-unary-expression.js +8 -2
  206. package/rules/utils/track-branch-exits.js +79 -0
  207. package/rules/utils/type-helpers.js +204 -25
  208. package/rules/utils/types.js +22 -0
@@ -0,0 +1,9 @@
1
+ const coreRuleReplacements = [
2
+ 'id-match',
3
+ 'logical-assignment-operators',
4
+ 'no-negated-condition',
5
+ 'no-nested-ternary',
6
+ 'no-process-exit',
7
+ ];
8
+
9
+ export default coreRuleReplacements;
package/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import createDeprecatedRules from './rules/utils/create-deprecated-rules.js';
2
2
  import flatConfigBase from './configs/flat-config-base.js';
3
+ import coreRuleReplacements from './configs/core-rule-replacements.js';
3
4
  import * as rawRules from './rules/index.js';
4
5
  import {toEslintRules} from './rules/rule/index.js';
5
6
  import packageJson from './package.json' with {type: 'json'};
@@ -27,6 +28,10 @@ const deprecatedRules = createDeprecatedRules({
27
28
  message: 'Replaced by `unicorn/prefer-single-call` which covers more cases.',
28
29
  replacedBy: ['unicorn/prefer-single-call'],
29
30
  },
31
+ 'prevent-abbreviations': {
32
+ message: 'Renamed to `unicorn/name-replacements`.',
33
+ replacedBy: ['unicorn/name-replacements'],
34
+ },
30
35
  'prefer-json-parse-buffer': {
31
36
  message: 'Renamed to `unicorn/consistent-json-file-read`.',
32
37
  replacedBy: ['unicorn/consistent-json-file-read'],
@@ -37,12 +42,11 @@ const deprecatedRules = createDeprecatedRules({
37
42
  },
38
43
  });
39
44
 
40
- const externalRules = {
41
- // Covered by `unicorn/no-negated-condition`
42
- 'no-negated-condition': 'off',
43
- // Covered by `unicorn/no-nested-ternary`
44
- 'no-nested-ternary': 'off',
45
- };
45
+ const getExternalRules = rules => Object.fromEntries(
46
+ coreRuleReplacements
47
+ .filter(ruleName => rules[`unicorn/${ruleName}`] === 'error')
48
+ .map(ruleName => [ruleName, 'off']),
49
+ );
46
50
 
47
51
  const recommendedRules = Object.fromEntries(Object.entries(rules).map(([id, rule]) => [
48
52
  `unicorn/${id}`,
@@ -68,7 +72,7 @@ const createConfig = (rules, flatConfigName) => ({
68
72
  unicorn,
69
73
  },
70
74
  rules: {
71
- ...externalRules,
75
+ ...getExternalRules(rules),
72
76
  ...rules,
73
77
  },
74
78
  });
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "eslint-plugin-unicorn",
3
- "version": "66.0.0",
4
- "description": "More than 200 powerful ESLint rules",
3
+ "version": "68.0.0",
4
+ "description": "More than 300 powerful ESLint rules",
5
5
  "license": "MIT",
6
- "repository": "sindresorhus/eslint-plugin-unicorn",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/sindresorhus/eslint-plugin-unicorn.git"
9
+ },
7
10
  "funding": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1",
8
11
  "author": {
9
12
  "name": "Sindre Sorhus",