mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 12:51:30 -05:00
Merge pull request #273 from Microsoft/es3HatesTrailingCommas
No longer emit trailing comma on object literals for ES3.
This commit is contained in:
@@ -2106,14 +2106,20 @@ module ts {
|
||||
function parseObjectLiteral(): ObjectLiteral {
|
||||
var node = <ObjectLiteral>createNode(SyntaxKind.ObjectLiteral);
|
||||
parseExpected(SyntaxKind.OpenBraceToken);
|
||||
if (scanner.hasPrecedingLineBreak()) node.flags |= NodeFlags.MultiLine;
|
||||
node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, TrailingCommaBehavior.Preserve);
|
||||
if (scanner.hasPrecedingLineBreak()) {
|
||||
node.flags |= NodeFlags.MultiLine;
|
||||
}
|
||||
|
||||
// ES3 itself does not accept a trailing comma in an object literal, however, we'd like to preserve it in ES5.
|
||||
var trailingCommaBehavior = languageVersion === ScriptTarget.ES3 ? TrailingCommaBehavior.Allow : TrailingCommaBehavior.Preserve;
|
||||
|
||||
node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, trailingCommaBehavior);
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
|
||||
var seen: Map<SymbolFlags> = {};
|
||||
var Property = 1;
|
||||
var GetAccessor = 2;
|
||||
var SetAccesor = 4;
|
||||
var SetAccesor = 4;
|
||||
var GetOrSetAccessor = GetAccessor | SetAccesor;
|
||||
forEach(node.properties, (p: Declaration) => {
|
||||
if (p.kind === SyntaxKind.OmittedExpression) {
|
||||
|
||||
@@ -50,7 +50,7 @@ b3 = {
|
||||
g: function (s) {
|
||||
return 0;
|
||||
},
|
||||
m: 0,
|
||||
m: 0
|
||||
};
|
||||
b3 = {
|
||||
f: function (n) {
|
||||
@@ -58,13 +58,13 @@ b3 = {
|
||||
},
|
||||
g: function (s) {
|
||||
return 0;
|
||||
},
|
||||
}
|
||||
};
|
||||
b3 = {
|
||||
f: function (n) {
|
||||
return 0;
|
||||
},
|
||||
m: 0,
|
||||
m: 0
|
||||
};
|
||||
b3 = {
|
||||
f: function (n) {
|
||||
@@ -77,7 +77,7 @@ b3 = {
|
||||
n: 0,
|
||||
k: function (a) {
|
||||
return null;
|
||||
},
|
||||
}
|
||||
};
|
||||
b3 = {
|
||||
f: function (n) {
|
||||
@@ -89,5 +89,5 @@ b3 = {
|
||||
n: 0,
|
||||
k: function (a) {
|
||||
return null;
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
@@ -16,5 +16,5 @@ var Person = makeClass(
|
||||
var Person = makeClass({
|
||||
initialize: function (name) {
|
||||
this.name = name;
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
@@ -380,7 +380,7 @@ var bigObject = {
|
||||
var: 0,
|
||||
void: 0,
|
||||
while: 0,
|
||||
with: 0,
|
||||
with: 0
|
||||
};
|
||||
var bigClass = (function () {
|
||||
function bigClass() {
|
||||
|
||||
@@ -21,7 +21,7 @@ var m1;
|
||||
})(m1 || (m1 = {}));
|
||||
var d = {
|
||||
m1: { m: m1 },
|
||||
m2: { c: m1.c },
|
||||
m2: { c: m1.c }
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -26,14 +26,14 @@ y = {
|
||||
var x;
|
||||
var y;
|
||||
x = {
|
||||
s: function (t) { return t * t; },
|
||||
s: function (t) { return t * t; }
|
||||
};
|
||||
x = {
|
||||
0: function (t) { return t * t; },
|
||||
0: function (t) { return t * t; }
|
||||
};
|
||||
y = {
|
||||
s: function (t) { return t * t; },
|
||||
s: function (t) { return t * t; }
|
||||
};
|
||||
y = {
|
||||
0: function (t) { return t * t; },
|
||||
0: function (t) { return t * t; }
|
||||
};
|
||||
|
||||
@@ -25,5 +25,5 @@ var s = $.extend({
|
||||
dataType: "json",
|
||||
converters: { "text json": "" },
|
||||
traditional: true,
|
||||
timeout: 12,
|
||||
timeout: 12
|
||||
}, "");
|
||||
|
||||
@@ -77,7 +77,7 @@ var r4 = a["~!@#$%^&*()_+{}|:'<>?\/.,`"];
|
||||
var b = {
|
||||
" ": 1,
|
||||
"a b": "",
|
||||
"~!@#$%^&*()_+{}|:'<>?\/.,`": 1,
|
||||
"~!@#$%^&*()_+{}|:'<>?\/.,`": 1
|
||||
};
|
||||
var r = b[" "];
|
||||
var r2 = b[" "];
|
||||
|
||||
@@ -44,5 +44,5 @@ var b = {
|
||||
foo: function (x) {
|
||||
},
|
||||
foo: function (x) {
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
@@ -101,13 +101,13 @@ var A = (function () {
|
||||
this.prop4 = {
|
||||
a: function () {
|
||||
return this;
|
||||
},
|
||||
}
|
||||
};
|
||||
this.prop5 = function () {
|
||||
return {
|
||||
a: function () {
|
||||
return this;
|
||||
},
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
25
tests/baselines/reference/trailingCommasES3.js
Normal file
25
tests/baselines/reference/trailingCommasES3.js
Normal file
@@ -0,0 +1,25 @@
|
||||
//// [trailingCommasES3.ts]
|
||||
|
||||
var o1 = { a: 1, b: 2 };
|
||||
var o2 = { a: 1, b: 2, };
|
||||
var o3 = { a: 1, };
|
||||
var o4 = {};
|
||||
|
||||
var a1 = [1, 2];
|
||||
var a2 = [1, 2, ];
|
||||
var a3 = [1, ];
|
||||
var a4 = [];
|
||||
var a5 = [1, , ];
|
||||
var a6 = [, , ];
|
||||
|
||||
//// [trailingCommasES3.js]
|
||||
var o1 = { a: 1, b: 2 };
|
||||
var o2 = { a: 1, b: 2 };
|
||||
var o3 = { a: 1 };
|
||||
var o4 = {};
|
||||
var a1 = [1, 2];
|
||||
var a2 = [1, 2, ];
|
||||
var a3 = [1, ];
|
||||
var a4 = [];
|
||||
var a5 = [1, , ];
|
||||
var a6 = [, , ];
|
||||
25
tests/baselines/reference/trailingCommasES5.js
Normal file
25
tests/baselines/reference/trailingCommasES5.js
Normal file
@@ -0,0 +1,25 @@
|
||||
//// [trailingCommasES5.ts]
|
||||
|
||||
var o1 = { a: 1, b: 2 };
|
||||
var o2 = { a: 1, b: 2, };
|
||||
var o3 = { a: 1, };
|
||||
var o4 = {};
|
||||
|
||||
var a1 = [1, 2];
|
||||
var a2 = [1, 2, ];
|
||||
var a3 = [1, ];
|
||||
var a4 = [];
|
||||
var a5 = [1, , ];
|
||||
var a6 = [, , ];
|
||||
|
||||
//// [trailingCommasES5.js]
|
||||
var o1 = { a: 1, b: 2 };
|
||||
var o2 = { a: 1, b: 2, };
|
||||
var o3 = { a: 1, };
|
||||
var o4 = {};
|
||||
var a1 = [1, 2];
|
||||
var a2 = [1, 2, ];
|
||||
var a3 = [1, ];
|
||||
var a4 = [];
|
||||
var a5 = [1, , ];
|
||||
var a6 = [, , ];
|
||||
13
tests/cases/compiler/trailingCommasES3.ts
Normal file
13
tests/cases/compiler/trailingCommasES3.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
// @target: es3
|
||||
|
||||
var o1 = { a: 1, b: 2 };
|
||||
var o2 = { a: 1, b: 2, };
|
||||
var o3 = { a: 1, };
|
||||
var o4 = {};
|
||||
|
||||
var a1 = [1, 2];
|
||||
var a2 = [1, 2, ];
|
||||
var a3 = [1, ];
|
||||
var a4 = [];
|
||||
var a5 = [1, , ];
|
||||
var a6 = [, , ];
|
||||
13
tests/cases/compiler/trailingCommasES5.ts
Normal file
13
tests/cases/compiler/trailingCommasES5.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
// @target: es5
|
||||
|
||||
var o1 = { a: 1, b: 2 };
|
||||
var o2 = { a: 1, b: 2, };
|
||||
var o3 = { a: 1, };
|
||||
var o4 = {};
|
||||
|
||||
var a1 = [1, 2];
|
||||
var a2 = [1, 2, ];
|
||||
var a3 = [1, ];
|
||||
var a4 = [];
|
||||
var a5 = [1, , ];
|
||||
var a6 = [, , ];
|
||||
Reference in New Issue
Block a user