From 10616560da2f0cfd3749587836aaa927cb057eec Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 14 Apr 2016 11:32:33 -0700 Subject: [PATCH] Fix the incorrectly assigned arrow expression trailing comments Fixes #8041 --- src/compiler/printer.ts | 7 +++++-- src/compiler/transformers/es6.ts | 1 + .../reference/disallowLineTerminatorBeforeArrow.js | 4 +--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/compiler/printer.ts b/src/compiler/printer.ts index e26a36233b7..451e002d5bf 100644 --- a/src/compiler/printer.ts +++ b/src/compiler/printer.ts @@ -1505,8 +1505,11 @@ const _super = (function (geti, seti) { const endingLine = writer.getLine(); emitLexicalEnvironment(endLexicalEnvironment(), /*newLine*/ startingLine !== endingLine); - const range = collapseRangeToEnd(body.statements); - emitLeadingComments(range, getLeadingComments(range)); + // Do not emit leading comments if the body belongs to arrow expression + if (!body.original || isBlock(body.original)) { + const range = collapseRangeToEnd(body.statements); + emitLeadingComments(range, getLeadingComments(range)); + } decreaseIndent(); } diff --git a/src/compiler/transformers/es6.ts b/src/compiler/transformers/es6.ts index 7b769889dca..0d0ab884cca 100644 --- a/src/compiler/transformers/es6.ts +++ b/src/compiler/transformers/es6.ts @@ -1271,6 +1271,7 @@ namespace ts { setNodeEmitFlags(block, NodeEmitFlags.SingleLine); } + setOriginalNode(block, node.body); return block; } diff --git a/tests/baselines/reference/disallowLineTerminatorBeforeArrow.js b/tests/baselines/reference/disallowLineTerminatorBeforeArrow.js index 55fba8115e0..1044146ccd0 100644 --- a/tests/baselines/reference/disallowLineTerminatorBeforeArrow.js +++ b/tests/baselines/reference/disallowLineTerminatorBeforeArrow.js @@ -110,9 +110,7 @@ var f8 = function (x, y, z) { var f9 = function (a) { return a; }; var f10 = function (a) { return a; }; var f11 = function (a) { return a; }; -var f12 = function (a) { - return a; -}; +var f12 = function (a) { return a; }; // Should be valid. var f11 = function (a) { return a; }; // Should be valid.