Skip to content

Commit 5b187f4

Browse files
authored
fix(eslint-plugin): [prefer-for-of] fix false positive when using erasable type syntax within update expressions (typescript-eslint#10981)
* fix(eslint-plugin): [prefer-for-of] fix false positive when using non-null assertion within update expressions * fix(eslint-plugin): fix `isAssignee` function to handle any erasable type syntaxes
1 parent 58d7f40 commit 5b187f4

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

packages/eslint-plugin/src/util/isAssignee.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,16 @@ export function isAssignee(node: TSESTree.Node): boolean {
5353
return true;
5454
}
5555

56+
// (a[i] as number)++, [...a[i]!] = [0], etc.
57+
if (
58+
(parent.type === AST_NODE_TYPES.TSNonNullExpression ||
59+
parent.type === AST_NODE_TYPES.TSAsExpression ||
60+
parent.type === AST_NODE_TYPES.TSTypeAssertion ||
61+
parent.type === AST_NODE_TYPES.TSSatisfiesExpression) &&
62+
isAssignee(parent)
63+
) {
64+
return true;
65+
}
66+
5667
return false;
5768
}

packages/eslint-plugin/tests/rules/prefer-for-of.test.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,46 @@ for (let i = 0; i < arr.length; i++) {
139139
}
140140
`,
141141
`
142+
for (let i = 0; i < arr.length; i++) {
143+
arr[i]++;
144+
}
145+
`,
146+
`
147+
for (let i = 0; i < arr.length; i++) {
148+
arr[i]!++;
149+
}
150+
`,
151+
`
152+
for (let i = 0; i < arr.length; i++) {
153+
arr[i]!!!++;
154+
}
155+
`,
156+
`
157+
for (let i = 0; i < arr.length; i++) {
158+
(arr[i] as number)++;
159+
}
160+
`,
161+
`
162+
for (let i = 0; i < arr.length; i++) {
163+
(<number>arr[i])++;
164+
}
165+
`,
166+
`
167+
for (let i = 0; i < arr.length; i++) {
168+
(arr[i] as unknown as number)++;
169+
}
170+
`,
171+
`
172+
for (let i = 0; i < arr.length; i++) {
173+
(arr[i] satisfies number)++;
174+
}
175+
`,
176+
`
177+
for (let i = 0; i < arr.length; i++) {
178+
(arr[i]! satisfies number)++;
179+
}
180+
`,
181+
`
142182
for (let i = 0; i < arr.length; i++) {
143183
[arr[i]] = [1];
144184
}
@@ -149,6 +189,11 @@ for (let i = 0; i < arr.length; i++) {
149189
}
150190
`,
151191
`
192+
for (let i = 0; i < arr.length; i++) {
193+
[...arr[i]!] = [1];
194+
}
195+
`,
196+
`
152197
for (let i = 0; i < arr.length; i++) {
153198
({ foo: arr[i] }) = { foo: 0 };
154199
}

0 commit comments

Comments
 (0)