diff --git a/src/acorn/src/expression.js b/src/acorn/src/expression.js index d1d0b7457a..7662b4cdba 100755 --- a/src/acorn/src/expression.js +++ b/src/acorn/src/expression.js @@ -224,7 +224,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) diff --git a/src/acorn/src/statement.js b/src/acorn/src/statement.js index 08ae517d3d..2a73536bca 100755 --- a/src/acorn/src/statement.js +++ b/src/acorn/src/statement.js @@ -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 diff --git a/src/babel/transformation/transformers/es7/trailing-function-commas.js b/src/babel/transformation/transformers/es7/trailing-function-commas.js new file mode 100644 index 0000000000..486130cebe --- /dev/null +++ b/src/babel/transformation/transformers/es7/trailing-function-commas.js @@ -0,0 +1,7 @@ +export var metadata = { + stage: 1 +}; + +export function check() { + return false; +} diff --git a/src/babel/transformation/transformers/index.js b/src/babel/transformation/transformers/index.js index 42ccc1d6b5..5d94722f50 100644 --- a/src/babel/transformation/transformers/index.js +++ b/src/babel/transformation/transformers/index.js @@ -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"), diff --git a/test/core/fixtures/transformation/es7.trailing-function-commas/call/actual.js b/test/core/fixtures/transformation/es7.trailing-function-commas/call/actual.js new file mode 100644 index 0000000000..a00f52d4c6 --- /dev/null +++ b/test/core/fixtures/transformation/es7.trailing-function-commas/call/actual.js @@ -0,0 +1,4 @@ +Math.max(1, + 2, + 3, +); diff --git a/test/core/fixtures/transformation/es7.trailing-function-commas/call/expected.js b/test/core/fixtures/transformation/es7.trailing-function-commas/call/expected.js new file mode 100644 index 0000000000..2dd6272d57 --- /dev/null +++ b/test/core/fixtures/transformation/es7.trailing-function-commas/call/expected.js @@ -0,0 +1,3 @@ +"use strict"; + +Math.max(1, 2, 3); diff --git a/test/core/fixtures/transformation/es7.trailing-function-commas/declaration/actual.js b/test/core/fixtures/transformation/es7.trailing-function-commas/declaration/actual.js new file mode 100644 index 0000000000..eaedb39571 --- /dev/null +++ b/test/core/fixtures/transformation/es7.trailing-function-commas/declaration/actual.js @@ -0,0 +1,8 @@ +function thisIsAFunctionWithAVeryLongNameAndWayTooManyParameters( + thisIsTheFirstParameter, andThisOneIsRelatedToIt, + butNotThisOne, + andNeitherThis, + inFactThereArentThatManyParameters, +) { + throw null; +} diff --git a/test/core/fixtures/transformation/es7.trailing-function-commas/declaration/expected.js b/test/core/fixtures/transformation/es7.trailing-function-commas/declaration/expected.js new file mode 100644 index 0000000000..08d7e90a5c --- /dev/null +++ b/test/core/fixtures/transformation/es7.trailing-function-commas/declaration/expected.js @@ -0,0 +1,5 @@ +"use strict"; + +function thisIsAFunctionWithAVeryLongNameAndWayTooManyParameters(thisIsTheFirstParameter, andThisOneIsRelatedToIt, butNotThisOne, andNeitherThis, inFactThereArentThatManyParameters) { + throw null; +} diff --git a/test/core/fixtures/transformation/es7.trailing-function-commas/options.json b/test/core/fixtures/transformation/es7.trailing-function-commas/options.json new file mode 100644 index 0000000000..08f3cc3d41 --- /dev/null +++ b/test/core/fixtures/transformation/es7.trailing-function-commas/options.json @@ -0,0 +1,3 @@ +{ + "optional": ["es7.trailingFunctionCommas"] +}