-
Notifications
You must be signed in to change notification settings - Fork 12.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #10013 from Microsoft/resolve_entity_name
Use brand types to clear up confusion about entity name expressions
- Loading branch information
Showing
14 changed files
with
705 additions
and
103 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
//// [tests/cases/compiler/exportDefaultProperty.ts] //// | ||
|
||
//// [declarations.d.ts] | ||
// This test is just like exportEqualsProperty, but with `export default`. | ||
|
||
declare namespace foo.bar { | ||
export type X = number; | ||
export const X: number; | ||
} | ||
|
||
declare module "foobar" { | ||
export default foo.bar; | ||
} | ||
|
||
declare module "foobarx" { | ||
export default foo.bar.X; | ||
} | ||
|
||
//// [a.ts] | ||
namespace A { | ||
export class B { constructor(b: number) {} } | ||
export namespace B { export const b: number = 0; } | ||
} | ||
export default A.B; | ||
|
||
//// [b.ts] | ||
export default "foo".length; | ||
|
||
//// [index.ts] | ||
/// <reference path="declarations.d.ts" /> | ||
import fooBar from "foobar"; | ||
import X = fooBar.X; | ||
import X2 from "foobarx"; | ||
const x: X = X; | ||
const x2: X2 = X2; | ||
|
||
import B from "./a"; | ||
const b: B = new B(B.b); | ||
|
||
import fooLength from "./b"; | ||
fooLength + 1; | ||
|
||
|
||
//// [a.js] | ||
"use strict"; | ||
var A; | ||
(function (A) { | ||
var B = (function () { | ||
function B(b) { | ||
} | ||
return B; | ||
}()); | ||
A.B = B; | ||
var B; | ||
(function (B) { | ||
B.b = 0; | ||
})(B = A.B || (A.B = {})); | ||
})(A || (A = {})); | ||
exports.__esModule = true; | ||
exports["default"] = A.B; | ||
//// [b.js] | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports["default"] = "foo".length; | ||
//// [index.js] | ||
"use strict"; | ||
/// <reference path="declarations.d.ts" /> | ||
var foobar_1 = require("foobar"); | ||
var X = foobar_1["default"].X; | ||
var foobarx_1 = require("foobarx"); | ||
var x = X; | ||
var x2 = foobarx_1["default"]; | ||
var a_1 = require("./a"); | ||
var b = new a_1["default"](a_1["default"].b); | ||
var b_1 = require("./b"); | ||
b_1["default"] + 1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
=== tests/cases/compiler/index.ts === | ||
/// <reference path="declarations.d.ts" /> | ||
import fooBar from "foobar"; | ||
>fooBar : Symbol(fooBar, Decl(index.ts, 1, 6)) | ||
|
||
import X = fooBar.X; | ||
>X : Symbol(X, Decl(index.ts, 1, 28)) | ||
>fooBar : Symbol(fooBar, Decl(index.ts, 1, 6)) | ||
>X : Symbol(fooBar.X, Decl(declarations.d.ts, 2, 27), Decl(declarations.d.ts, 4, 16)) | ||
|
||
import X2 from "foobarx"; | ||
>X2 : Symbol(X2, Decl(index.ts, 3, 6)) | ||
|
||
const x: X = X; | ||
>x : Symbol(x, Decl(index.ts, 4, 5)) | ||
>X : Symbol(X, Decl(index.ts, 1, 28)) | ||
>X : Symbol(X, Decl(index.ts, 1, 28)) | ||
|
||
const x2: X2 = X2; | ||
>x2 : Symbol(x2, Decl(index.ts, 5, 5)) | ||
>X2 : Symbol(X2, Decl(index.ts, 3, 6)) | ||
>X2 : Symbol(X2, Decl(index.ts, 3, 6)) | ||
|
||
import B from "./a"; | ||
>B : Symbol(B, Decl(index.ts, 7, 6)) | ||
|
||
const b: B = new B(B.b); | ||
>b : Symbol(b, Decl(index.ts, 8, 5)) | ||
>B : Symbol(B, Decl(index.ts, 7, 6)) | ||
>B : Symbol(B, Decl(index.ts, 7, 6)) | ||
>B.b : Symbol(B.b, Decl(a.ts, 2, 37)) | ||
>B : Symbol(B, Decl(index.ts, 7, 6)) | ||
>b : Symbol(B.b, Decl(a.ts, 2, 37)) | ||
|
||
import fooLength from "./b"; | ||
>fooLength : Symbol(fooLength, Decl(index.ts, 10, 6)) | ||
|
||
fooLength + 1; | ||
>fooLength : Symbol(fooLength, Decl(index.ts, 10, 6)) | ||
|
||
=== tests/cases/compiler/declarations.d.ts === | ||
// This test is just like exportEqualsProperty, but with `export default`. | ||
|
||
declare namespace foo.bar { | ||
>foo : Symbol(foo, Decl(declarations.d.ts, 0, 0)) | ||
>bar : Symbol(bar, Decl(declarations.d.ts, 2, 22)) | ||
|
||
export type X = number; | ||
>X : Symbol(X, Decl(declarations.d.ts, 2, 27), Decl(declarations.d.ts, 4, 16)) | ||
|
||
export const X: number; | ||
>X : Symbol(X, Decl(declarations.d.ts, 2, 27), Decl(declarations.d.ts, 4, 16)) | ||
} | ||
|
||
declare module "foobar" { | ||
export default foo.bar; | ||
>foo.bar : Symbol(default, Decl(declarations.d.ts, 2, 22)) | ||
>foo : Symbol(foo, Decl(declarations.d.ts, 0, 0)) | ||
>bar : Symbol(default, Decl(declarations.d.ts, 2, 22)) | ||
} | ||
|
||
declare module "foobarx" { | ||
export default foo.bar.X; | ||
>foo.bar.X : Symbol(default, Decl(declarations.d.ts, 2, 27), Decl(declarations.d.ts, 4, 16)) | ||
>foo.bar : Symbol(foo.bar, Decl(declarations.d.ts, 2, 22)) | ||
>foo : Symbol(foo, Decl(declarations.d.ts, 0, 0)) | ||
>bar : Symbol(foo.bar, Decl(declarations.d.ts, 2, 22)) | ||
>X : Symbol(default, Decl(declarations.d.ts, 2, 27), Decl(declarations.d.ts, 4, 16)) | ||
} | ||
|
||
=== tests/cases/compiler/a.ts === | ||
namespace A { | ||
>A : Symbol(A, Decl(a.ts, 0, 0)) | ||
|
||
export class B { constructor(b: number) {} } | ||
>B : Symbol(B, Decl(a.ts, 0, 13), Decl(a.ts, 1, 48)) | ||
>b : Symbol(b, Decl(a.ts, 1, 33)) | ||
|
||
export namespace B { export const b: number = 0; } | ||
>B : Symbol(B, Decl(a.ts, 0, 13), Decl(a.ts, 1, 48)) | ||
>b : Symbol(b, Decl(a.ts, 2, 37)) | ||
} | ||
export default A.B; | ||
>A.B : Symbol(default, Decl(a.ts, 0, 13), Decl(a.ts, 1, 48)) | ||
>A : Symbol(A, Decl(a.ts, 0, 0)) | ||
>B : Symbol(default, Decl(a.ts, 0, 13), Decl(a.ts, 1, 48)) | ||
|
||
=== tests/cases/compiler/b.ts === | ||
export default "foo".length; | ||
>"foo".length : Symbol(String.length, Decl(lib.d.ts, --, --)) | ||
>length : Symbol(String.length, Decl(lib.d.ts, --, --)) | ||
|
Oops, something went wrong.