Skip to content

Commit bd58cf0

Browse files
committed
Merge branch 'unusedIdentifierFixes-3' into release-2.0
2 parents b848690 + 54b4bef commit bd58cf0

36 files changed

+2416
-103
lines changed

Diff for: src/compiler/checker.ts

+165-92
Large diffs are not rendered by default.

Diff for: src/compiler/types.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -2107,6 +2107,8 @@ namespace ts {
21072107
PropertyOrAccessor = Property | Accessor,
21082108
Export = ExportNamespace | ExportType | ExportValue,
21092109

2110+
ClassMember = Method | Accessor | Property,
2111+
21102112
/* @internal */
21112113
// The set of things we consider semantically classifiable. Used to speed up the LS during
21122114
// classification.
@@ -2128,7 +2130,7 @@ namespace ts {
21282130
/* @internal */ parent?: Symbol; // Parent symbol
21292131
/* @internal */ exportSymbol?: Symbol; // Exported symbol associated with this symbol
21302132
/* @internal */ constEnumOnlyModule?: boolean; // True if module contains only const enums or other modules with only const enums
2131-
/* @internal */ hasReference?: boolean; // True if the symbol is referenced elsewhere
2133+
/* @internal */ isReferenced?: boolean; // True if the symbol is referenced elsewhere
21322134
}
21332135

21342136
/* @internal */

Diff for: tests/baselines/reference/unusedImports11.js

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//// [tests/cases/compiler/unusedImports11.ts] ////
2+
3+
//// [b.ts]
4+
5+
export class Member {}
6+
export default Member;
7+
8+
9+
//// [a.ts]
10+
import { Member } from './b';
11+
import d, { Member as M } from './b';
12+
import * as ns from './b';
13+
import r = require("./b");
14+
15+
new Member();
16+
new d();
17+
new M();
18+
new ns.Member();
19+
new r.Member();
20+
21+
//// [b.js]
22+
"use strict";
23+
var Member = (function () {
24+
function Member() {
25+
}
26+
return Member;
27+
}());
28+
exports.Member = Member;
29+
exports.__esModule = true;
30+
exports["default"] = Member;
31+
//// [a.js]
32+
"use strict";
33+
var b_1 = require('./b');
34+
var b_2 = require('./b');
35+
var ns = require('./b');
36+
var r = require("./b");
37+
new b_1.Member();
38+
new b_2["default"]();
39+
new b_2.Member();
40+
new ns.Member();
41+
new r.Member();

Diff for: tests/baselines/reference/unusedImports11.symbols

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
=== tests/cases/compiler/a.ts ===
2+
import { Member } from './b';
3+
>Member : Symbol(Member, Decl(a.ts, 0, 8))
4+
5+
import d, { Member as M } from './b';
6+
>d : Symbol(d, Decl(a.ts, 1, 6))
7+
>Member : Symbol(M, Decl(a.ts, 1, 11))
8+
>M : Symbol(M, Decl(a.ts, 1, 11))
9+
10+
import * as ns from './b';
11+
>ns : Symbol(ns, Decl(a.ts, 2, 6))
12+
13+
import r = require("./b");
14+
>r : Symbol(r, Decl(a.ts, 2, 26))
15+
16+
new Member();
17+
>Member : Symbol(Member, Decl(a.ts, 0, 8))
18+
19+
new d();
20+
>d : Symbol(d, Decl(a.ts, 1, 6))
21+
22+
new M();
23+
>M : Symbol(M, Decl(a.ts, 1, 11))
24+
25+
new ns.Member();
26+
>ns.Member : Symbol(Member, Decl(b.ts, 0, 0))
27+
>ns : Symbol(ns, Decl(a.ts, 2, 6))
28+
>Member : Symbol(Member, Decl(b.ts, 0, 0))
29+
30+
new r.Member();
31+
>r.Member : Symbol(Member, Decl(b.ts, 0, 0))
32+
>r : Symbol(r, Decl(a.ts, 2, 26))
33+
>Member : Symbol(Member, Decl(b.ts, 0, 0))
34+
35+
=== tests/cases/compiler/b.ts ===
36+
37+
export class Member {}
38+
>Member : Symbol(Member, Decl(b.ts, 0, 0))
39+
40+
export default Member;
41+
>Member : Symbol(Member, Decl(b.ts, 0, 0))
42+
43+

Diff for: tests/baselines/reference/unusedImports11.types

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
=== tests/cases/compiler/a.ts ===
2+
import { Member } from './b';
3+
>Member : typeof Member
4+
5+
import d, { Member as M } from './b';
6+
>d : typeof Member
7+
>Member : typeof Member
8+
>M : typeof Member
9+
10+
import * as ns from './b';
11+
>ns : typeof ns
12+
13+
import r = require("./b");
14+
>r : typeof ns
15+
16+
new Member();
17+
>new Member() : Member
18+
>Member : typeof Member
19+
20+
new d();
21+
>new d() : Member
22+
>d : typeof Member
23+
24+
new M();
25+
>new M() : Member
26+
>M : typeof Member
27+
28+
new ns.Member();
29+
>new ns.Member() : Member
30+
>ns.Member : typeof Member
31+
>ns : typeof ns
32+
>Member : typeof Member
33+
34+
new r.Member();
35+
>new r.Member() : Member
36+
>r.Member : typeof Member
37+
>r : typeof ns
38+
>Member : typeof Member
39+
40+
=== tests/cases/compiler/b.ts ===
41+
42+
export class Member {}
43+
>Member : Member
44+
45+
export default Member;
46+
>Member : Member
47+
48+

Diff for: tests/baselines/reference/unusedImports12.errors.txt

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
tests/cases/compiler/a.ts(1,10): error TS6133: 'Member' is declared but never used.
2+
tests/cases/compiler/a.ts(2,8): error TS6133: 'd' is declared but never used.
3+
tests/cases/compiler/a.ts(2,23): error TS6133: 'M' is declared but never used.
4+
tests/cases/compiler/a.ts(3,13): error TS6133: 'ns' is declared but never used.
5+
tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but never used.
6+
7+
8+
==== tests/cases/compiler/a.ts (5 errors) ====
9+
import { Member } from './b';
10+
~~~~~~
11+
!!! error TS6133: 'Member' is declared but never used.
12+
import d, { Member as M } from './b';
13+
~
14+
!!! error TS6133: 'd' is declared but never used.
15+
~
16+
!!! error TS6133: 'M' is declared but never used.
17+
import * as ns from './b';
18+
~~
19+
!!! error TS6133: 'ns' is declared but never used.
20+
import r = require("./b");
21+
~
22+
!!! error TS6133: 'r' is declared but never used.
23+
24+
==== tests/cases/compiler/b.ts (0 errors) ====
25+
26+
export class Member {}
27+
export default Member;
28+
29+

Diff for: tests/baselines/reference/unusedImports12.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/compiler/unusedImports12.ts] ////
2+
3+
//// [b.ts]
4+
5+
export class Member {}
6+
export default Member;
7+
8+
9+
//// [a.ts]
10+
import { Member } from './b';
11+
import d, { Member as M } from './b';
12+
import * as ns from './b';
13+
import r = require("./b");
14+
15+
16+
//// [b.js]
17+
"use strict";
18+
var Member = (function () {
19+
function Member() {
20+
}
21+
return Member;
22+
}());
23+
exports.Member = Member;
24+
exports.__esModule = true;
25+
exports["default"] = Member;
26+
//// [a.js]
27+
"use strict";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
tests/cases/compiler/unusedLocalsAndParameters.ts(5,12): error TS6133: 'a' is declared but never used.
2+
tests/cases/compiler/unusedLocalsAndParameters.ts(10,22): error TS6133: 'a' is declared but never used.
3+
tests/cases/compiler/unusedLocalsAndParameters.ts(16,5): error TS6133: 'farrow' is declared but never used.
4+
tests/cases/compiler/unusedLocalsAndParameters.ts(16,15): error TS6133: 'a' is declared but never used.
5+
tests/cases/compiler/unusedLocalsAndParameters.ts(19,7): error TS6133: 'C' is declared but never used.
6+
tests/cases/compiler/unusedLocalsAndParameters.ts(21,12): error TS6133: 'a' is declared but never used.
7+
tests/cases/compiler/unusedLocalsAndParameters.ts(24,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
8+
tests/cases/compiler/unusedLocalsAndParameters.ts(24,11): error TS6133: 'v' is declared but never used.
9+
tests/cases/compiler/unusedLocalsAndParameters.ts(28,5): error TS6133: 'E' is declared but never used.
10+
tests/cases/compiler/unusedLocalsAndParameters.ts(30,12): error TS6133: 'a' is declared but never used.
11+
tests/cases/compiler/unusedLocalsAndParameters.ts(33,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
12+
tests/cases/compiler/unusedLocalsAndParameters.ts(33,11): error TS6133: 'v' is declared but never used.
13+
tests/cases/compiler/unusedLocalsAndParameters.ts(39,12): error TS6133: 'a' is declared but never used.
14+
tests/cases/compiler/unusedLocalsAndParameters.ts(42,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
15+
tests/cases/compiler/unusedLocalsAndParameters.ts(42,11): error TS6133: 'v' is declared but never used.
16+
tests/cases/compiler/unusedLocalsAndParameters.ts(49,10): error TS6133: 'i' is declared but never used.
17+
tests/cases/compiler/unusedLocalsAndParameters.ts(53,10): error TS6133: 'i' is declared but never used.
18+
tests/cases/compiler/unusedLocalsAndParameters.ts(57,17): error TS6133: 'n' is declared but never used.
19+
tests/cases/compiler/unusedLocalsAndParameters.ts(64,11): error TS6133: 'c' is declared but never used.
20+
tests/cases/compiler/unusedLocalsAndParameters.ts(69,11): error TS6133: 'a' is declared but never used.
21+
tests/cases/compiler/unusedLocalsAndParameters.ts(72,11): error TS6133: 'c' is declared but never used.
22+
tests/cases/compiler/unusedLocalsAndParameters.ts(75,11): error TS6133: 'c' is declared but never used.
23+
tests/cases/compiler/unusedLocalsAndParameters.ts(80,11): error TS6133: 'N' is declared but never used.
24+
tests/cases/compiler/unusedLocalsAndParameters.ts(81,9): error TS6133: 'x' is declared but never used.
25+
26+
27+
==== tests/cases/compiler/unusedLocalsAndParameters.ts (24 errors) ====
28+
29+
export { };
30+
31+
// function declaration paramter
32+
function f(a) {
33+
~
34+
!!! error TS6133: 'a' is declared but never used.
35+
}
36+
f(0);
37+
38+
// function expression paramter
39+
var fexp = function (a) {
40+
~
41+
!!! error TS6133: 'a' is declared but never used.
42+
};
43+
44+
fexp(0);
45+
46+
// arrow function paramter
47+
var farrow = (a) => {
48+
~~~~~~
49+
!!! error TS6133: 'farrow' is declared but never used.
50+
~
51+
!!! error TS6133: 'a' is declared but never used.
52+
};
53+
54+
class C {
55+
~
56+
!!! error TS6133: 'C' is declared but never used.
57+
// Method declaration paramter
58+
method(a) {
59+
~
60+
!!! error TS6133: 'a' is declared but never used.
61+
}
62+
// Accessor declaration paramter
63+
set x(v: number) {
64+
~
65+
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
66+
~
67+
!!! error TS6133: 'v' is declared but never used.
68+
}
69+
}
70+
71+
var E = class {
72+
~
73+
!!! error TS6133: 'E' is declared but never used.
74+
// Method declaration paramter
75+
method(a) {
76+
~
77+
!!! error TS6133: 'a' is declared but never used.
78+
}
79+
// Accessor declaration paramter
80+
set x(v: number) {
81+
~
82+
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
83+
~
84+
!!! error TS6133: 'v' is declared but never used.
85+
}
86+
}
87+
88+
var o = {
89+
// Object literal method declaration paramter
90+
method(a) {
91+
~
92+
!!! error TS6133: 'a' is declared but never used.
93+
},
94+
// Accessor declaration paramter
95+
set x(v: number) {
96+
~
97+
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
98+
~
99+
!!! error TS6133: 'v' is declared but never used.
100+
}
101+
};
102+
103+
o;
104+
105+
// in a for..in statment
106+
for (let i in o) {
107+
~
108+
!!! error TS6133: 'i' is declared but never used.
109+
}
110+
111+
// in a for..of statment
112+
for (let i of [1, 2, 3]) {
113+
~
114+
!!! error TS6133: 'i' is declared but never used.
115+
}
116+
117+
// in a for. statment
118+
for (let i = 0, n; i < 10; i++) {
119+
~
120+
!!! error TS6133: 'n' is declared but never used.
121+
}
122+
123+
// in a block
124+
125+
const condition = false;
126+
if (condition) {
127+
const c = 0;
128+
~
129+
!!! error TS6133: 'c' is declared but never used.
130+
}
131+
132+
// in try/catch/finally
133+
try {
134+
const a = 0;
135+
~
136+
!!! error TS6133: 'a' is declared but never used.
137+
}
138+
catch (e) {
139+
const c = 1;
140+
~
141+
!!! error TS6133: 'c' is declared but never used.
142+
}
143+
finally {
144+
const c = 0;
145+
~
146+
!!! error TS6133: 'c' is declared but never used.
147+
}
148+
149+
150+
// in a namespace
151+
namespace N {
152+
~
153+
!!! error TS6133: 'N' is declared but never used.
154+
var x;
155+
~
156+
!!! error TS6133: 'x' is declared but never used.
157+
}
158+
159+

0 commit comments

Comments
 (0)