Skip to content

Commit ad63468

Browse files
author
Andy
authored
noUnusedLocals: f(x = 1) does not use x (#26366)
1 parent f2011ce commit ad63468

File tree

8 files changed

+38
-4
lines changed

8 files changed

+38
-4
lines changed

src/compiler/utilities.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4201,7 +4201,9 @@ namespace ts {
42014201
return operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken ? writeOrReadWrite() : AccessKind.Read;
42024202
case SyntaxKind.BinaryExpression:
42034203
const { left, operatorToken } = parent as BinaryExpression;
4204-
return left === node && isAssignmentOperator(operatorToken.kind) ? writeOrReadWrite() : AccessKind.Read;
4204+
return left === node && isAssignmentOperator(operatorToken.kind) ?
4205+
operatorToken.kind === SyntaxKind.EqualsToken ? AccessKind.Write : writeOrReadWrite()
4206+
: AccessKind.Read;
42054207
case SyntaxKind.PropertyAccessExpression:
42064208
return (parent as PropertyAccessExpression).name !== node ? AccessKind.Read : accessKind(parent);
42074209
default:

src/compiler/watch.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ namespace ts {
183183
}
184184

185185
let host: DirectoryStructureHost = system;
186+
host; // tslint:disable-line no-unused-expression (TODO: `host` is unused!)
186187
const useCaseSensitiveFileNames = () => system.useCaseSensitiveFileNames;
187188
const writeFileName = (s: string) => system.write(s + system.newLine);
188189
const onWatchStatusChange = reportWatchStatus || createWatchStatusReporter(system);

src/services/shims.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ namespace ts {
328328
}
329329

330330
export class LanguageServiceShimHostAdapter implements LanguageServiceHost {
331-
private files: string[];
332331
private loggingEnabled = false;
333332
private tracingEnabled = false;
334333

@@ -408,7 +407,7 @@ namespace ts {
408407

409408
public getScriptFileNames(): string[] {
410409
const encoded = this.shimHost.getScriptFileNames();
411-
return this.files = JSON.parse(encoded);
410+
return JSON.parse(encoded);
412411
}
413412

414413
public getScriptSnapshot(fileName: string): IScriptSnapshot | undefined {

tests/baselines/reference/noUnusedLocals_writeOnly.errors.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
tests/cases/compiler/noUnusedLocals_writeOnly.ts(1,12): error TS6133: 'x' is declared but its value is never read.
2+
tests/cases/compiler/noUnusedLocals_writeOnly.ts(10,9): error TS6133: 'z' is declared but its value is never read.
23

34

4-
==== tests/cases/compiler/noUnusedLocals_writeOnly.ts (1 errors) ====
5+
==== tests/cases/compiler/noUnusedLocals_writeOnly.ts (2 errors) ====
56
function f(x = 0) {
67
~
78
!!! error TS6133: 'x' is declared but its value is never read.
@@ -12,5 +13,10 @@ tests/cases/compiler/noUnusedLocals_writeOnly.ts(1,12): error TS6133: 'x' is dec
1213
let y = 0;
1314
// This is a write access to y, but not a write-*only* access.
1415
f(y++);
16+
17+
let z = 0;
18+
~
19+
!!! error TS6133: 'z' is declared but its value is never read.
20+
f(z = 1); // This effectively doesn't use `z`, values just pass through it.
1521
}
1622

tests/baselines/reference/noUnusedLocals_writeOnly.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ function f(x = 0) {
77
let y = 0;
88
// This is a write access to y, but not a write-*only* access.
99
f(y++);
10+
11+
let z = 0;
12+
f(z = 1); // This effectively doesn't use `z`, values just pass through it.
1013
}
1114

1215

@@ -19,4 +22,6 @@ function f(x) {
1922
var y = 0;
2023
// This is a write access to y, but not a write-*only* access.
2124
f(y++);
25+
var z = 0;
26+
f(z = 1); // This effectively doesn't use `z`, values just pass through it.
2227
}

tests/baselines/reference/noUnusedLocals_writeOnly.symbols

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,12 @@ function f(x = 0) {
1919
f(y++);
2020
>f : Symbol(f, Decl(noUnusedLocals_writeOnly.ts, 0, 0))
2121
>y : Symbol(y, Decl(noUnusedLocals_writeOnly.ts, 5, 7))
22+
23+
let z = 0;
24+
>z : Symbol(z, Decl(noUnusedLocals_writeOnly.ts, 9, 7))
25+
26+
f(z = 1); // This effectively doesn't use `z`, values just pass through it.
27+
>f : Symbol(f, Decl(noUnusedLocals_writeOnly.ts, 0, 0))
28+
>z : Symbol(z, Decl(noUnusedLocals_writeOnly.ts, 9, 7))
2229
}
2330

tests/baselines/reference/noUnusedLocals_writeOnly.types

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,16 @@ function f(x = 0) {
2828
>f : (x?: number) => void
2929
>y++ : number
3030
>y : number
31+
32+
let z = 0;
33+
>z : number
34+
>0 : 0
35+
36+
f(z = 1); // This effectively doesn't use `z`, values just pass through it.
37+
>f(z = 1) : void
38+
>f : (x?: number) => void
39+
>z = 1 : 1
40+
>z : number
41+
>1 : 1
3142
}
3243

tests/cases/compiler/noUnusedLocals_writeOnly.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ function f(x = 0) {
99
let y = 0;
1010
// This is a write access to y, but not a write-*only* access.
1111
f(y++);
12+
13+
let z = 0;
14+
f(z = 1); // This effectively doesn't use `z`, values just pass through it.
1215
}

0 commit comments

Comments
 (0)