diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index de9521031f6..eaf18a5078f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -28717,16 +28717,7 @@ namespace ts { } function getNonSimpleParameters(parameters: ReadonlyArray): ReadonlyArray { - // ECMA-262 14.1.13 - if (parameters.length === 0) return []; - - const last = lastOrUndefined(parameters); - if (last && isRestParameter(last)) return [last]; - - return filter(parameters, parameter => { - // ECMA-262 13.3.3.4 - return !!parameter.initializer || isBindingPattern(parameter.name); - }); + return filter(parameters, parameter => !!parameter.initializer || isBindingPattern(parameter.name) || isRestParameter(parameter)); } function checkGrammarForUseStrictSimpleParameterList(node: FunctionLikeDeclaration): boolean { @@ -28738,12 +28729,12 @@ namespace ts { forEach(nonSimpleParameters, parameter => { addRelatedInfo( error(parameter, Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), - createDiagnosticForNode(useStrictDirective, Diagnostics._0_is_here, "use strict directive") + createDiagnosticForNode(useStrictDirective, Diagnostics.use_strict_directive_used_here) ); }); const diagnostics = nonSimpleParameters.map((parameter, index) => ( - index === 0 ? createDiagnosticForNode(parameter, Diagnostics._0_is_here, "parameter") : createDiagnosticForNode(parameter, Diagnostics.and_here) + index === 0 ? createDiagnosticForNode(parameter, Diagnostics.Non_simple_parameter_declared_here) : createDiagnosticForNode(parameter, Diagnostics.and_here) )) as [DiagnosticWithLocation, ...DiagnosticWithLocation[]]; addRelatedInfo(error(useStrictDirective, Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list), ...diagnostics); return true; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0831ab7fba2..0a35bb0e85b 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -991,14 +991,18 @@ "category": "Error", "code": 1345 }, - "'use strict' directive cannot be used with non simple parameter list.": { + "'use strict' directive cannot be used with non-simple parameter list.": { "category": "Error", "code": 1346 }, - "{0} is here.": { + "Non-simple parameter declared here.": { "category": "Error", "code": 1347 }, + "'use strict' directive used here.": { + "category": "Error", + "code": 1348 + }, "Duplicate identifier '{0}'.": { "category": "Error", diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.js b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.js index 260f0df874a..1cf35579976 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.js +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.js @@ -17,6 +17,10 @@ function rest(...args: any[]) { 'use strict'; } +function rest1(a = 1, ...args) { + 'use strict'; +} + function paramDefault(param = 1) { 'use strict'; } @@ -69,6 +73,14 @@ function rest() { args[_i] = arguments[_i]; } } +function rest1(a) { + 'use strict'; + if (a === void 0) { a = 1; } + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } +} function paramDefault(param) { 'use strict'; if (param === void 0) { param = 1; } diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.symbols b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.symbols index 59c8190883f..9c2ad86d974 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.symbols +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.symbols @@ -31,52 +31,60 @@ function rest(...args: any[]) { 'use strict'; } +function rest1(a = 1, ...args) { +>rest1 : Symbol(rest1, Decl(functionWithUseStrictAndSimpleParameterList.ts, 16, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 18, 15)) +>args : Symbol(args, Decl(functionWithUseStrictAndSimpleParameterList.ts, 18, 21)) + + 'use strict'; +} + function paramDefault(param = 1) { ->paramDefault : Symbol(paramDefault, Decl(functionWithUseStrictAndSimpleParameterList.ts, 16, 1)) ->param : Symbol(param, Decl(functionWithUseStrictAndSimpleParameterList.ts, 18, 22)) +>paramDefault : Symbol(paramDefault, Decl(functionWithUseStrictAndSimpleParameterList.ts, 20, 1)) +>param : Symbol(param, Decl(functionWithUseStrictAndSimpleParameterList.ts, 22, 22)) 'use strict'; } function objectBindingPattern({foo}: any) { ->objectBindingPattern : Symbol(objectBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList.ts, 20, 1)) ->foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList.ts, 22, 31)) +>objectBindingPattern : Symbol(objectBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList.ts, 24, 1)) +>foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList.ts, 26, 31)) 'use strict'; } function arrayBindingPattern([foo]: any[]) { ->arrayBindingPattern : Symbol(arrayBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList.ts, 24, 1)) ->foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList.ts, 26, 30)) +>arrayBindingPattern : Symbol(arrayBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList.ts, 28, 1)) +>foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList.ts, 30, 30)) 'use strict'; } function manyParameter(a = 10, b = 20) { ->manyParameter : Symbol(manyParameter, Decl(functionWithUseStrictAndSimpleParameterList.ts, 28, 1)) ->a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 30, 23)) ->b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList.ts, 30, 30)) +>manyParameter : Symbol(manyParameter, Decl(functionWithUseStrictAndSimpleParameterList.ts, 32, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 34, 23)) +>b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList.ts, 34, 30)) "use strict"; } function manyPrologue(a = 10, b = 20) { ->manyPrologue : Symbol(manyPrologue, Decl(functionWithUseStrictAndSimpleParameterList.ts, 32, 1)) ->a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 34, 22)) ->b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList.ts, 34, 29)) +>manyPrologue : Symbol(manyPrologue, Decl(functionWithUseStrictAndSimpleParameterList.ts, 36, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 38, 22)) +>b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList.ts, 38, 29)) "foo"; "use strict"; } function invalidPrologue(a = 10, b = 20) { ->invalidPrologue : Symbol(invalidPrologue, Decl(functionWithUseStrictAndSimpleParameterList.ts, 37, 1)) ->a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 39, 25)) ->b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList.ts, 39, 32)) +>invalidPrologue : Symbol(invalidPrologue, Decl(functionWithUseStrictAndSimpleParameterList.ts, 41, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList.ts, 43, 25)) +>b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList.ts, 43, 32)) "foo"; const c = 1; ->c : Symbol(c, Decl(functionWithUseStrictAndSimpleParameterList.ts, 41, 9)) +>c : Symbol(c, Decl(functionWithUseStrictAndSimpleParameterList.ts, 45, 9)) "use strict"; } diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.types b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.types index c64c3c30036..462086d28ad 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.types +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList.types @@ -39,6 +39,16 @@ function rest(...args: any[]) { >'use strict' : "use strict" } +function rest1(a = 1, ...args) { +>rest1 : (a?: number, ...args: any[]) => void +>a : number +>1 : 1 +>args : any[] + + 'use strict'; +>'use strict' : "use strict" +} + function paramDefault(param = 1) { >paramDefault : (param?: number) => void >param : number diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.errors.txt b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.errors.txt index 84d69721c61..4887cb4f07a 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.errors.txt +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.errors.txt @@ -1,30 +1,33 @@ -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(1,12): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(2,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(15,15): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(16,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(19,23): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(20,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(23,31): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(24,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(27,30): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(28,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(31,24): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(31,32): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(32,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(35,23): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(35,31): error TS1344: This parameter is not allowed with 'use strict' directive. -tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(37,5): error TS1345: 'use strict' directive cannot be used with non simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(1,12): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(2,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(15,15): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(16,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(19,16): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(19,23): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(20,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(23,23): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(24,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(27,31): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(28,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(31,30): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(32,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(35,24): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(35,32): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(36,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(39,23): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(39,31): error TS1345: This parameter is not allowed with 'use strict' directive. +tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts(41,5): error TS1346: 'use strict' directive cannot be used with non-simple parameter list. -==== tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts (16 errors) ==== +==== tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts (19 errors) ==== function a(a = 10) { ~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:2:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:2:5: 'use strict' directive used here. "use strict"; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:1:12: parameter is here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:1:12: Non-simple parameter declared here. } export var foo = 10; @@ -39,71 +42,85 @@ tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es function rest(...args: any[]) { ~~~~~~~~~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:16:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:16:5: 'use strict' directive used here. 'use strict'; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:15:15: parameter is here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:15:15: Non-simple parameter declared here. + } + + function rest1(a = 1, ...args) { + ~~~~~ +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:20:5: 'use strict' directive used here. + ~~~~~~~ +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:20:5: 'use strict' directive used here. + 'use strict'; + ~~~~~~~~~~~~~ +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:19:16: Non-simple parameter declared here. +!!! related TS6204 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:19:23: and here. } function paramDefault(param = 1) { ~~~~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:20:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:24:5: 'use strict' directive used here. 'use strict'; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:19:23: parameter is here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:23:23: Non-simple parameter declared here. } function objectBindingPattern({foo}: any) { ~~~~~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:24:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:28:5: 'use strict' directive used here. 'use strict'; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:23:31: parameter is here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:27:31: Non-simple parameter declared here. } function arrayBindingPattern([foo]: any[]) { ~~~~~~~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:28:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:32:5: 'use strict' directive used here. 'use strict'; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:27:30: parameter is here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:31:30: Non-simple parameter declared here. } function manyParameter(a = 10, b = 20) { ~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:32:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:36:5: 'use strict' directive used here. ~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:32:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:36:5: 'use strict' directive used here. "use strict"; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:31:24: parameter is here. -!!! related TS6204 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:31:32: and here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:35:24: Non-simple parameter declared here. +!!! related TS6204 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:35:32: and here. } function manyPrologue(a = 10, b = 20) { ~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:37:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:41:5: 'use strict' directive used here. ~~~~~~ -!!! error TS1344: This parameter is not allowed with 'use strict' directive. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:37:5: use strict directive is here. +!!! error TS1345: This parameter is not allowed with 'use strict' directive. +!!! related TS1348 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:41:5: 'use strict' directive used here. "foo"; "use strict"; ~~~~~~~~~~~~~ -!!! error TS1345: 'use strict' directive cannot be used with non simple parameter list. -!!! related TS1346 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:35:23: parameter is here. -!!! related TS6204 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:35:31: and here. +!!! error TS1346: 'use strict' directive cannot be used with non-simple parameter list. +!!! related TS1347 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:39:23: Non-simple parameter declared here. +!!! related TS6204 tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts:39:31: and here. } function invalidPrologue(a = 10, b = 20) { diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.js b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.js index d8e50e9d1b6..f9e07fc96ea 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.js +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.js @@ -17,6 +17,10 @@ function rest(...args: any[]) { 'use strict'; } +function rest1(a = 1, ...args) { + 'use strict'; +} + function paramDefault(param = 1) { 'use strict'; } @@ -60,6 +64,9 @@ function container() { function rest(...args) { 'use strict'; } +function rest1(a = 1, ...args) { + 'use strict'; +} function paramDefault(param = 1) { 'use strict'; } diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.symbols b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.symbols index 444f219ab2f..8f3d1366ad2 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.symbols +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.symbols @@ -31,52 +31,60 @@ function rest(...args: any[]) { 'use strict'; } +function rest1(a = 1, ...args) { +>rest1 : Symbol(rest1, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 16, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 18, 15)) +>args : Symbol(args, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 18, 21)) + + 'use strict'; +} + function paramDefault(param = 1) { ->paramDefault : Symbol(paramDefault, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 16, 1)) ->param : Symbol(param, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 18, 22)) +>paramDefault : Symbol(paramDefault, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 20, 1)) +>param : Symbol(param, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 22, 22)) 'use strict'; } function objectBindingPattern({foo}: any) { ->objectBindingPattern : Symbol(objectBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 20, 1)) ->foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 22, 31)) +>objectBindingPattern : Symbol(objectBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 24, 1)) +>foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 26, 31)) 'use strict'; } function arrayBindingPattern([foo]: any[]) { ->arrayBindingPattern : Symbol(arrayBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 24, 1)) ->foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 26, 30)) +>arrayBindingPattern : Symbol(arrayBindingPattern, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 28, 1)) +>foo : Symbol(foo, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 30, 30)) 'use strict'; } function manyParameter(a = 10, b = 20) { ->manyParameter : Symbol(manyParameter, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 28, 1)) ->a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 30, 23)) ->b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 30, 30)) +>manyParameter : Symbol(manyParameter, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 32, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 34, 23)) +>b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 34, 30)) "use strict"; } function manyPrologue(a = 10, b = 20) { ->manyPrologue : Symbol(manyPrologue, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 32, 1)) ->a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 34, 22)) ->b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 34, 29)) +>manyPrologue : Symbol(manyPrologue, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 36, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 38, 22)) +>b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 38, 29)) "foo"; "use strict"; } function invalidPrologue(a = 10, b = 20) { ->invalidPrologue : Symbol(invalidPrologue, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 37, 1)) ->a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 39, 25)) ->b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 39, 32)) +>invalidPrologue : Symbol(invalidPrologue, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 41, 1)) +>a : Symbol(a, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 43, 25)) +>b : Symbol(b, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 43, 32)) "foo"; const c = 1; ->c : Symbol(c, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 41, 9)) +>c : Symbol(c, Decl(functionWithUseStrictAndSimpleParameterList_es2016.ts, 45, 9)) "use strict"; } diff --git a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.types b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.types index 19f3d7f015b..c5268cd8e48 100644 --- a/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.types +++ b/tests/baselines/reference/functionWithUseStrictAndSimpleParameterList_es2016.types @@ -39,6 +39,16 @@ function rest(...args: any[]) { >'use strict' : "use strict" } +function rest1(a = 1, ...args) { +>rest1 : (a?: number, ...args: any[]) => void +>a : number +>1 : 1 +>args : any[] + + 'use strict'; +>'use strict' : "use strict" +} + function paramDefault(param = 1) { >paramDefault : (param?: number) => void >param : number diff --git a/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList.ts b/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList.ts index 65be76d500c..d4b8ced9b42 100644 --- a/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList.ts +++ b/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList.ts @@ -16,6 +16,10 @@ function rest(...args: any[]) { 'use strict'; } +function rest1(a = 1, ...args) { + 'use strict'; +} + function paramDefault(param = 1) { 'use strict'; } diff --git a/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts b/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts index ed17746931a..6c9fadd1ac1 100644 --- a/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts +++ b/tests/cases/conformance/functions/functionWithUseStrictAndSimpleParameterList_es2016.ts @@ -18,6 +18,10 @@ function rest(...args: any[]) { 'use strict'; } +function rest1(a = 1, ...args) { + 'use strict'; +} + function paramDefault(param = 1) { 'use strict'; }