diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index c827d4c9159..9e28d418d96 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1989,7 +1989,14 @@ module ts { } function emitNode(node: Node) { - if (!node || node.flags & NodeFlags.Ambient) return; + if (!node) { + return; + } + + if (node.flags & NodeFlags.Ambient) { + return emitPinnedOrTripleSlashComments(node); + } + switch (node.kind) { case SyntaxKind.Identifier: return emitIdentifier(node); diff --git a/tests/baselines/reference/commentOnAmbientClass1.js b/tests/baselines/reference/commentOnAmbientClass1.js index 38ce0d345be..beacc71335c 100644 --- a/tests/baselines/reference/commentOnAmbientClass1.js +++ b/tests/baselines/reference/commentOnAmbientClass1.js @@ -1,10 +1,20 @@ -//// [commentOnAmbientClass1.ts] +//// [tests/cases/compiler/commentOnAmbientClass1.ts] //// + +//// [a.ts] /*! Keep this pinned comment */ declare class C { } // Don't keep this comment. declare class D { +} + +//// [b.ts] +/// +declare class E extends C { } -//// [commentOnAmbientClass1.js] +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientClass1.types b/tests/baselines/reference/commentOnAmbientClass1.types index f7b9f206f0d..44c0334ef6c 100644 --- a/tests/baselines/reference/commentOnAmbientClass1.types +++ b/tests/baselines/reference/commentOnAmbientClass1.types @@ -1,4 +1,10 @@ -=== tests/cases/compiler/commentOnAmbientClass1.ts === +=== tests/cases/compiler/b.ts === +/// +declare class E extends C { +>E : E +>C : C +} +=== tests/cases/compiler/a.ts === /*! Keep this pinned comment */ declare class C { >C : C @@ -8,3 +14,4 @@ declare class C { declare class D { >D : D } + diff --git a/tests/baselines/reference/commentOnAmbientEnum.js b/tests/baselines/reference/commentOnAmbientEnum.js new file mode 100644 index 00000000000..d602c68a0e5 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientEnum.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/commentOnAmbientEnum.ts] //// + +//// [a.ts] +/*! Keep this pinned comment */ +declare enum C { + a, + b, + c +} + +// Don't keep this comment. +declare enum D { +} + +//// [b.ts] +/// +declare enum E { +} + +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientEnum.types b/tests/baselines/reference/commentOnAmbientEnum.types new file mode 100644 index 00000000000..4a0193b7937 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientEnum.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/b.ts === +/// +declare enum E { +>E : E +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare enum C { +>C : C + + a, +>a : C + + b, +>b : C + + c +>c : C +} + +// Don't keep this comment. +declare enum D { +>D : D +} + diff --git a/tests/baselines/reference/commentOnAmbientModule.js b/tests/baselines/reference/commentOnAmbientModule.js new file mode 100644 index 00000000000..d5a536302b5 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientModule.js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/commentOnAmbientModule.ts] //// + +//// [a.ts] +/*! Keep this pinned comment */ +declare module C { + function foo(); +} + +// Don't keep this comment. +declare module D { + class bar { } +} + +//// [b.ts] +/// +declare module E { + class foobar extends D.bar { + foo(); + } +} + +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientModule.types b/tests/baselines/reference/commentOnAmbientModule.types new file mode 100644 index 00000000000..99d86cc6a9b --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientModule.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/b.ts === +/// +declare module E { +>E : typeof E + + class foobar extends D.bar { +>foobar : foobar +>D : D +>bar : bar + + foo(); +>foo : () => any + } +} +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare module C { +>C : typeof C + + function foo(); +>foo : () => any +} + +// Don't keep this comment. +declare module D { +>D : typeof D + + class bar { } +>bar : bar +} + diff --git a/tests/baselines/reference/commentOnAmbientVariable1.js b/tests/baselines/reference/commentOnAmbientVariable1.js index 44e68ad338d..b76fd3345b5 100644 --- a/tests/baselines/reference/commentOnAmbientVariable1.js +++ b/tests/baselines/reference/commentOnAmbientVariable1.js @@ -6,3 +6,4 @@ declare var v: number; declare var y: number; //// [commentOnAmbientVariable1.js] +/*! Keep this pinned comment */ diff --git a/tests/baselines/reference/commentOnAmbientVariable2.js b/tests/baselines/reference/commentOnAmbientVariable2.js index 091add41ae4..8aacecae0ef 100644 --- a/tests/baselines/reference/commentOnAmbientVariable2.js +++ b/tests/baselines/reference/commentOnAmbientVariable2.js @@ -11,4 +11,5 @@ x = 2; //// [commentOnAmbientVariable2_1.js] var y = 1; //// [commentOnAmbientVariable2_2.js] +/// x = 2; diff --git a/tests/baselines/reference/commentOnAmbientfunction.js b/tests/baselines/reference/commentOnAmbientfunction.js new file mode 100644 index 00000000000..6290d407727 --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientfunction.js @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/commentOnAmbientfunction.ts] //// + +//// [a.ts] +/*! Keep this pinned comment */ +declare function foo(); + +// Don't keep this comment. +declare function bar(); + +//// [b.ts] +/// +declare function foobar(a: typeof foo): typeof bar; + +//// [a.js] +/*! Keep this pinned comment */ +//// [b.js] +/// diff --git a/tests/baselines/reference/commentOnAmbientfunction.types b/tests/baselines/reference/commentOnAmbientfunction.types new file mode 100644 index 00000000000..f75f7b377fb --- /dev/null +++ b/tests/baselines/reference/commentOnAmbientfunction.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/b.ts === +/// +declare function foobar(a: typeof foo): typeof bar; +>foobar : (a: () => any) => () => any +>a : () => any +>foo : () => any +>bar : () => any + +=== tests/cases/compiler/a.ts === +/*! Keep this pinned comment */ +declare function foo(); +>foo : () => any + +// Don't keep this comment. +declare function bar(); +>bar : () => any + diff --git a/tests/baselines/reference/crashInResolveInterface.js b/tests/baselines/reference/crashInResolveInterface.js index 6feb855c46f..85b6217726a 100644 --- a/tests/baselines/reference/crashInResolveInterface.js +++ b/tests/baselines/reference/crashInResolveInterface.js @@ -22,3 +22,4 @@ interface C { var q1; var x = q1.each(function (x) { return c.log(x); }); //// [file2.js] +/// diff --git a/tests/baselines/reference/emitMemberAccessExpression.js b/tests/baselines/reference/emitMemberAccessExpression.js index bf7da2505de..9488bbac5f0 100644 --- a/tests/baselines/reference/emitMemberAccessExpression.js +++ b/tests/baselines/reference/emitMemberAccessExpression.js @@ -49,6 +49,8 @@ var Microsoft; /// "use strict"; //// [emitMemberAccessExpression_file3.js] +/// +/// var Microsoft; (function (Microsoft) { (function (PeopleAtWork) { diff --git a/tests/baselines/reference/reuseInnerModuleMember.js b/tests/baselines/reference/reuseInnerModuleMember.js index 12d0aaf14ca..8999ccea633 100644 --- a/tests/baselines/reference/reuseInnerModuleMember.js +++ b/tests/baselines/reference/reuseInnerModuleMember.js @@ -17,6 +17,7 @@ module bar { //// [reuseInnerModuleMember_0.js] //// [reuseInnerModuleMember_1.js] +/// var bar; (function (bar) { var x; diff --git a/tests/cases/compiler/commentOnAmbientClass1.ts b/tests/cases/compiler/commentOnAmbientClass1.ts index 942be1d6a38..c13e4193512 100644 --- a/tests/cases/compiler/commentOnAmbientClass1.ts +++ b/tests/cases/compiler/commentOnAmbientClass1.ts @@ -1,7 +1,13 @@ +//@filename: a.ts /*! Keep this pinned comment */ declare class C { } // Don't keep this comment. declare class D { +} + +//@filename: b.ts +/// +declare class E extends C { } \ No newline at end of file diff --git a/tests/cases/compiler/commentOnAmbientEnum.ts b/tests/cases/compiler/commentOnAmbientEnum.ts new file mode 100644 index 00000000000..a9ebe107c98 --- /dev/null +++ b/tests/cases/compiler/commentOnAmbientEnum.ts @@ -0,0 +1,16 @@ +//@filename: a.ts +/*! Keep this pinned comment */ +declare enum C { + a, + b, + c +} + +// Don't keep this comment. +declare enum D { +} + +//@filename: b.ts +/// +declare enum E { +} \ No newline at end of file diff --git a/tests/cases/compiler/commentOnAmbientModule.ts b/tests/cases/compiler/commentOnAmbientModule.ts new file mode 100644 index 00000000000..41e12a61902 --- /dev/null +++ b/tests/cases/compiler/commentOnAmbientModule.ts @@ -0,0 +1,18 @@ +//@filename: a.ts +/*! Keep this pinned comment */ +declare module C { + function foo(); +} + +// Don't keep this comment. +declare module D { + class bar { } +} + +//@filename: b.ts +/// +declare module E { + class foobar extends D.bar { + foo(); + } +} \ No newline at end of file diff --git a/tests/cases/compiler/commentOnAmbientfunction.ts b/tests/cases/compiler/commentOnAmbientfunction.ts new file mode 100644 index 00000000000..d549303fc4f --- /dev/null +++ b/tests/cases/compiler/commentOnAmbientfunction.ts @@ -0,0 +1,10 @@ +//@filename: a.ts +/*! Keep this pinned comment */ +declare function foo(); + +// Don't keep this comment. +declare function bar(); + +//@filename: b.ts +/// +declare function foobar(a: typeof foo): typeof bar; \ No newline at end of file