Skip to content

Commit

Permalink
prefer-const: don't treat index signatures as parameters (palantir#3385)
Browse files Browse the repository at this point in the history
The `k` in `{[k: string]: string}` is a `ts.ParameterDeclaration`. This should not be treated like a parameter in the value domain.
  • Loading branch information
ajafff authored and HyphnKnight committed Apr 9, 2018
1 parent fc27808 commit 75be9a1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/rules/preferConstRule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,12 @@ class PreferConstWalker extends Lint.AbstractWalker<Options> {
});
}
} else if (node.kind === ts.SyntaxKind.Parameter) {
this.handleBindingName((node as ts.ParameterDeclaration).name, {
canBeConst: false,
isBlockScoped: true,
});
if (node.parent!.kind !== ts.SyntaxKind.IndexSignature) {
this.handleBindingName((node as ts.ParameterDeclaration).name, {
canBeConst: false,
isBlockScoped: true,
});
}
} else if (utils.isPostfixUnaryExpression(node) ||
utils.isPrefixUnaryExpression(node) &&
(node.operator === ts.SyntaxKind.PlusPlusToken || node.operator === ts.SyntaxKind.MinusMinusToken)) {
Expand Down
7 changes: 7 additions & 0 deletions test/rules/prefer-const/default/test.ts.fix
Original file line number Diff line number Diff line change
Expand Up @@ -219,3 +219,10 @@ for (let {var1, var2} of someArr) {
var2 = null;
}

{
let k: any = 0;
function foo(param: {[k: string]: string}) {
k = param;
}
}

7 changes: 7 additions & 0 deletions test/rules/prefer-const/default/test.ts.lint
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,13 @@ for (let {var1, var2} of someArr) {
var2 = null;
}

{
let k: any = 0;
function foo(param: {[k: string]: string}) {
k = param;
}
}

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

0 comments on commit 75be9a1

Please sign in to comment.