Skip to content

Commit bea7221

Browse files
committed
Ensure we find export default declaration targets if we search for them by name
1 parent b180324 commit bea7221

File tree

7 files changed

+145
-0
lines changed

7 files changed

+145
-0
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,13 @@ module ts {
349349
}
350350
result = undefined;
351351
}
352+
else if (location.kind === SyntaxKind.SourceFile) {
353+
result = getSymbol(getSymbolOfNode(location).exports, "default", meaning & SymbolFlags.ModuleMember);
354+
if (result && (result.flags & meaning) && result.valueDeclaration && (result.valueDeclaration.flags & NodeFlags.Default) && result.valueDeclaration.localSymbol.name === name) {
355+
break loop;
356+
}
357+
result = undefined;
358+
}
352359
break;
353360
case SyntaxKind.EnumDeclaration:
354361
if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & SymbolFlags.EnumMember)) {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//// [es5ExportDefaultClassDeclaration3.ts]
2+
3+
var before: C = new C();
4+
5+
export default class C {
6+
method(): C {
7+
return new C();
8+
}
9+
}
10+
11+
var after: C = new C();
12+
13+
var t: typeof C = C;
14+
15+
16+
17+
//// [es5ExportDefaultClassDeclaration3.js]
18+
var before = new C();
19+
var C = (function () {
20+
function C() {
21+
}
22+
C.prototype.method = function () {
23+
return new C();
24+
};
25+
return C;
26+
})();
27+
exports.default = C;
28+
var after = new C();
29+
var t = C;
30+
31+
32+
//// [es5ExportDefaultClassDeclaration3.d.ts]
33+
export default class C {
34+
method(): C;
35+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
=== tests/cases/compiler/es5ExportDefaultClassDeclaration3.ts ===
2+
3+
var before: C = new C();
4+
>before : C
5+
>C : C
6+
>new C() : C
7+
>C : typeof C
8+
9+
export default class C {
10+
>C : C
11+
12+
method(): C {
13+
>method : () => C
14+
>C : C
15+
16+
return new C();
17+
>new C() : C
18+
>C : typeof C
19+
}
20+
}
21+
22+
var after: C = new C();
23+
>after : C
24+
>C : C
25+
>new C() : C
26+
>C : typeof C
27+
28+
var t: typeof C = C;
29+
>t : typeof C
30+
>C : typeof C
31+
>C : typeof C
32+
33+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [es5ExportDefaultFunctionDeclaration3.ts]
2+
3+
var before: typeof func = func();
4+
5+
export default function func(): typeof func {
6+
return func;
7+
}
8+
9+
var after: typeof func = func();
10+
11+
//// [es5ExportDefaultFunctionDeclaration3.js]
12+
var before = func();
13+
function func() {
14+
return func;
15+
}
16+
exports.default = func;
17+
var after = func();
18+
19+
20+
//// [es5ExportDefaultFunctionDeclaration3.d.ts]
21+
export default function func(): typeof func;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== tests/cases/compiler/es5ExportDefaultFunctionDeclaration3.ts ===
2+
3+
var before: typeof func = func();
4+
>before : () => typeof func
5+
>func : () => typeof func
6+
>func() : () => typeof func
7+
>func : () => typeof func
8+
9+
export default function func(): typeof func {
10+
>func : () => typeof func
11+
>func : () => typeof func
12+
13+
return func;
14+
>func : () => typeof func
15+
}
16+
17+
var after: typeof func = func();
18+
>after : () => typeof func
19+
>func : () => typeof func
20+
>func() : () => typeof func
21+
>func : () => typeof func
22+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// @target: es5
2+
// @module: commonjs
3+
// @declaration: true
4+
5+
var before: C = new C();
6+
7+
export default class C {
8+
method(): C {
9+
return new C();
10+
}
11+
}
12+
13+
var after: C = new C();
14+
15+
var t: typeof C = C;
16+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @target: es5
2+
// @module: commonjs
3+
// @declaration: true
4+
5+
var before: typeof func = func();
6+
7+
export default function func(): typeof func {
8+
return func;
9+
}
10+
11+
var after: typeof func = func();

0 commit comments

Comments
 (0)