Merge branch 'master' of github.com:babel/babel

This commit is contained in:
Sebastian McKenzie
2015-04-12 20:59:26 -07:00
10 changed files with 129 additions and 2 deletions

View File

@@ -226,7 +226,7 @@ pp.parseSubscripts = function(base, start, noCalls) {
} else if (!noCalls && this.eat(tt.parenL)) {
let node = this.startNodeAt(start)
node.callee = base
node.arguments = this.parseExprList(tt.parenR, false)
node.arguments = this.parseExprList(tt.parenR, this.options.features["es7.trailingFunctionCommas"])
return this.parseSubscripts(this.finishNode(node, "CallExpression"), start, noCalls)
} else if (this.type === tt.backQuote) {
let node = this.startNodeAt(start)

View File

@@ -458,7 +458,7 @@ pp.parseFunction = function(node, isStatement, allowExpressionBody, isAsync) {
pp.parseFunctionParams = function(node) {
this.expect(tt.parenL)
node.params = this.parseBindingList(tt.parenR, false, false)
node.params = this.parseBindingList(tt.parenR, false, this.options.features["es7.trailingFunctionCommas"])
}
// Parse a class declaration or literal (depending on the

View File

@@ -0,0 +1,7 @@
export var metadata = {
stage: 1
};
export function check() {
return false;
}

View File

@@ -1,5 +1,6 @@
export default {
"es7.classProperties": require("./es7/class-properties"),
"es7.trailingFunctionCommas": require("./es7/trailing-function-commas"),
"es7.asyncFunctions": require("./es7/async-functions"),
"es7.decorators": require("./es7/decorators"),

View File

@@ -3000,3 +3000,99 @@ test('export * as foo from "bar";', {
sourceType: "module",
features: { "es7.exportExtensions": true }
});
// ES7: Trailing Function Commas
test("log(n, '=', 2,);", {
type: "Program",
start: 0,
end: 16,
body: [{
type: "ExpressionStatement",
start: 0,
end: 16,
expression: {
type: "CallExpression",
callee: {
type: "Identifier",
name: "log",
start: 0,
end: 3
},
arguments: [{
type: "Identifier",
name: "n",
start: 4,
end: 5
}, {
type: "Literal",
value: "=",
raw: "'='",
start: 7,
end: 10
}, {
type: "Literal",
raw: "2",
value: 2,
start: 12,
end: 13
}]
}
}]
}, {
ecmaVersion: 7,
features: { "es7.trailingFunctionCommas": true }
});
test("function log(n, op, val,) { }", {
type: "Program",
start: 0,
end: 29,
body: [{
type: "FunctionDeclaration",
id: {
type: "Identifier",
name: "log",
start: 9,
end: 12
},
start: 0,
end: 29,
expression: false,
params: [{
type: "Identifier",
name: "n",
start: 13,
end: 14
}, {
type: "Identifier",
name: "op",
start: 16,
end: 18
}, {
type: "Identifier",
name: "val",
start: 20,
end: 23
}],
body: {
type: "BlockStatement",
start: 26,
end: 29,
body: []
}
}]
}, {
ecmaVersion: 7,
features: { "es7.trailingFunctionCommas": true }
});
testFail("log(,);", "Unexpected token (1:4)", {
ecmaVersion: 7,
features: { "es7.trailingFunctionCommas": true }
});
testFail("function log(,) { }", "Unexpected token (1:13)", {
ecmaVersion: 7,
features: { "es7.trailingFunctionCommas": true }
});

View File

@@ -0,0 +1,4 @@
Math.max(1,
2,
3,
);

View File

@@ -0,0 +1,3 @@
"use strict";
Math.max(1, 2, 3);

View File

@@ -0,0 +1,8 @@
function thisIsAFunctionWithAVeryLongNameAndWayTooManyParameters(
thisIsTheFirstParameter, andThisOneIsRelatedToIt,
butNotThisOne,
andNeitherThis,
inFactThereArentThatManyParameters,
) {
throw null;
}

View File

@@ -0,0 +1,5 @@
"use strict";
function thisIsAFunctionWithAVeryLongNameAndWayTooManyParameters(thisIsTheFirstParameter, andThisOneIsRelatedToIt, butNotThisOne, andNeitherThis, inFactThereArentThatManyParameters) {
throw null;
}

View File

@@ -0,0 +1,3 @@
{
"optional": ["es7.trailingFunctionCommas"]
}