In resolveNameHelper, use a lastNonBlockLocation (#18918)

This commit is contained in:
Andy
2017-10-09 11:04:28 -07:00
committed by GitHub
parent 8a55baf9a3
commit 2796ebfe35
6 changed files with 77 additions and 32 deletions

View File

@@ -1,14 +1,22 @@
tests/cases/compiler/noUnusedLocals_selfReference.ts(3,10): error TS6133: 'f' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(4,7): error TS6133: 'C' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(7,6): error TS6133: 'E' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(5,14): error TS6133: 'g' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(9,7): error TS6133: 'C' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(12,6): error TS6133: 'E' is declared but its value is never read.
==== tests/cases/compiler/noUnusedLocals_selfReference.ts (3 errors) ====
==== tests/cases/compiler/noUnusedLocals_selfReference.ts (4 errors) ====
export {}; // Make this a module scope, so these are local variables.
function f() { f; }
function f() {
~
!!! error TS6133: 'f' is declared but its value is never read.
f;
function g() {
~
!!! error TS6133: 'g' is declared but its value is never read.
g;
}
}
class C {
~
!!! error TS6133: 'C' is declared but its value is never read.

View File

@@ -1,7 +1,12 @@
//// [noUnusedLocals_selfReference.ts]
export {}; // Make this a module scope, so these are local variables.
function f() { f; }
function f() {
f;
function g() {
g;
}
}
class C {
m() { C; }
}
@@ -19,7 +24,12 @@ P;
//// [noUnusedLocals_selfReference.js]
"use strict";
exports.__esModule = true;
function f() { f; }
function f() {
f;
function g() {
g;
}
}
var C = /** @class */ (function () {
function C() {
}

View File

@@ -1,43 +1,52 @@
=== tests/cases/compiler/noUnusedLocals_selfReference.ts ===
export {}; // Make this a module scope, so these are local variables.
function f() { f; }
>f : Symbol(f, Decl(noUnusedLocals_selfReference.ts, 0, 10))
function f() {
>f : Symbol(f, Decl(noUnusedLocals_selfReference.ts, 0, 10))
f;
>f : Symbol(f, Decl(noUnusedLocals_selfReference.ts, 0, 10))
function g() {
>g : Symbol(g, Decl(noUnusedLocals_selfReference.ts, 3, 6))
g;
>g : Symbol(g, Decl(noUnusedLocals_selfReference.ts, 3, 6))
}
}
class C {
>C : Symbol(C, Decl(noUnusedLocals_selfReference.ts, 2, 19))
>C : Symbol(C, Decl(noUnusedLocals_selfReference.ts, 7, 1))
m() { C; }
>m : Symbol(C.m, Decl(noUnusedLocals_selfReference.ts, 3, 9))
>C : Symbol(C, Decl(noUnusedLocals_selfReference.ts, 2, 19))
>m : Symbol(C.m, Decl(noUnusedLocals_selfReference.ts, 8, 9))
>C : Symbol(C, Decl(noUnusedLocals_selfReference.ts, 7, 1))
}
enum E { A = 0, B = E.A }
>E : Symbol(E, Decl(noUnusedLocals_selfReference.ts, 5, 1))
>A : Symbol(E.A, Decl(noUnusedLocals_selfReference.ts, 6, 8))
>B : Symbol(E.B, Decl(noUnusedLocals_selfReference.ts, 6, 15))
>E.A : Symbol(E.A, Decl(noUnusedLocals_selfReference.ts, 6, 8))
>E : Symbol(E, Decl(noUnusedLocals_selfReference.ts, 5, 1))
>A : Symbol(E.A, Decl(noUnusedLocals_selfReference.ts, 6, 8))
>E : Symbol(E, Decl(noUnusedLocals_selfReference.ts, 10, 1))
>A : Symbol(E.A, Decl(noUnusedLocals_selfReference.ts, 11, 8))
>B : Symbol(E.B, Decl(noUnusedLocals_selfReference.ts, 11, 15))
>E.A : Symbol(E.A, Decl(noUnusedLocals_selfReference.ts, 11, 8))
>E : Symbol(E, Decl(noUnusedLocals_selfReference.ts, 10, 1))
>A : Symbol(E.A, Decl(noUnusedLocals_selfReference.ts, 11, 8))
// Does not detect mutual recursion.
function g() { D; }
>g : Symbol(g, Decl(noUnusedLocals_selfReference.ts, 6, 25))
>D : Symbol(D, Decl(noUnusedLocals_selfReference.ts, 9, 19))
>g : Symbol(g, Decl(noUnusedLocals_selfReference.ts, 11, 25))
>D : Symbol(D, Decl(noUnusedLocals_selfReference.ts, 14, 19))
class D { m() { g; } }
>D : Symbol(D, Decl(noUnusedLocals_selfReference.ts, 9, 19))
>m : Symbol(D.m, Decl(noUnusedLocals_selfReference.ts, 10, 9))
>g : Symbol(g, Decl(noUnusedLocals_selfReference.ts, 6, 25))
>D : Symbol(D, Decl(noUnusedLocals_selfReference.ts, 14, 19))
>m : Symbol(D.m, Decl(noUnusedLocals_selfReference.ts, 15, 9))
>g : Symbol(g, Decl(noUnusedLocals_selfReference.ts, 11, 25))
// Does not work on private methods.
class P { private m() { this.m; } }
>P : Symbol(P, Decl(noUnusedLocals_selfReference.ts, 10, 22))
>m : Symbol(P.m, Decl(noUnusedLocals_selfReference.ts, 13, 9))
>this.m : Symbol(P.m, Decl(noUnusedLocals_selfReference.ts, 13, 9))
>this : Symbol(P, Decl(noUnusedLocals_selfReference.ts, 10, 22))
>m : Symbol(P.m, Decl(noUnusedLocals_selfReference.ts, 13, 9))
>P : Symbol(P, Decl(noUnusedLocals_selfReference.ts, 15, 22))
>m : Symbol(P.m, Decl(noUnusedLocals_selfReference.ts, 18, 9))
>this.m : Symbol(P.m, Decl(noUnusedLocals_selfReference.ts, 18, 9))
>this : Symbol(P, Decl(noUnusedLocals_selfReference.ts, 15, 22))
>m : Symbol(P.m, Decl(noUnusedLocals_selfReference.ts, 18, 9))
P;
>P : Symbol(P, Decl(noUnusedLocals_selfReference.ts, 10, 22))
>P : Symbol(P, Decl(noUnusedLocals_selfReference.ts, 15, 22))

View File

@@ -1,10 +1,19 @@
=== tests/cases/compiler/noUnusedLocals_selfReference.ts ===
export {}; // Make this a module scope, so these are local variables.
function f() { f; }
>f : () => void
function f() {
>f : () => void
f;
>f : () => void
function g() {
>g : () => void
g;
>g : () => void
}
}
class C {
>C : C

View File

@@ -2,7 +2,12 @@
export {}; // Make this a module scope, so these are local variables.
function f() { f; }
function f() {
f;
function g() {
g;
}
}
class C {
m() { C; }
}