Skip to content

Commit

Permalink
prefer-const: special handling for destructuring in for-of (palantir#…
Browse files Browse the repository at this point in the history
  • Loading branch information
ajafff authored and HyphnKnight committed Apr 9, 2018
1 parent 3fadee7 commit 9c3dff4
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/rules/preferConstRule.ts
Expand Up @@ -273,7 +273,8 @@ class PreferConstWalker extends Lint.AbstractWalker<Options> {
canBeConst: true,
declarationList,
isBlockScoped: kind === utils.VariableDeclarationKind.Let,
isForLoop: declarationList.parent!.kind === ts.SyntaxKind.ForStatement,
isForLoop: declarationList.parent!.kind === ts.SyntaxKind.ForStatement ||
declarationList.parent!.kind === ts.SyntaxKind.ForOfStatement,
reassignedSiblings: false,
};
}
Expand Down
9 changes: 8 additions & 1 deletion test/rules/prefer-const/default/test.ts.fix
Expand Up @@ -56,7 +56,7 @@ function myFunc2() {
for (const n of [1, 1]) { // failure for 'n'
console.log(n);
}
for (let {o, p} of [{1, 1}, {1, 1}]) { // failure for 'o'
for (let {o, p} of [{1, 1}, {1, 1}]) {
console.log(o);
p = 2;
}
Expand Down Expand Up @@ -211,4 +211,11 @@ declare namespace ambient {
let someVar: string, someObj: any;
for ({someVar: someObj.val} of someArr) {}
}
for (let [var1, var2] of someArr) {
var1 = null;
}
for (const [var1, var2] of someArr) {}
for (let {var1, var2} of someArr) {
var2 = null;
}

12 changes: 10 additions & 2 deletions test/rules/prefer-const/default/test.ts.lint
Expand Up @@ -68,8 +68,7 @@ for (let n of [1, 1]) { // failure for 'n'
~ [let % ('n')]
console.log(n);
}
for (let {o, p} of [{1, 1}, {1, 1}]) { // failure for 'o'
~ [let % ('o')]
for (let {o, p} of [{1, 1}, {1, 1}]) {
console.log(o);
p = 2;
}
Expand Down Expand Up @@ -249,6 +248,15 @@ declare namespace ambient {
~~~~~~~ [let % ('someObj')]
for ({someVar: someObj.val} of someArr) {}
}
for (let [var1, var2] of someArr) {
var1 = null;
}
for (let [var1, var2] of someArr) {}
~~~~ [let % ('var1')]
~~~~ [let % ('var2')]
for (let {var1, var2} of someArr) {
var2 = null;
}

[_base]: Identifier '%%s' is never reassigned; use 'const' instead of '%s'.
[let]: _base % ('let')
Expand Down

0 comments on commit 9c3dff4

Please sign in to comment.