diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6d21a9b5e3ffc..7f02258815192 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -17244,7 +17244,8 @@ namespace ts { } function checkGrammarForDisallowedTrailingComma(list: NodeArray): boolean { - if (list && list.hasTrailingComma) { + if (list && list.hasTrailingComma && + !(list[0].parent.kind === SyntaxKind.FunctionDeclaration || list[0].parent.kind === SyntaxKind.ArrowFunction)) { const start = list.end - ",".length; const end = list.end; const sourceFile = getSourceFileOfNode(list[0]); diff --git a/tests/baselines/reference/ArrowFunction2.errors.txt b/tests/baselines/reference/ArrowFunction2.errors.txt index 3b9ba21f15af9..c4685cacaca01 100644 --- a/tests/baselines/reference/ArrowFunction2.errors.txt +++ b/tests/baselines/reference/ArrowFunction2.errors.txt @@ -1,12 +1,9 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction2.ts(1,13): error TS2304: Cannot find name 'b'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction2.ts(1,14): error TS1009: Trailing comma not allowed. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction2.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction2.ts (1 errors) ==== var v = (a: b,) => { ~ !!! error TS2304: Cannot find name 'b'. - ~ -!!! error TS1009: Trailing comma not allowed. }; \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList3.errors.txt b/tests/baselines/reference/parserErrorRecovery_ParameterList3.errors.txt deleted file mode 100644 index df73dc51ce15a..0000000000000 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList3.errors.txt +++ /dev/null @@ -1,8 +0,0 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList3.ts(1,13): error TS1009: Trailing comma not allowed. - - -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList3.ts (1 errors) ==== - function f(a,) { - ~ -!!! error TS1009: Trailing comma not allowed. - } \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList3.js b/tests/baselines/reference/parserErrorRecovery_ParameterList3.js deleted file mode 100644 index 4c20e676f40ba..0000000000000 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList3.js +++ /dev/null @@ -1,7 +0,0 @@ -//// [parserErrorRecovery_ParameterList3.ts] -function f(a,) { -} - -//// [parserErrorRecovery_ParameterList3.js] -function f(a) { -} diff --git a/tests/baselines/reference/parserParameterList12.errors.txt b/tests/baselines/reference/parserParameterList12.errors.txt deleted file mode 100644 index 686b29f63b18f..0000000000000 --- a/tests/baselines/reference/parserParameterList12.errors.txt +++ /dev/null @@ -1,8 +0,0 @@ -tests/cases/conformance/parser/ecmascript5/ParameterLists/parserParameterList12.ts(1,13): error TS1009: Trailing comma not allowed. - - -==== tests/cases/conformance/parser/ecmascript5/ParameterLists/parserParameterList12.ts (1 errors) ==== - function F(a,) { - ~ -!!! error TS1009: Trailing comma not allowed. - } \ No newline at end of file diff --git a/tests/baselines/reference/parserParameterList12.symbols b/tests/baselines/reference/parserParameterList12.symbols new file mode 100644 index 0000000000000..efaab7d1b13b1 --- /dev/null +++ b/tests/baselines/reference/parserParameterList12.symbols @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ParameterLists/parserParameterList12.ts === +function F(a,) { +>F : Symbol(F, Decl(parserParameterList12.ts, 0, 0)) +>a : Symbol(a, Decl(parserParameterList12.ts, 0, 11)) +} diff --git a/tests/baselines/reference/parserParameterList12.types b/tests/baselines/reference/parserParameterList12.types new file mode 100644 index 0000000000000..7ff43cd6a15c7 --- /dev/null +++ b/tests/baselines/reference/parserParameterList12.types @@ -0,0 +1,5 @@ +=== tests/cases/conformance/parser/ecmascript5/ParameterLists/parserParameterList12.ts === +function F(a,) { +>F : (a: any) => void +>a : any +} diff --git a/tests/baselines/reference/parserX_ArrowFunction2.errors.txt b/tests/baselines/reference/parserX_ArrowFunction2.errors.txt index 20b4cb45e453c..f2195c4dc2fea 100644 --- a/tests/baselines/reference/parserX_ArrowFunction2.errors.txt +++ b/tests/baselines/reference/parserX_ArrowFunction2.errors.txt @@ -1,12 +1,9 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction2.ts(1,13): error TS2304: Cannot find name 'b'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction2.ts(1,14): error TS1009: Trailing comma not allowed. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction2.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction2.ts (1 errors) ==== var v = (a: b,) => { ~ !!! error TS2304: Cannot find name 'b'. - ~ -!!! error TS1009: Trailing comma not allowed. }; \ No newline at end of file diff --git a/tests/baselines/reference/trailingCommasInFunctionParameter.js b/tests/baselines/reference/trailingCommasInFunctionParameter.js new file mode 100644 index 0000000000000..0aed2d31d2907 --- /dev/null +++ b/tests/baselines/reference/trailingCommasInFunctionParameter.js @@ -0,0 +1,14 @@ +//// [trailingCommasInFunctionParameter.ts] +function f1(x, y,) { +} + +function f2() { + return (x,) => {} +} + +//// [trailingCommasInFunctionParameter.js] +function f1(x, y) { +} +function f2() { + return function (x) { }; +} diff --git a/tests/baselines/reference/trailingCommasInFunctionParameter.symbols b/tests/baselines/reference/trailingCommasInFunctionParameter.symbols new file mode 100644 index 0000000000000..cd3257b46c52b --- /dev/null +++ b/tests/baselines/reference/trailingCommasInFunctionParameter.symbols @@ -0,0 +1,13 @@ +=== tests/cases/conformance/es7/trailingCommasInFunctionParamLists/trailingCommasInFunctionParameter.ts === +function f1(x, y,) { +>f1 : Symbol(f1, Decl(trailingCommasInFunctionParameter.ts, 0, 0)) +>x : Symbol(x, Decl(trailingCommasInFunctionParameter.ts, 0, 12)) +>y : Symbol(y, Decl(trailingCommasInFunctionParameter.ts, 0, 14)) +} + +function f2() { +>f2 : Symbol(f2, Decl(trailingCommasInFunctionParameter.ts, 1, 1)) + + return (x,) => {} +>x : Symbol(x, Decl(trailingCommasInFunctionParameter.ts, 4, 12)) +} diff --git a/tests/baselines/reference/trailingCommasInFunctionParameter.types b/tests/baselines/reference/trailingCommasInFunctionParameter.types new file mode 100644 index 0000000000000..cef7cf85f0229 --- /dev/null +++ b/tests/baselines/reference/trailingCommasInFunctionParameter.types @@ -0,0 +1,14 @@ +=== tests/cases/conformance/es7/trailingCommasInFunctionParamLists/trailingCommasInFunctionParameter.ts === +function f1(x, y,) { +>f1 : (x: any, y: any) => void +>x : any +>y : any +} + +function f2() { +>f2 : () => (x: any) => void + + return (x,) => {} +>(x,) => {} : (x: any) => void +>x : any +} diff --git a/tests/cases/conformance/es7/trailingCommasInFunctionParamLists/trailingCommasInFunctionParameter.ts b/tests/cases/conformance/es7/trailingCommasInFunctionParamLists/trailingCommasInFunctionParameter.ts new file mode 100644 index 0000000000000..dbb911a9c288f --- /dev/null +++ b/tests/cases/conformance/es7/trailingCommasInFunctionParamLists/trailingCommasInFunctionParameter.ts @@ -0,0 +1,7 @@ +// @target: es5 +function f1(x, y,) { +} + +function f2() { + return (x,) => {} +} \ No newline at end of file diff --git a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList3.ts b/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList3.ts deleted file mode 100644 index c51a52ef83ef2..0000000000000 --- a/tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList3.ts +++ /dev/null @@ -1,2 +0,0 @@ -function f(a,) { -} \ No newline at end of file