@typescript-eslint/eslint-plugin 8.70.1-alpha.13 → 8.70.1-alpha.15

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.
@@ -77,7 +77,18 @@ exports.default = (0, util_1.createRule)({
77
77
  messageId: 'removeAwait',
78
78
  fix(fixer) {
79
79
  const awaitKeyword = (0, util_1.nullThrows)(context.sourceCode.getFirstToken(node, util_1.isAwaitKeyword), util_1.NullThrowsReasons.MissingToken('await', 'await expression'));
80
- return fixer.remove(awaitKeyword);
80
+ const awaitTokenRemovalRange = (0, util_1.getAwaitTokenRemovalRange)(context.sourceCode, awaitKeyword);
81
+ const awaitRemovalFix = fixer.removeRange(awaitTokenRemovalRange);
82
+ const firstOperandToken = (0, util_1.nullThrows)(context.sourceCode.getTokenAfter(awaitKeyword), util_1.NullThrowsReasons.MissingToken('operand', 'await expression'));
83
+ if ((0, util_1.isStartOfArrowFunctionBodyNeedingParentheses)(node, firstOperandToken, context.sourceCode) ||
84
+ (0, util_1.isStartOfExpressionStatementNeedingParentheses)(node, firstOperandToken)) {
85
+ return [
86
+ awaitRemovalFix,
87
+ fixer.insertTextBefore(awaitArgumentEsNode, '('),
88
+ fixer.insertTextAfter(awaitArgumentEsNode, ')'),
89
+ ];
90
+ }
91
+ return awaitRemovalFix;
81
92
  },
82
93
  },
83
94
  ],
@@ -135,7 +146,7 @@ exports.default = (0, util_1.createRule)({
135
146
  messageId: 'convertToOrdinaryFor',
136
147
  fix(fixer) {
137
148
  const awaitToken = (0, util_1.nullThrows)(context.sourceCode.getFirstToken(node, util_1.isAwaitKeyword), util_1.NullThrowsReasons.MissingToken('await', 'for await loop'));
138
- return fixer.remove(awaitToken);
149
+ return fixer.removeRange((0, util_1.getAwaitTokenRemovalRange)(context.sourceCode, awaitToken));
139
150
  },
140
151
  },
141
152
  ],
@@ -168,7 +179,7 @@ exports.default = (0, util_1.createRule)({
168
179
  messageId: 'removeAwait',
169
180
  fix(fixer) {
170
181
  const awaitToken = (0, util_1.nullThrows)(context.sourceCode.getFirstToken(node, util_1.isAwaitKeyword), util_1.NullThrowsReasons.MissingToken('await', 'await using'));
171
- return fixer.remove(awaitToken);
182
+ return fixer.removeRange((0, util_1.getAwaitTokenRemovalRange)(context.sourceCode, awaitToken));
172
183
  },
173
184
  },
174
185
  }),
@@ -587,11 +587,8 @@ exports.default = (0, util_1.createRule)({
587
587
  // is parsed as a block body. In those positions the operand must be
588
588
  // wrapped in parentheses to stay an expression.
589
589
  const firstOperandToken = (0, util_1.nullThrows)(context.sourceCode.getTokenAfter(closingAngleBracket), util_1.NullThrowsReasons.MissingToken('operand', 'type assertion'));
590
- const breaksExpressionStatement = ['{', 'function', 'class'].includes(firstOperandToken.value) &&
591
- (0, util_1.isStartOfExpressionStatement)(node);
592
- const breaksArrowFunctionBody = firstOperandToken.value === '{' &&
593
- (0, util_1.isStartOfArrowFunctionBody)(node, context.sourceCode);
594
- const needsParens = breaksExpressionStatement || breaksArrowFunctionBody;
590
+ const needsParens = (0, util_1.isStartOfExpressionStatementNeedingParentheses)(node, firstOperandToken) ||
591
+ (0, util_1.isStartOfArrowFunctionBodyNeedingParentheses)(node, firstOperandToken, context.sourceCode);
595
592
  const fixes = [];
596
593
  if (needsParens) {
597
594
  fixes.push(fixer.insertTextBefore(node, '('));
@@ -211,20 +211,10 @@ exports.default = (0, util_1.createRule)({
211
211
  /* istanbul ignore if */ if (!awaitToken) {
212
212
  return null;
213
213
  }
214
- const startAt = awaitToken.range[0];
215
- let endAt = awaitToken.range[1];
216
- // Also remove any extraneous whitespace after `await`, if there is any.
217
- const nextToken = context.sourceCode.getTokenAfter(awaitToken, {
218
- includeComments: true,
219
- });
220
- if (nextToken) {
221
- endAt = nextToken.range[0];
222
- }
223
- const awaitRemovalFix = fixer.removeRange([startAt, endAt]);
214
+ const awaitTokenRemovalRange = (0, util_1.getAwaitTokenRemovalRange)(context.sourceCode, awaitToken);
215
+ const awaitRemovalFix = fixer.removeRange(awaitTokenRemovalRange);
224
216
  const firstOperandToken = (0, util_1.nullThrows)(context.sourceCode.getTokenAfter(awaitToken), util_1.NullThrowsReasons.MissingToken('operand', 'await expression'));
225
- const shouldWrapInParentheses = (0, util_1.isOpeningBraceToken)(firstOperandToken) &&
226
- (0, util_1.isStartOfArrowFunctionBody)(node, context.sourceCode);
227
- if (shouldWrapInParentheses) {
217
+ if ((0, util_1.isStartOfArrowFunctionBodyNeedingParentheses)(node, firstOperandToken, context.sourceCode)) {
228
218
  return [
229
219
  awaitRemovalFix,
230
220
  fixer.insertTextBefore(node.argument, '('),
@@ -0,0 +1,4 @@
1
+ import type { TSESLint, TSESTree } from '@typescript-eslint/utils';
2
+ export declare function getAwaitTokenRemovalRange(sourceCode: TSESLint.SourceCode, awaitToken: TSESTree.IdentifierToken & {
3
+ value: 'await';
4
+ }): TSESTree.Range;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAwaitTokenRemovalRange = getAwaitTokenRemovalRange;
4
+ function getAwaitTokenRemovalRange(sourceCode, awaitToken) {
5
+ const startAt = awaitToken.range[0];
6
+ let endAt = awaitToken.range[1];
7
+ const nextToken = sourceCode.getTokenAfter(awaitToken, {
8
+ includeComments: true,
9
+ });
10
+ /* istanbul ignore else */ if (nextToken) {
11
+ endAt = nextToken.range[0];
12
+ }
13
+ return [startAt, endAt];
14
+ }
15
+ //# sourceMappingURL=getAwaitTokenRemovalRange.js.map
@@ -4,6 +4,7 @@ export * from './baseTypeUtils';
4
4
  export * from './collectUnusedVariables';
5
5
  export * from './createRule';
6
6
  export * from './FunctionSignature';
7
+ export * from './getAwaitTokenRemovalRange';
7
8
  export * from './getBaseTypesOfClassMember';
8
9
  export * from './getFixOrSuggest';
9
10
  export * from './getFunctionHeadLoc';
@@ -19,8 +20,9 @@ export * from './isAssignee';
19
20
  export * from './isConditionalTest';
20
21
  export * from './isNodeEqual';
21
22
  export * from './isNullLiteral';
22
- export * from './isStartOfArrowFunctionBody';
23
+ export * from './isStartOfArrowFunctionBodyNeedingParentheses';
23
24
  export * from './isStartOfExpressionStatement';
25
+ export * from './isStartOfExpressionStatementNeedingParentheses';
24
26
  export * from './isUndefinedIdentifier';
25
27
  export * from './misc';
26
28
  export * from './needsPrecedingSemiColon';
@@ -21,6 +21,7 @@ __exportStar(require("./baseTypeUtils"), exports);
21
21
  __exportStar(require("./collectUnusedVariables"), exports);
22
22
  __exportStar(require("./createRule"), exports);
23
23
  __exportStar(require("./FunctionSignature"), exports);
24
+ __exportStar(require("./getAwaitTokenRemovalRange"), exports);
24
25
  __exportStar(require("./getBaseTypesOfClassMember"), exports);
25
26
  __exportStar(require("./getFixOrSuggest"), exports);
26
27
  __exportStar(require("./getFunctionHeadLoc"), exports);
@@ -36,8 +37,9 @@ __exportStar(require("./isAssignee"), exports);
36
37
  __exportStar(require("./isConditionalTest"), exports);
37
38
  __exportStar(require("./isNodeEqual"), exports);
38
39
  __exportStar(require("./isNullLiteral"), exports);
39
- __exportStar(require("./isStartOfArrowFunctionBody"), exports);
40
+ __exportStar(require("./isStartOfArrowFunctionBodyNeedingParentheses"), exports);
40
41
  __exportStar(require("./isStartOfExpressionStatement"), exports);
42
+ __exportStar(require("./isStartOfExpressionStatementNeedingParentheses"), exports);
41
43
  __exportStar(require("./isUndefinedIdentifier"), exports);
42
44
  __exportStar(require("./misc"), exports);
43
45
  __exportStar(require("./needsPrecedingSemiColon"), exports);
@@ -0,0 +1,2 @@
1
+ import type { TSESLint, TSESTree } from '@typescript-eslint/utils';
2
+ export declare function isStartOfArrowFunctionBodyNeedingParentheses(node: TSESTree.Node, firstToken: TSESTree.Token, sourceCode: TSESLint.SourceCode): boolean;
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isStartOfArrowFunctionBody = isStartOfArrowFunctionBody;
3
+ exports.isStartOfArrowFunctionBodyNeedingParentheses = isStartOfArrowFunctionBodyNeedingParentheses;
4
4
  const utils_1 = require("@typescript-eslint/utils");
5
5
  const astUtils_1 = require("./astUtils");
6
+ function isStartOfArrowFunctionBodyNeedingParentheses(node, firstToken, sourceCode) {
7
+ return ((0, astUtils_1.isOpeningBraceToken)(firstToken) &&
8
+ isStartOfArrowFunctionBody(node, sourceCode));
9
+ }
6
10
  function isStartOfArrowFunctionBody(node, sourceCode) {
7
11
  let current = node;
8
12
  while (true) {
@@ -23,4 +27,4 @@ function isStartOfArrowFunctionBody(node, sourceCode) {
23
27
  current = parent;
24
28
  }
25
29
  }
26
- //# sourceMappingURL=isStartOfArrowFunctionBody.js.map
30
+ //# sourceMappingURL=isStartOfArrowFunctionBodyNeedingParentheses.js.map
@@ -0,0 +1,2 @@
1
+ import type { TSESTree } from '@typescript-eslint/utils';
2
+ export declare function isStartOfExpressionStatementNeedingParentheses(node: TSESTree.Node, firstToken: TSESTree.Token): boolean;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isStartOfExpressionStatementNeedingParentheses = isStartOfExpressionStatementNeedingParentheses;
4
+ const isStartOfExpressionStatement_1 = require("./isStartOfExpressionStatement");
5
+ function isStartOfExpressionStatementNeedingParentheses(node, firstToken) {
6
+ return (['{', 'class', 'function'].includes(firstToken.value) &&
7
+ (0, isStartOfExpressionStatement_1.isStartOfExpressionStatement)(node));
8
+ }
9
+ //# sourceMappingURL=isStartOfExpressionStatementNeedingParentheses.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-eslint/eslint-plugin",
3
- "version": "8.70.1-alpha.13",
3
+ "version": "8.70.1-alpha.15",
4
4
  "description": "TypeScript plugin for ESLint",
5
5
  "files": [
6
6
  "dist",
@@ -47,10 +47,10 @@
47
47
  ],
48
48
  "dependencies": {
49
49
  "@eslint-community/regexpp": "^4.12.2",
50
- "@typescript-eslint/scope-manager": "8.70.1-alpha.13",
51
- "@typescript-eslint/type-utils": "8.70.1-alpha.13",
52
- "@typescript-eslint/utils": "8.70.1-alpha.13",
53
- "@typescript-eslint/visitor-keys": "8.70.1-alpha.13",
50
+ "@typescript-eslint/scope-manager": "8.70.1-alpha.15",
51
+ "@typescript-eslint/type-utils": "8.70.1-alpha.15",
52
+ "@typescript-eslint/utils": "8.70.1-alpha.15",
53
+ "@typescript-eslint/visitor-keys": "8.70.1-alpha.15",
54
54
  "ignore": "^7.0.5",
55
55
  "natural-compare": "^1.4.0",
56
56
  "ts-api-utils": "^2.5.0"
@@ -60,8 +60,8 @@
60
60
  "@types/mdast": "^4.0.4",
61
61
  "@types/natural-compare": "^1.4.3",
62
62
  "@types/react": "^18.3.21",
63
- "@typescript-eslint/rule-schema-to-typescript-types": "8.70.1-alpha.13",
64
- "@typescript-eslint/rule-tester": "8.70.1-alpha.13",
63
+ "@typescript-eslint/rule-schema-to-typescript-types": "8.70.1-alpha.15",
64
+ "@typescript-eslint/rule-tester": "8.70.1-alpha.15",
65
65
  "@typescript/native": "npm:typescript@^7.0.2",
66
66
  "@vitest/coverage-v8": "^4.0.18",
67
67
  "ajv": "^6.12.6",
@@ -81,7 +81,7 @@
81
81
  "vitest": "^4.0.18"
82
82
  },
83
83
  "peerDependencies": {
84
- "@typescript-eslint/parser": "^8.70.1-alpha.13",
84
+ "@typescript-eslint/parser": "^8.70.1-alpha.15",
85
85
  "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
86
86
  "typescript": ">=4.8.4 <6.1.0"
87
87
  },
@@ -1,2 +0,0 @@
1
- import type { TSESLint, TSESTree } from '@typescript-eslint/utils';
2
- export declare function isStartOfArrowFunctionBody(node: TSESTree.Node, sourceCode: TSESLint.SourceCode): boolean;