Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unused identifier fixes #9452

Merged
merged 20 commits into from
Jun 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
257 changes: 165 additions & 92 deletions src/compiler/checker.ts

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion src/compiler/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2107,6 +2107,8 @@ namespace ts {
PropertyOrAccessor = Property | Accessor,
Export = ExportNamespace | ExportType | ExportValue,

ClassMember = Method | Accessor | Property,

/* @internal */
// The set of things we consider semantically classifiable. Used to speed up the LS during
// classification.
Expand All @@ -2128,7 +2130,7 @@ namespace ts {
/* @internal */ parent?: Symbol; // Parent symbol
/* @internal */ exportSymbol?: Symbol; // Exported symbol associated with this symbol
/* @internal */ constEnumOnlyModule?: boolean; // True if module contains only const enums or other modules with only const enums
/* @internal */ hasReference?: boolean; // True if the symbol is referenced elsewhere
/* @internal */ isReferenced?: boolean; // True if the symbol is referenced elsewhere
}

/* @internal */
Expand Down
41 changes: 41 additions & 0 deletions tests/baselines/reference/unusedImports11.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//// [tests/cases/compiler/unusedImports11.ts] ////

//// [b.ts]

export class Member {}
export default Member;


//// [a.ts]
import { Member } from './b';
import d, { Member as M } from './b';
import * as ns from './b';
import r = require("./b");

new Member();
new d();
new M();
new ns.Member();
new r.Member();

//// [b.js]
"use strict";
var Member = (function () {
function Member() {
}
return Member;
}());
exports.Member = Member;
exports.__esModule = true;
exports["default"] = Member;
//// [a.js]
"use strict";
var b_1 = require('./b');
var b_2 = require('./b');
var ns = require('./b');
var r = require("./b");
new b_1.Member();
new b_2["default"]();
new b_2.Member();
new ns.Member();
new r.Member();
43 changes: 43 additions & 0 deletions tests/baselines/reference/unusedImports11.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
=== tests/cases/compiler/a.ts ===
import { Member } from './b';
>Member : Symbol(Member, Decl(a.ts, 0, 8))

import d, { Member as M } from './b';
>d : Symbol(d, Decl(a.ts, 1, 6))
>Member : Symbol(M, Decl(a.ts, 1, 11))
>M : Symbol(M, Decl(a.ts, 1, 11))

import * as ns from './b';
>ns : Symbol(ns, Decl(a.ts, 2, 6))

import r = require("./b");
>r : Symbol(r, Decl(a.ts, 2, 26))

new Member();
>Member : Symbol(Member, Decl(a.ts, 0, 8))

new d();
>d : Symbol(d, Decl(a.ts, 1, 6))

new M();
>M : Symbol(M, Decl(a.ts, 1, 11))

new ns.Member();
>ns.Member : Symbol(Member, Decl(b.ts, 0, 0))
>ns : Symbol(ns, Decl(a.ts, 2, 6))
>Member : Symbol(Member, Decl(b.ts, 0, 0))

new r.Member();
>r.Member : Symbol(Member, Decl(b.ts, 0, 0))
>r : Symbol(r, Decl(a.ts, 2, 26))
>Member : Symbol(Member, Decl(b.ts, 0, 0))

=== tests/cases/compiler/b.ts ===

export class Member {}
>Member : Symbol(Member, Decl(b.ts, 0, 0))

export default Member;
>Member : Symbol(Member, Decl(b.ts, 0, 0))


48 changes: 48 additions & 0 deletions tests/baselines/reference/unusedImports11.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
=== tests/cases/compiler/a.ts ===
import { Member } from './b';
>Member : typeof Member

import d, { Member as M } from './b';
>d : typeof Member
>Member : typeof Member
>M : typeof Member

import * as ns from './b';
>ns : typeof ns

import r = require("./b");
>r : typeof ns

new Member();
>new Member() : Member
>Member : typeof Member

new d();
>new d() : Member
>d : typeof Member

new M();
>new M() : Member
>M : typeof Member

new ns.Member();
>new ns.Member() : Member
>ns.Member : typeof Member
>ns : typeof ns
>Member : typeof Member

new r.Member();
>new r.Member() : Member
>r.Member : typeof Member
>r : typeof ns
>Member : typeof Member

=== tests/cases/compiler/b.ts ===

export class Member {}
>Member : Member

export default Member;
>Member : Member


29 changes: 29 additions & 0 deletions tests/baselines/reference/unusedImports12.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
tests/cases/compiler/a.ts(1,10): error TS6133: 'Member' is declared but never used.
tests/cases/compiler/a.ts(2,8): error TS6133: 'd' is declared but never used.
tests/cases/compiler/a.ts(2,23): error TS6133: 'M' is declared but never used.
tests/cases/compiler/a.ts(3,13): error TS6133: 'ns' is declared but never used.
tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but never used.


==== tests/cases/compiler/a.ts (5 errors) ====
import { Member } from './b';
~~~~~~
!!! error TS6133: 'Member' is declared but never used.
import d, { Member as M } from './b';
~
!!! error TS6133: 'd' is declared but never used.
~
!!! error TS6133: 'M' is declared but never used.
import * as ns from './b';
~~
!!! error TS6133: 'ns' is declared but never used.
import r = require("./b");
~
!!! error TS6133: 'r' is declared but never used.

==== tests/cases/compiler/b.ts (0 errors) ====

export class Member {}
export default Member;


27 changes: 27 additions & 0 deletions tests/baselines/reference/unusedImports12.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//// [tests/cases/compiler/unusedImports12.ts] ////

//// [b.ts]

export class Member {}
export default Member;


//// [a.ts]
import { Member } from './b';
import d, { Member as M } from './b';
import * as ns from './b';
import r = require("./b");


//// [b.js]
"use strict";
var Member = (function () {
function Member() {
}
return Member;
}());
exports.Member = Member;
exports.__esModule = true;
exports["default"] = Member;
//// [a.js]
"use strict";
159 changes: 159 additions & 0 deletions tests/baselines/reference/unusedLocalsAndParameters.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
tests/cases/compiler/unusedLocalsAndParameters.ts(5,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(10,22): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(16,5): error TS6133: 'farrow' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(16,15): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(19,7): error TS6133: 'C' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(21,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(24,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
tests/cases/compiler/unusedLocalsAndParameters.ts(24,11): error TS6133: 'v' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(28,5): error TS6133: 'E' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(30,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(33,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
tests/cases/compiler/unusedLocalsAndParameters.ts(33,11): error TS6133: 'v' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(39,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(42,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
tests/cases/compiler/unusedLocalsAndParameters.ts(42,11): error TS6133: 'v' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(49,10): error TS6133: 'i' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(53,10): error TS6133: 'i' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(57,17): error TS6133: 'n' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(64,11): error TS6133: 'c' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(69,11): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(72,11): error TS6133: 'c' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(75,11): error TS6133: 'c' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(80,11): error TS6133: 'N' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(81,9): error TS6133: 'x' is declared but never used.


==== tests/cases/compiler/unusedLocalsAndParameters.ts (24 errors) ====

export { };

// function declaration paramter
function f(a) {
~
!!! error TS6133: 'a' is declared but never used.
}
f(0);

// function expression paramter
var fexp = function (a) {
~
!!! error TS6133: 'a' is declared but never used.
};

fexp(0);

// arrow function paramter
var farrow = (a) => {
~~~~~~
!!! error TS6133: 'farrow' is declared but never used.
~
!!! error TS6133: 'a' is declared but never used.
};

class C {
~
!!! error TS6133: 'C' is declared but never used.
// Method declaration paramter
method(a) {
~
!!! error TS6133: 'a' is declared but never used.
}
// Accessor declaration paramter
set x(v: number) {
~
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! error TS6133: 'v' is declared but never used.
}
}

var E = class {
~
!!! error TS6133: 'E' is declared but never used.
// Method declaration paramter
method(a) {
~
!!! error TS6133: 'a' is declared but never used.
}
// Accessor declaration paramter
set x(v: number) {
~
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! error TS6133: 'v' is declared but never used.
}
}

var o = {
// Object literal method declaration paramter
method(a) {
~
!!! error TS6133: 'a' is declared but never used.
},
// Accessor declaration paramter
set x(v: number) {
~
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! error TS6133: 'v' is declared but never used.
}
};

o;

// in a for..in statment
for (let i in o) {
~
!!! error TS6133: 'i' is declared but never used.
}

// in a for..of statment
for (let i of [1, 2, 3]) {
~
!!! error TS6133: 'i' is declared but never used.
}

// in a for. statment
for (let i = 0, n; i < 10; i++) {
~
!!! error TS6133: 'n' is declared but never used.
}

// in a block

const condition = false;
if (condition) {
const c = 0;
~
!!! error TS6133: 'c' is declared but never used.
}

// in try/catch/finally
try {
const a = 0;
~
!!! error TS6133: 'a' is declared but never used.
}
catch (e) {
const c = 1;
~
!!! error TS6133: 'c' is declared but never used.
}
finally {
const c = 0;
~
!!! error TS6133: 'c' is declared but never used.
}


// in a namespace
namespace N {
~
!!! error TS6133: 'N' is declared but never used.
var x;
~
!!! error TS6133: 'x' is declared but never used.
}


Loading