eslint-plugin-unicorn 69.0.0 → 71.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 (124) hide show
  1. package/package.json +26 -25
  2. package/readme.md +15 -1
  3. package/rules/ast/call-or-new-expression.js +2 -8
  4. package/rules/ast/is-member-expression.js +2 -8
  5. package/rules/comment-content.js +4 -4
  6. package/rules/consistent-boolean-name.js +727 -42
  7. package/rules/consistent-compound-words.js +1 -2
  8. package/rules/consistent-json-file-read.js +2 -5
  9. package/rules/dom-node-dataset.js +3 -7
  10. package/rules/escape-case.js +4 -4
  11. package/rules/expiring-todo-comments.js +25 -2
  12. package/rules/explicit-length-check.js +3 -3
  13. package/rules/filename-case.js +4 -4
  14. package/rules/fix/{add-parenthesizes-to-return-or-throw-expression.js → add-parentheses-to-return-or-throw-expression.js} +1 -1
  15. package/rules/fix/index.js +1 -1
  16. package/rules/fix/remove-argument.js +34 -8
  17. package/rules/fix/remove-statement.js +1 -3
  18. package/rules/fix/switch-new-expression-to-call-expression.js +2 -2
  19. package/rules/id-match.js +2 -2
  20. package/rules/index.js +10 -0
  21. package/rules/isolated-functions.js +203 -19
  22. package/rules/name-replacements.js +1 -2
  23. package/rules/no-anonymous-default-export.js +1 -3
  24. package/rules/no-array-callback-reference.js +2 -10
  25. package/rules/no-async-promise-finally.js +111 -0
  26. package/rules/no-chained-comparison.js +1 -1
  27. package/rules/no-collection-bracket-access.js +27 -4
  28. package/rules/no-computed-property-existence-check.js +1 -4
  29. package/rules/no-declarations-before-early-exit.js +6 -5
  30. package/rules/no-error-property-assignment.js +3 -3
  31. package/rules/no-for-loop.js +4 -4
  32. package/rules/no-keyword-prefix.js +2 -2
  33. package/rules/no-manually-wrapped-comments.js +5 -1
  34. package/rules/no-mismatched-map-key.js +13 -20
  35. package/rules/no-named-default.js +2 -5
  36. package/rules/no-negated-array-predicate.js +6 -13
  37. package/rules/no-negated-comparison.js +31 -71
  38. package/rules/no-negated-condition.js +2 -2
  39. package/rules/no-negation-in-equality-check.js +4 -7
  40. package/rules/no-non-function-verb-prefix.js +25 -2
  41. package/rules/no-process-exit.js +6 -6
  42. package/rules/no-return-array-push.js +9 -2
  43. package/rules/no-static-only-class.js +2 -8
  44. package/rules/no-thenable.js +9 -15
  45. package/rules/no-typeof-undefined.js +2 -2
  46. package/rules/no-undeclared-class-members.js +1 -5
  47. package/rules/no-unnecessary-array-flat-map.js +308 -0
  48. package/rules/no-unnecessary-await.js +2 -2
  49. package/rules/no-unnecessary-fetch-options.js +624 -0
  50. package/rules/no-unnecessary-global-this.js +5 -9
  51. package/rules/no-unsafe-promise-all-settled-values.js +865 -0
  52. package/rules/no-unused-properties.js +0 -1
  53. package/rules/no-useless-coercion.js +1 -2
  54. package/rules/no-useless-else.js +32 -1
  55. package/rules/no-useless-iterator-to-array.js +42 -16
  56. package/rules/no-useless-spread.js +2 -2
  57. package/rules/no-useless-undefined.js +2 -2
  58. package/rules/prefer-abort-signal-any.js +1391 -0
  59. package/rules/prefer-array-find.js +2 -5
  60. package/rules/prefer-array-flat-map.js +6 -11
  61. package/rules/prefer-array-from-range.js +98 -0
  62. package/rules/prefer-bigint-literals.js +1 -0
  63. package/rules/prefer-block-statement-over-iife.js +159 -0
  64. package/rules/prefer-boolean-return.js +20 -3
  65. package/rules/prefer-continue.js +6 -2
  66. package/rules/prefer-default-parameters.js +2 -2
  67. package/rules/prefer-early-return.js +3 -1
  68. package/rules/prefer-else-if.js +5 -9
  69. package/rules/prefer-group-by.js +576 -0
  70. package/rules/prefer-has-check.js +6 -3
  71. package/rules/prefer-https.js +3 -3
  72. package/rules/prefer-identifier-import-export-specifiers.js +1 -3
  73. package/rules/prefer-iterator-helpers.js +196 -0
  74. package/rules/prefer-minimal-ternary.js +4 -4
  75. package/rules/prefer-number-coercion.js +1 -1
  76. package/rules/prefer-object-define-properties.js +1 -3
  77. package/rules/prefer-object-iterable-methods.js +57 -14
  78. package/rules/prefer-observer-apis.js +2 -5
  79. package/rules/prefer-private-class-fields.js +1 -3
  80. package/rules/prefer-simple-sort-comparator.js +6 -6
  81. package/rules/prefer-simplified-conditions.js +584 -0
  82. package/rules/prefer-single-object-destructuring.js +2 -5
  83. package/rules/prefer-single-replace.js +2 -2
  84. package/rules/prefer-spread.js +25 -32
  85. package/rules/prefer-string-pad-start-end.js +1 -6
  86. package/rules/prefer-string-raw.js +2 -2
  87. package/rules/prefer-string-repeat.js +16 -9
  88. package/rules/prefer-string-replace-all.js +1 -1
  89. package/rules/prefer-ternary.js +5 -5
  90. package/rules/prefer-toggle-attribute.js +3 -3
  91. package/rules/prefer-top-level-await.js +6 -1
  92. package/rules/prefer-uint8array-base64.js +3 -1
  93. package/rules/require-proxy-trap-boolean-return.js +2 -2
  94. package/rules/rule/to-eslint-create.js +1 -2
  95. package/rules/rule/to-eslint-listener.js +1 -3
  96. package/rules/rule/to-eslint-problem.js +1 -3
  97. package/rules/rule/to-eslint-rule-fixer.js +1 -3
  98. package/rules/rule/to-eslint-rule.js +1 -3
  99. package/rules/rule/to-eslint-rules.js +1 -3
  100. package/rules/rule/unicorn-context.js +1 -3
  101. package/rules/rule/unicorn-listeners.js +1 -3
  102. package/rules/shared/array-range.js +66 -0
  103. package/rules/shared/iterator-helpers.js +43 -1
  104. package/rules/shared/no-array-mutate-rule.js +1 -3
  105. package/rules/shared/regexp-escape.js +4 -4
  106. package/rules/utils/can-tokens-be-adjacent.js +95 -0
  107. package/rules/utils/comparison.js +65 -0
  108. package/rules/utils/escape-string.js +2 -8
  109. package/rules/utils/get-available-variable-name.js +2 -13
  110. package/rules/utils/get-precedence.js +112 -0
  111. package/rules/utils/get-token-store.js +1 -3
  112. package/rules/utils/global-reference-tracker.js +3 -6
  113. package/rules/utils/index.js +4 -0
  114. package/rules/utils/is-boolean.js +103 -30
  115. package/rules/utils/is-identifier-name.js +5 -0
  116. package/rules/utils/is-promise-type.js +1 -3
  117. package/rules/utils/is-react-hook-name.js +5 -0
  118. package/rules/utils/parentheses/get-parent-syntax-opening-parenthesis.js +1 -3
  119. package/rules/utils/parentheses/iterate-surrounding-parentheses.js +1 -1
  120. package/rules/utils/should-add-parentheses-to-await-expression-argument.js +4 -9
  121. package/rules/utils/should-add-parentheses-to-call-expression-callee.js +6 -12
  122. package/rules/utils/should-add-parentheses-to-unary-expression.js +7 -14
  123. package/rules/utils/to-location.js +1 -3
  124. package/rules/utils/track-branch-exits.js +8 -7
@@ -1,10 +1,10 @@
1
- import helperValidatorIdentifier from '@babel/helper-validator-identifier';
2
1
  import {
3
2
  getAvailableVariableName,
4
3
  getScopes,
5
4
  isShorthandPropertyValue,
6
5
  lowerFirst,
7
6
  upperFirst,
7
+ isIdentifierName,
8
8
  } from './utils/index.js';
9
9
  import {
10
10
  isClassVariable,
@@ -17,7 +17,6 @@ import {renameVariable} from './fix/index.js';
17
17
 
18
18
  const MESSAGE_ID_ERROR = 'consistent-compound-words/error';
19
19
  const MESSAGE_ID_RENAME = 'consistent-compound-words/rename';
20
- const {isIdentifierName} = helperValidatorIdentifier;
21
20
 
22
21
  const messages = {
23
22
  [MESSAGE_ID_ERROR]: 'Prefer `{{replacement}}` over `{{name}}`.',
@@ -113,15 +113,12 @@ function isBufferEncoding(node, scope) {
113
113
 
114
114
  function isJsonReadFileCall(node, scope) {
115
115
  if (
116
- !(
117
- node
116
+ !(node
118
117
  && node.type === 'CallExpression'
119
118
  && !node.optional
120
119
  && (node.arguments.length === 1 || node.arguments.length === 2)
121
120
  && node.arguments.every(node => node.type !== 'SpreadElement')
122
- && node.callee.type === 'MemberExpression'
123
- && !node.callee.optional
124
- )
121
+ && node.callee.type === 'MemberExpression') || node.callee.optional
125
122
  ) {
126
123
  return false;
127
124
  }
@@ -1,4 +1,3 @@
1
- import helperValidatorIdentifier from '@babel/helper-validator-identifier';
2
1
  import {findVariable} from '@eslint-community/eslint-utils';
3
2
  import {
4
3
  escapeString,
@@ -12,6 +11,7 @@ import {
12
11
  needsSemicolon,
13
12
  shouldAddParenthesesToMemberExpressionObject,
14
13
  wouldRemoveComments,
14
+ isIdentifierName,
15
15
  } from './utils/index.js';
16
16
  import {removeStatement} from './fix/index.js';
17
17
  import {
@@ -21,7 +21,6 @@ import {
21
21
  isExpressionStatement,
22
22
  } from './ast/index.js';
23
23
 
24
- const {isIdentifierName} = helperValidatorIdentifier;
25
24
  const MESSAGE_ID = 'prefer-dataset';
26
25
  const INVERSE_MESSAGE_ID = 'prefer-attributes';
27
26
  const messages = {
@@ -106,11 +105,8 @@ function getDatasetVariableReadMembers(variable) {
106
105
 
107
106
  const {identifier} = reference;
108
107
  const member = identifier.parent;
109
- if (!(
110
- member.type === 'MemberExpression'
111
- && member.object === identifier
112
- && !member.optional
113
- )) {
108
+ if (!(member.type === 'MemberExpression'
109
+ && member.object === identifier) || member.optional) {
114
110
  return;
115
111
  }
116
112
 
@@ -24,14 +24,14 @@ const getProblem = ({node, original, regex = escapeCase, lowercase, fix}) => {
24
24
 
25
25
  /** @param {import('eslint').Rule.RuleContext} context */
26
26
  const create = context => {
27
- const lowercase = context.options[0] === 'lowercase';
27
+ const isLowercase = context.options[0] === 'lowercase';
28
28
 
29
29
  context.on('Literal', node => {
30
30
  if (isStringLiteral(node)) {
31
31
  return getProblem({
32
32
  node,
33
33
  original: node.raw,
34
- lowercase,
34
+ lowercase: isLowercase,
35
35
  });
36
36
  }
37
37
  });
@@ -42,7 +42,7 @@ const create = context => {
42
42
  node,
43
43
  original: node.raw,
44
44
  regex: escapePatternCase,
45
- lowercase,
45
+ lowercase: isLowercase,
46
46
  });
47
47
  }
48
48
  });
@@ -55,7 +55,7 @@ const create = context => {
55
55
  return getProblem({
56
56
  node,
57
57
  original: node.value.raw,
58
- lowercase,
58
+ lowercase: isLowercase,
59
59
  fix: (fixer, fixed) => replaceTemplateElement(node, fixed, context, fixer),
60
60
  });
61
61
  });
@@ -23,6 +23,7 @@ const MESSAGE_ID_HAVE_PACKAGE = 'unicorn/havePackage';
23
23
  const MESSAGE_ID_DONT_HAVE_PACKAGE = 'unicorn/dontHavePackage';
24
24
  const MESSAGE_ID_VERSION_MATCHES = 'unicorn/versionMatches';
25
25
  const MESSAGE_ID_PEER_VERSION_MATCHES = 'unicorn/peerVersionMatches';
26
+ const MESSAGE_ID_UNSUPPORTED_CATALOG_PROTOCOL = 'unicorn/unsupportedCatalogProtocol';
26
27
  const MESSAGE_ID_ENGINE_MATCHES = 'unicorn/engineMatches';
27
28
  const MESSAGE_ID_REMOVE_WHITESPACE = 'unicorn/removeWhitespaces';
28
29
  const MESSAGE_ID_MISSING_AT_SYMBOL = 'unicorn/missingAtSymbol';
@@ -46,6 +47,8 @@ const messages = {
46
47
  'Due since package version matched: {{comparison}}. {{message}}',
47
48
  [MESSAGE_ID_PEER_VERSION_MATCHES]:
48
49
  'Due since peer dependency version matched: {{comparison}}. {{message}}',
50
+ [MESSAGE_ID_UNSUPPORTED_CATALOG_PROTOCOL]:
51
+ 'Cannot check {{dependencyType}} version because {{package}} uses the unsupported `catalog:` protocol. {{message}}',
49
52
  [MESSAGE_ID_ENGINE_MATCHES]:
50
53
  'Due since Node.js version matched: {{comparison}}. {{message}}',
51
54
  [MESSAGE_ID_REMOVE_WHITESPACE]:
@@ -188,8 +191,8 @@ function getPackageHelpers(dirname) {
188
191
 
189
192
  // Check if have to skip colon
190
193
  // @example "TODO [...]: message here"
191
- const dropColon = afterArguments[0] === ':';
192
- if (dropColon) {
194
+ const isDropColon = afterArguments[0] === ':';
195
+ if (isDropColon) {
193
196
  return afterArguments.slice(1).trim();
194
197
  }
195
198
 
@@ -284,6 +287,10 @@ function getRangeFloor(range) {
284
287
  return semver.validRange(range) ? semver.minVersion(range) : undefined;
285
288
  }
286
289
 
290
+ function isCatalogProtocol(rawVersion) {
291
+ return typeof rawVersion === 'string' && rawVersion.startsWith('catalog:');
292
+ }
293
+
287
294
  const DEFAULT_OPTIONS = {
288
295
  terms: ['todo', 'fixme', 'xxx'],
289
296
  ignore: [],
@@ -480,6 +487,14 @@ const create = context => {
480
487
  continue;
481
488
  }
482
489
 
490
+ if (isCatalogProtocol(targetPackageRawVersion)) {
491
+ report(MESSAGE_ID_UNSUPPORTED_CATALOG_PROTOCOL, {
492
+ dependencyType: 'dependency',
493
+ package: dependency.name,
494
+ });
495
+ continue;
496
+ }
497
+
483
498
  const targetPackageVersion = tryToCoerceVersion(targetPackageRawVersion);
484
499
 
485
500
  /* c8 ignore start */
@@ -505,6 +520,14 @@ const create = context => {
505
520
  continue;
506
521
  }
507
522
 
523
+ if (isCatalogProtocol(targetPeerRawVersion)) {
524
+ report(MESSAGE_ID_UNSUPPORTED_CATALOG_PROTOCOL, {
525
+ dependencyType: 'peer dependency',
526
+ package: peerDependency.name,
527
+ });
528
+ continue;
529
+ }
530
+
508
531
  const targetPeerVersion = getRangeFloor(targetPeerRawVersion);
509
532
 
510
533
  if (targetPeerVersion && satisfiesRange(targetPeerVersion, peerDependency.condition, peerDependency.version)) {
@@ -250,7 +250,7 @@ function create(context) {
250
250
  }
251
251
 
252
252
  let node;
253
- let autoFix = true;
253
+ let isAutoFix = true;
254
254
  let {isZeroLengthCheck, node: lengthCheckNode} = getLengthCheckNode(lengthNode);
255
255
  if (lengthCheckNode) {
256
256
  const {isNegative, node: ancestor} = getBooleanAncestor(lengthCheckNode, context);
@@ -266,7 +266,7 @@ function create(context) {
266
266
  } else if (isLogicalExpression(lengthNode.parent) && lengthNode.parent.operator === '&&') {
267
267
  isZeroLengthCheck = isNegative;
268
268
  node = lengthNode;
269
- autoFix = false;
269
+ isAutoFix = false;
270
270
  }
271
271
  }
272
272
 
@@ -287,7 +287,7 @@ function create(context) {
287
287
  node,
288
288
  isZeroLengthCheck,
289
289
  lengthNode,
290
- autoFix: autoFix && !isUnsafeNegationInBinaryExpression,
290
+ autoFix: isAutoFix && !isUnsafeNegationInBinaryExpression,
291
291
  shouldSuggest: !isUnsafeNegationInBinaryExpression,
292
292
  });
293
293
  }
@@ -280,8 +280,8 @@ const create = context => {
280
280
 
281
281
  return new RegExp(item, 'u');
282
282
  });
283
- const multipleFileExtensions = options.multipleFileExtensions !== false;
284
- const checkDirectories = options.checkDirectories !== false;
283
+ const isMultipleFileExtensions = options.multipleFileExtensions !== false;
284
+ const isCheckDirectories = options.checkDirectories !== false;
285
285
  const chosenCasesFunctions = chosenCases.map(case_ => cases[case_].fn);
286
286
 
287
287
  onRoot(context, () => {
@@ -292,13 +292,13 @@ const create = context => {
292
292
  filename,
293
293
  middle,
294
294
  extension,
295
- } = getFilenameParts(basenameWithExtension, {multipleFileExtensions});
295
+ } = getFilenameParts(basenameWithExtension, {multipleFileExtensions: isMultipleFileExtensions});
296
296
 
297
297
  if (pathSegments.some(segment => ignore.some(regexp => regexp.test(segment)))) {
298
298
  return;
299
299
  }
300
300
 
301
- if (checkDirectories) {
301
+ if (isCheckDirectories) {
302
302
  for (const directory of pathSegments.slice(0, -1)) {
303
303
  const report = getInvalidDirectoryReport(directory, chosenCases, chosenCasesFunctions);
304
304
 
@@ -11,7 +11,7 @@ import {isSemicolonToken} from '@eslint-community/eslint-utils';
11
11
  @param {ESLint.Rule.RuleContext} context - The ESLint rule context object.
12
12
  @returns {ESLint.Rule.ReportFixer}
13
13
  */
14
- export default function * addParenthesizesToReturnOrThrowExpression(fixer, node, context) {
14
+ export default function * addParenthesesToReturnOrThrowExpression(fixer, node, context) {
15
15
  if (node.type !== 'ReturnStatement' && node.type !== 'ThrowStatement') {
16
16
  return;
17
17
  }
@@ -21,4 +21,4 @@ export {default as replaceReferenceIdentifier} from './replace-reference-identif
21
21
  export {default as replaceNodeOrTokenAndSpacesBefore} from './replace-node-or-token-and-spaces-before.js';
22
22
  export {default as fixSpaceAroundKeyword} from './fix-space-around-keywords.js';
23
23
  export {default as replaceStringRaw} from './replace-string-raw.js';
24
- export {default as addParenthesizesToReturnOrThrowExpression} from './add-parenthesizes-to-return-or-throw-expression.js';
24
+ export {default as addParenthesesToReturnOrThrowExpression} from './add-parentheses-to-return-or-throw-expression.js';
@@ -1,5 +1,5 @@
1
1
  import {isCommaToken} from '@eslint-community/eslint-utils';
2
- import {getParentheses} from '../utils/index.js';
2
+ import {getParentheses, hasCommentInRange} from '../utils/index.js';
3
3
 
4
4
  /**
5
5
  @import {TSESTree as ESTree} from '@typescript-eslint/types';
@@ -22,17 +22,22 @@ function getArgumentRemovalRange(node, context) {
22
22
  let [start] = sourceCode.getRange(firstToken);
23
23
  let [, end] = sourceCode.getRange(lastToken);
24
24
 
25
- if (index !== 0) {
26
- const commaToken = sourceCode.getTokenBefore(firstToken);
27
- [start] = sourceCode.getRange(commaToken);
28
- }
29
-
30
- // If the removed argument is the only argument, the trailing comma must be removed too
31
25
  if (callOrNewExpression.arguments.length === 1) {
26
+ // The only argument: also drop a dangling trailing comma if present (`fn(a,)`).
32
27
  const tokenAfter = sourceCode.getTokenAfter(lastToken);
33
28
  if (isCommaToken(tokenAfter)) {
34
29
  [, end] = sourceCode.getRange(tokenAfter);
35
30
  }
31
+ } else if (index === 0) {
32
+ // First of several: remove it through the following comma and the gap after it, so
33
+ // `fn(a, b)` becomes `fn(b)` rather than `fn( b)`.
34
+ const commaToken = sourceCode.getTokenAfter(lastToken);
35
+ const tokenAfterComma = sourceCode.getTokenAfter(commaToken, {includeComments: true});
36
+ [end] = sourceCode.getRange(tokenAfterComma);
37
+ } else {
38
+ // Otherwise remove the comma that precedes it.
39
+ const commaToken = sourceCode.getTokenBefore(firstToken);
40
+ [start] = sourceCode.getRange(commaToken);
36
41
  }
37
42
 
38
43
  return [start, end];
@@ -45,7 +50,28 @@ function getArgumentRemovalRange(node, context) {
45
50
  @returns {ESLint.Rule.Fix}
46
51
  */
47
52
  export default function removeArgument(fixer, node, context) {
48
- return fixer.removeRange(getArgumentRemovalRange(node, context));
53
+ const removalRange = getArgumentRemovalRange(node, context);
54
+ const callOrNewExpression = node.parent;
55
+ const index = callOrNewExpression.arguments.indexOf(node);
56
+
57
+ if (
58
+ index === 0
59
+ && callOrNewExpression.arguments.length > 1
60
+ && hasCommentInRange(context, removalRange)
61
+ ) {
62
+ const {sourceCode} = context;
63
+ const parentheses = getParentheses(node, context);
64
+ const lastToken = parentheses.at(-1) || node;
65
+ const [, argumentEnd] = sourceCode.getRange(lastToken);
66
+ const commaToken = sourceCode.getTokenAfter(lastToken);
67
+ const [commaStart, commaEnd] = sourceCode.getRange(commaToken);
68
+ const rangeText = sourceCode.text.slice(...removalRange);
69
+ const replacement = rangeText.slice(argumentEnd - removalRange[0], commaStart - removalRange[0]) + rangeText.slice(commaEnd - removalRange[0]);
70
+
71
+ return fixer.replaceTextRange(removalRange, replacement);
72
+ }
73
+
74
+ return fixer.removeRange(removalRange);
49
75
  }
50
76
 
51
77
  export {
@@ -3,7 +3,7 @@ import {isSemicolonToken} from '@eslint-community/eslint-utils';
3
3
  const isWhitespaceOnly = text => /^\s*$/.test(text);
4
4
 
5
5
  // Removes a statement node along with its surrounding whitespace, while preserving comments.
6
- function removeStatement(statement, context, fixer, preserveSemiColon = false) {
6
+ export default function removeStatement(statement, context, fixer, preserveSemiColon = false) {
7
7
  const {sourceCode} = context;
8
8
  const {lines} = sourceCode;
9
9
  let endToken = statement;
@@ -44,5 +44,3 @@ function removeStatement(statement, context, fixer, preserveSemiColon = false) {
44
44
 
45
45
  return fixer.removeRange([start, end]);
46
46
  }
47
-
48
- export default removeStatement;
@@ -3,7 +3,7 @@ import {
3
3
  isParenthesized,
4
4
  isOnSameLine,
5
5
  } from '../utils/index.js';
6
- import addParenthesizesToReturnOrThrowExpression from './add-parenthesizes-to-return-or-throw-expression.js';
6
+ import addParenthesesToReturnOrThrowExpression from './add-parentheses-to-return-or-throw-expression.js';
7
7
  import removeSpaceAfter from './remove-spaces-after.js';
8
8
 
9
9
  /**
@@ -39,6 +39,6 @@ export default function * switchNewExpressionToCallExpression(newExpression, con
39
39
  if (!isOnSameLine(newToken, newExpression.callee, context) && !isParenthesized(newExpression, context)) {
40
40
  // Ideally, we should use first parenthesis of the `callee`, and should check spaces after the `new` token
41
41
  // But adding extra parentheses is harmless, no need to be too complicated
42
- yield addParenthesizesToReturnOrThrowExpression(fixer, newExpression.parent, context);
42
+ yield addParenthesesToReturnOrThrowExpression(fixer, newExpression.parent, context);
43
43
  }
44
44
  }
package/rules/id-match.js CHANGED
@@ -26,11 +26,11 @@ const shouldIgnoreNamedSpecifierReport = (problem, checkNamedSpecifiers) =>
26
26
  @param {import('eslint').Rule.RuleContext} context
27
27
  */
28
28
  const create = context => {
29
- const checkNamedSpecifiers = context.options[1]?.checkNamedSpecifiers !== false;
29
+ const isCheckNamedSpecifiers = context.options[1]?.checkNamedSpecifiers !== false;
30
30
  const fakeContext = Object.create(context, {
31
31
  report: {
32
32
  value(problem) {
33
- if (shouldIgnoreNamedSpecifierReport(problem, checkNamedSpecifiers)) {
33
+ if (shouldIgnoreNamedSpecifierReport(problem, isCheckNamedSpecifiers)) {
34
34
  return;
35
35
  }
36
36
 
package/rules/index.js CHANGED
@@ -53,6 +53,7 @@ export {default as 'no-array-sort-for-min-max'} from './no-array-sort-for-min-ma
53
53
  export {default as 'no-array-sort'} from './no-array-sort.js';
54
54
  export {default as 'no-array-splice'} from './no-array-splice.js';
55
55
  export {default as 'no-asterisk-prefix-in-documentation-comments'} from './no-asterisk-prefix-in-documentation-comments.js';
56
+ export {default as 'no-async-promise-finally'} from './no-async-promise-finally.js';
56
57
  export {default as 'no-await-expression-member'} from './no-await-expression-member.js';
57
58
  export {default as 'no-await-in-promise-methods'} from './no-await-in-promise-methods.js';
58
59
  export {default as 'no-blob-to-file'} from './no-blob-to-file.js';
@@ -129,9 +130,11 @@ export {default as 'no-typeof-undefined'} from './no-typeof-undefined.js';
129
130
  export {default as 'no-uncalled-method'} from './no-uncalled-method.js';
130
131
  export {default as 'no-undeclared-class-members'} from './no-undeclared-class-members.js';
131
132
  export {default as 'no-unnecessary-array-flat-depth'} from './no-unnecessary-array-flat-depth.js';
133
+ export {default as 'no-unnecessary-array-flat-map'} from './no-unnecessary-array-flat-map.js';
132
134
  export {default as 'no-unnecessary-array-splice-count'} from './no-unnecessary-array-splice-count.js';
133
135
  export {default as 'no-unnecessary-await'} from './no-unnecessary-await.js';
134
136
  export {default as 'no-unnecessary-boolean-comparison'} from './no-unnecessary-boolean-comparison.js';
137
+ export {default as 'no-unnecessary-fetch-options'} from './no-unnecessary-fetch-options.js';
135
138
  export {default as 'no-unnecessary-global-this'} from './no-unnecessary-global-this.js';
136
139
  export {default as 'no-unnecessary-nested-ternary'} from './no-unnecessary-nested-ternary.js';
137
140
  export {default as 'no-unnecessary-polyfills'} from './no-unnecessary-polyfills.js';
@@ -144,6 +147,7 @@ export {default as 'no-unreadable-new-expression'} from './no-unreadable-new-exp
144
147
  export {default as 'no-unreadable-object-destructuring'} from './no-unreadable-object-destructuring.js';
145
148
  export {default as 'no-unsafe-buffer-conversion'} from './no-unsafe-buffer-conversion.js';
146
149
  export {default as 'no-unsafe-dom-html'} from './no-unsafe-dom-html.js';
150
+ export {default as 'no-unsafe-promise-all-settled-values'} from './no-unsafe-promise-all-settled-values.js';
147
151
  export {default as 'no-unsafe-property-key'} from './no-unsafe-property-key.js';
148
152
  export {default as 'no-unsafe-string-replacement'} from './no-unsafe-string-replacement.js';
149
153
  export {default as 'no-unused-array-method-return'} from './no-unused-array-method-return.js';
@@ -173,6 +177,7 @@ export {default as 'no-zero-fractions'} from './no-zero-fractions.js';
173
177
  export {default as 'number-literal-case'} from './number-literal-case.js';
174
178
  export {default as 'numeric-separators-style'} from './numeric-separators-style.js';
175
179
  export {default as 'operator-assignment'} from './operator-assignment.js';
180
+ export {default as 'prefer-abort-signal-any'} from './prefer-abort-signal-any.js';
176
181
  export {default as 'prefer-abort-signal-timeout'} from './prefer-abort-signal-timeout.js';
177
182
  export {default as 'prefer-add-event-listener-options'} from './prefer-add-event-listener-options.js';
178
183
  export {default as 'prefer-add-event-listener'} from './prefer-add-event-listener.js';
@@ -182,6 +187,7 @@ export {default as 'prefer-array-flat-map'} from './prefer-array-flat-map.js';
182
187
  export {default as 'prefer-array-flat'} from './prefer-array-flat.js';
183
188
  export {default as 'prefer-array-from-async'} from './prefer-array-from-async.js';
184
189
  export {default as 'prefer-array-from-map'} from './prefer-array-from-map.js';
190
+ export {default as 'prefer-array-from-range'} from './prefer-array-from-range.js';
185
191
  export {default as 'prefer-array-index-of'} from './prefer-array-index-of.js';
186
192
  export {default as 'prefer-array-iterable-methods'} from './prefer-array-iterable-methods.js';
187
193
  export {default as 'prefer-array-last-methods'} from './prefer-array-last-methods.js';
@@ -191,6 +197,7 @@ export {default as 'prefer-at'} from './prefer-at.js';
191
197
  export {default as 'prefer-await'} from './prefer-await.js';
192
198
  export {default as 'prefer-bigint-literals'} from './prefer-bigint-literals.js';
193
199
  export {default as 'prefer-blob-reading-methods'} from './prefer-blob-reading-methods.js';
200
+ export {default as 'prefer-block-statement-over-iife'} from './prefer-block-statement-over-iife.js';
194
201
  export {default as 'prefer-boolean-return'} from './prefer-boolean-return.js';
195
202
  export {default as 'prefer-class-fields'} from './prefer-class-fields.js';
196
203
  export {default as 'prefer-classlist-toggle'} from './prefer-classlist-toggle.js';
@@ -214,6 +221,7 @@ export {default as 'prefer-flat-math-min-max'} from './prefer-flat-math-min-max.
214
221
  export {default as 'prefer-get-or-insert-computed'} from './prefer-get-or-insert-computed.js';
215
222
  export {default as 'prefer-global-number-constants'} from './prefer-global-number-constants.js';
216
223
  export {default as 'prefer-global-this'} from './prefer-global-this.js';
224
+ export {default as 'prefer-group-by'} from './prefer-group-by.js';
217
225
  export {default as 'prefer-has-check'} from './prefer-has-check.js';
218
226
  export {default as 'prefer-hoisting-branch-code'} from './prefer-hoisting-branch-code.js';
219
227
  export {default as 'prefer-https'} from './prefer-https.js';
@@ -223,6 +231,7 @@ export {default as 'prefer-includes-over-repeated-comparisons'} from './prefer-i
223
231
  export {default as 'prefer-includes'} from './prefer-includes.js';
224
232
  export {default as 'prefer-iterable-in-constructor'} from './prefer-iterable-in-constructor.js';
225
233
  export {default as 'prefer-iterator-concat'} from './prefer-iterator-concat.js';
234
+ export {default as 'prefer-iterator-helpers'} from './prefer-iterator-helpers.js';
226
235
  export {default as 'prefer-iterator-to-array-at-end'} from './prefer-iterator-to-array-at-end.js';
227
236
  export {default as 'prefer-iterator-to-array'} from './prefer-iterator-to-array.js';
228
237
  export {default as 'prefer-keyboard-event-key'} from './prefer-keyboard-event-key.js';
@@ -267,6 +276,7 @@ export {default as 'prefer-set-size'} from './prefer-set-size.js';
267
276
  export {default as 'prefer-short-arrow-method'} from './prefer-short-arrow-method.js';
268
277
  export {default as 'prefer-simple-condition-first'} from './prefer-simple-condition-first.js';
269
278
  export {default as 'prefer-simple-sort-comparator'} from './prefer-simple-sort-comparator.js';
279
+ export {default as 'prefer-simplified-conditions'} from './prefer-simplified-conditions.js';
270
280
  export {default as 'prefer-single-array-predicate'} from './prefer-single-array-predicate.js';
271
281
  export {default as 'prefer-single-call'} from './prefer-single-call.js';
272
282
  export {default as 'prefer-single-object-destructuring'} from './prefer-single-object-destructuring.js';