diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index a40439d012afd..1428ee95b4c65 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1164,6 +1164,10 @@ "category": "Error", "code": 1389 }, + "'{0}' is not allowed as a parameter name.": { + "category": "Error", + "code": 1390 + }, "An import alias cannot use 'import type'": { "category": "Error", "code": 1392 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 1109d36a610b3..6bb5d0aec31b9 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2611,7 +2611,10 @@ namespace ts { case ParsingContext.ObjectLiteralMembers: return parseErrorAtCurrentToken(Diagnostics.Property_assignment_expected); case ParsingContext.ArrayLiteralMembers: return parseErrorAtCurrentToken(Diagnostics.Expression_or_comma_expected); case ParsingContext.JSDocParameters: return parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected); - case ParsingContext.Parameters: return parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected); + case ParsingContext.Parameters: + return isKeyword(token()) + ? parseErrorAtCurrentToken(Diagnostics._0_is_not_allowed_as_a_parameter_name, tokenToString(token())) + : parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected); case ParsingContext.TypeParameters: return parseErrorAtCurrentToken(Diagnostics.Type_parameter_declaration_expected); case ParsingContext.TypeArguments: return parseErrorAtCurrentToken(Diagnostics.Type_argument_expected); case ParsingContext.TupleElementTypes: return parseErrorAtCurrentToken(Diagnostics.Type_expected); diff --git a/tests/baselines/reference/reservedWords2.errors.txt b/tests/baselines/reference/reservedWords2.errors.txt index 18f594005c4e2..7e38ea1f851fe 100644 --- a/tests/baselines/reference/reservedWords2.errors.txt +++ b/tests/baselines/reference/reservedWords2.errors.txt @@ -118,5 +118,4 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati !!! error TS1359: Identifier expected. 'null' is a reserved word that cannot be used here. ~ !!! error TS1138: Parameter declaration expected. - \ No newline at end of file diff --git a/tests/baselines/reference/reservedWords2.js b/tests/baselines/reference/reservedWords2.js index 49a680085ee25..329ca94a532bc 100644 --- a/tests/baselines/reference/reservedWords2.js +++ b/tests/baselines/reference/reservedWords2.js @@ -11,7 +11,6 @@ var [debugger, if] = [1, 2]; enum void {} function f(default: number) {} class C { m(null: string) {} } - //// [reservedWords2.js] diff --git a/tests/baselines/reference/reservedWords2.symbols b/tests/baselines/reference/reservedWords2.symbols index 865ee314ba738..7091d453dc327 100644 --- a/tests/baselines/reference/reservedWords2.symbols +++ b/tests/baselines/reference/reservedWords2.symbols @@ -40,4 +40,3 @@ class C { m(null: string) {} } > : Symbol((Missing), Decl(reservedWords2.ts, 11, 12)) >string : Symbol(string, Decl(reservedWords2.ts, 11, 17)) - diff --git a/tests/baselines/reference/reservedWords2.types b/tests/baselines/reference/reservedWords2.types index abb5717cad324..498bd518a7c47 100644 --- a/tests/baselines/reference/reservedWords2.types +++ b/tests/baselines/reference/reservedWords2.types @@ -74,4 +74,3 @@ class C { m(null: string) {} } > : any >string : any - diff --git a/tests/baselines/reference/reservedWords3.errors.txt b/tests/baselines/reference/reservedWords3.errors.txt new file mode 100644 index 0000000000000..e1bd27f418513 --- /dev/null +++ b/tests/baselines/reference/reservedWords3.errors.txt @@ -0,0 +1,45 @@ +tests/cases/compiler/reservedWords3.ts(1,13): error TS1390: 'enum' is not allowed as a parameter name. +tests/cases/compiler/reservedWords3.ts(1,17): error TS2567: Enum declarations can only merge with namespace or other enum declarations. +tests/cases/compiler/reservedWords3.ts(1,17): error TS1003: Identifier expected. +tests/cases/compiler/reservedWords3.ts(2,13): error TS1390: 'class' is not allowed as a parameter name. +tests/cases/compiler/reservedWords3.ts(2,18): error TS1005: '{' expected. +tests/cases/compiler/reservedWords3.ts(3,13): error TS1390: 'function' is not allowed as a parameter name. +tests/cases/compiler/reservedWords3.ts(3,21): error TS2567: Enum declarations can only merge with namespace or other enum declarations. +tests/cases/compiler/reservedWords3.ts(3,21): error TS1003: Identifier expected. +tests/cases/compiler/reservedWords3.ts(4,13): error TS1390: 'while' is not allowed as a parameter name. +tests/cases/compiler/reservedWords3.ts(4,18): error TS1005: '(' expected. +tests/cases/compiler/reservedWords3.ts(5,13): error TS1390: 'for' is not allowed as a parameter name. +tests/cases/compiler/reservedWords3.ts(5,16): error TS1005: '(' expected. + + +==== tests/cases/compiler/reservedWords3.ts (12 errors) ==== + function f1(enum) {} + ~~~~ +!!! error TS1390: 'enum' is not allowed as a parameter name. + +!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations. + ~ +!!! error TS1003: Identifier expected. + function f2(class) {} + ~~~~~ +!!! error TS1390: 'class' is not allowed as a parameter name. + ~ +!!! error TS1005: '{' expected. + function f3(function) {} + ~~~~~~~~ +!!! error TS1390: 'function' is not allowed as a parameter name. + +!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations. + ~ +!!! error TS1003: Identifier expected. + function f4(while) {} + ~~~~~ +!!! error TS1390: 'while' is not allowed as a parameter name. + ~ +!!! error TS1005: '(' expected. + function f5(for) {} + ~~~ +!!! error TS1390: 'for' is not allowed as a parameter name. + ~ +!!! error TS1005: '(' expected. + \ No newline at end of file diff --git a/tests/baselines/reference/reservedWords3.js b/tests/baselines/reference/reservedWords3.js new file mode 100644 index 0000000000000..8957622d7abef --- /dev/null +++ b/tests/baselines/reference/reservedWords3.js @@ -0,0 +1,28 @@ +//// [reservedWords3.ts] +function f1(enum) {} +function f2(class) {} +function f3(function) {} +function f4(while) {} +function f5(for) {} + + +//// [reservedWords3.js] +function f1() { } +var ; +(function () { +})( || ( = {})); +{ } +function f2() { } +var default_1 = /** @class */ (function () { + function default_1() { + } + return default_1; +}()); +{ } +function f3() { } +function () { } +{ } +function f4() { } +while () { } +function f5() { } +for (;;) { } diff --git a/tests/baselines/reference/reservedWords3.symbols b/tests/baselines/reference/reservedWords3.symbols new file mode 100644 index 0000000000000..68d36d3641c59 --- /dev/null +++ b/tests/baselines/reference/reservedWords3.symbols @@ -0,0 +1,18 @@ +=== tests/cases/compiler/reservedWords3.ts === +function f1(enum) {} +>f1 : Symbol(f1, Decl(reservedWords3.ts, 0, 0)) +> : Symbol((Missing), Decl(reservedWords3.ts, 0, 12)) + +function f2(class) {} +>f2 : Symbol(f2, Decl(reservedWords3.ts, 0, 20)) + +function f3(function) {} +>f3 : Symbol(f3, Decl(reservedWords3.ts, 1, 21)) +> : Symbol((Missing), Decl(reservedWords3.ts, 2, 12)) + +function f4(while) {} +>f4 : Symbol(f4, Decl(reservedWords3.ts, 2, 24)) + +function f5(for) {} +>f5 : Symbol(f5, Decl(reservedWords3.ts, 3, 21)) + diff --git a/tests/baselines/reference/reservedWords3.types b/tests/baselines/reference/reservedWords3.types new file mode 100644 index 0000000000000..fd9ec4ce234fa --- /dev/null +++ b/tests/baselines/reference/reservedWords3.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/reservedWords3.ts === +function f1(enum) {} +>f1 : () => any +> : (Missing) + +function f2(class) {} +>f2 : () => any + +function f3(function) {} +>f3 : () => any +> : () => any + +function f4(while) {} +>f4 : () => any +> : any + +function f5(for) {} +>f5 : () => any +> : any + diff --git a/tests/cases/compiler/reservedWords2.ts b/tests/cases/compiler/reservedWords2.ts index fe261f0cf4dfa..e74b403d27be9 100644 --- a/tests/cases/compiler/reservedWords2.ts +++ b/tests/cases/compiler/reservedWords2.ts @@ -10,4 +10,3 @@ var [debugger, if] = [1, 2]; enum void {} function f(default: number) {} class C { m(null: string) {} } - diff --git a/tests/cases/compiler/reservedWords3.ts b/tests/cases/compiler/reservedWords3.ts new file mode 100644 index 0000000000000..d2713503c3832 --- /dev/null +++ b/tests/cases/compiler/reservedWords3.ts @@ -0,0 +1,5 @@ +function f1(enum) {} +function f2(class) {} +function f3(function) {} +function f4(while) {} +function f5(for) {}