diff --git a/src/compiler/printer.ts b/src/compiler/printer.ts index 501b03425df..704e9ff5f81 100644 --- a/src/compiler/printer.ts +++ b/src/compiler/printer.ts @@ -1981,7 +1981,9 @@ const _super = (function (geti, seti) { // } // "comment1" is not considered to be leading comment for node.initializer // but rather a trailing comment on the previous node. - emitLeadingComments(node.initializer, getTrailingComments(collapseRangeToStart(node.initializer))); + if (!shouldSkipLeadingCommentsForNode(node.initializer)) { + emitLeadingComments(node.initializer, getTrailingComments(collapseRangeToStart(node.initializer))); + } emitExpression(node.initializer); } diff --git a/src/compiler/transformers/es6.ts b/src/compiler/transformers/es6.ts index adf54d5ea08..fbd7dd356e3 100644 --- a/src/compiler/transformers/es6.ts +++ b/src/compiler/transformers/es6.ts @@ -1175,13 +1175,25 @@ namespace ts { const propertyName = createExpressionForPropertyName(visitNode(firstAccessor.name, visitor, isPropertyName)); propertyName.end = firstAccessor.name.end; + let getAccessorExpression: FunctionExpression; + if (getAccessor) { + getAccessorExpression = transformFunctionLikeToExpression(getAccessor, /*location*/ getAccessor, /*name*/ undefined); + setNodeEmitFlags(getAccessorExpression, NodeEmitFlags.NoLeadingComments | getNodeEmitFlags(getAccessorExpression)); + } + + let setAccessorExpression: FunctionExpression; + if (setAccessor) { + setAccessorExpression = transformFunctionLikeToExpression(setAccessor, /*location*/ setAccessor, /*name*/ undefined); + setNodeEmitFlags(setAccessorExpression, NodeEmitFlags.NoLeadingComments | getNodeEmitFlags(setAccessorExpression)); + } + return setNodeEmitFlags( createObjectDefineProperty( target, propertyName, /*descriptor*/ { - get: getAccessor && transformFunctionLikeToExpression(getAccessor, /*location*/ getAccessor, /*name*/ undefined), - set: setAccessor && transformFunctionLikeToExpression(setAccessor, /*location*/ setAccessor, /*name*/ undefined), + get: getAccessorExpression, + set: setAccessorExpression, enumerable: true, configurable: true }, @@ -2283,9 +2295,11 @@ namespace ts { // Methods on classes are handled in visitClassDeclaration/visitClassExpression. // Methods with computed property names are handled in visitObjectLiteralExpression. Debug.assert(!isComputedPropertyName(node.name)); + const functionExpression = transformFunctionLikeToExpression(node, /*location*/ node, /*name*/ undefined); + setNodeEmitFlags(functionExpression, NodeEmitFlags.NoLeadingComments | getNodeEmitFlags(functionExpression)); return createPropertyAssignment( node.name, - transformFunctionLikeToExpression(node, /*location*/ node, /*name*/ undefined), + functionExpression, /*location*/ node ); } diff --git a/tests/baselines/reference/callSignaturesWithParameterInitializers2.js b/tests/baselines/reference/callSignaturesWithParameterInitializers2.js index 10fd481d7c6..fd1dd369010 100644 --- a/tests/baselines/reference/callSignaturesWithParameterInitializers2.js +++ b/tests/baselines/reference/callSignaturesWithParameterInitializers2.js @@ -48,8 +48,7 @@ var b = { foo: function (x) { if (x === void 0) { x = 1; } }, - foo: // error - function (x) { + foo: function (x) { if (x === void 0) { x = 1; } } }; diff --git a/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js b/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js index 92a7f353ba5..57df8ce2883 100644 --- a/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js +++ b/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.js @@ -103,8 +103,7 @@ var C = (function () { function C() { } // ok Object.defineProperty(C.prototype, "X", { - get: // error - function () { + get: function () { return ''; }, set: function (v) { } // ok