[Transforms] Fix emit comment in synthesized function expression (#8234)

* Do not emit leading comment of synthesized function expression in object literal property assignment

* Update baselines
This commit is contained in:
Yui
2016-04-20 20:36:11 -07:00
parent 3667b300ec
commit 4119a3f5db
4 changed files with 22 additions and 8 deletions
+3 -1
View File
@@ -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);
}
+17 -3
View File
@@ -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
);
}
@@ -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; }
}
};
@@ -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