Skip to content

Commit e207e53

Browse files
committed
fix(46433): forbid using keywords as parameter names
1 parent 0d02213 commit e207e53

File tree

7 files changed

+31
-5
lines changed

7 files changed

+31
-5
lines changed

src/compiler/diagnosticMessages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,10 @@
11641164
"category": "Error",
11651165
"code": 1389
11661166
},
1167+
"'{0}' is not allowed as a parameter name.": {
1168+
"category": "Error",
1169+
"code": 1390
1170+
},
11671171
"An import alias cannot use 'import type'": {
11681172
"category": "Error",
11691173
"code": 1392

src/compiler/parser.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2611,7 +2611,10 @@ namespace ts {
26112611
case ParsingContext.ObjectLiteralMembers: return parseErrorAtCurrentToken(Diagnostics.Property_assignment_expected);
26122612
case ParsingContext.ArrayLiteralMembers: return parseErrorAtCurrentToken(Diagnostics.Expression_or_comma_expected);
26132613
case ParsingContext.JSDocParameters: return parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected);
2614-
case ParsingContext.Parameters: return parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected);
2614+
case ParsingContext.Parameters:
2615+
return isKeyword(token())
2616+
? parseErrorAtCurrentToken(Diagnostics._0_is_not_allowed_as_a_parameter_name, tokenToString(token()))
2617+
: parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected);
26152618
case ParsingContext.TypeParameters: return parseErrorAtCurrentToken(Diagnostics.Type_parameter_declaration_expected);
26162619
case ParsingContext.TypeArguments: return parseErrorAtCurrentToken(Diagnostics.Type_argument_expected);
26172620
case ParsingContext.TupleElementTypes: return parseErrorAtCurrentToken(Diagnostics.Type_expected);

tests/baselines/reference/reservedWords2.errors.txt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,12 @@ tests/cases/compiler/reservedWords2.ts(10,6): error TS1359: Identifier expected.
3333
tests/cases/compiler/reservedWords2.ts(11,12): error TS1359: Identifier expected. 'default' is a reserved word that cannot be used here.
3434
tests/cases/compiler/reservedWords2.ts(12,13): error TS1359: Identifier expected. 'null' is a reserved word that cannot be used here.
3535
tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declaration expected.
36+
tests/cases/compiler/reservedWords2.ts(13,13): error TS1390: 'enum' is not allowed as a parameter name.
37+
tests/cases/compiler/reservedWords2.ts(13,17): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
38+
tests/cases/compiler/reservedWords2.ts(13,17): error TS1003: Identifier expected.
3639

3740

38-
==== tests/cases/compiler/reservedWords2.ts (35 errors) ====
41+
==== tests/cases/compiler/reservedWords2.ts (38 errors) ====
3942
import while = require("dfdf");
4043
~~~~~
4144
!!! error TS1109: Expression expected.
@@ -118,5 +121,11 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati
118121
!!! error TS1359: Identifier expected. 'null' is a reserved word that cannot be used here.
119122
~
120123
!!! error TS1138: Parameter declaration expected.
121-
124+
function f1(enum) {}
125+
~~~~
126+
!!! error TS1390: 'enum' is not allowed as a parameter name.
127+
128+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
129+
~
130+
!!! error TS1003: Identifier expected.
122131

tests/baselines/reference/reservedWords2.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var [debugger, if] = [1, 2];
1111
enum void {}
1212
function f(default: number) {}
1313
class C { m(null: string) {} }
14-
14+
function f1(enum) {}
1515

1616

1717
//// [reservedWords2.js]
@@ -46,3 +46,7 @@ var C = /** @class */ (function () {
4646
C.prototype.m = function (, string) { };
4747
return C;
4848
}());
49+
function f1() { }
50+
(function () {
51+
})( || ( = {}));
52+
{ }

tests/baselines/reference/reservedWords2.symbols

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,7 @@ class C { m(null: string) {} }
4040
> : Symbol((Missing), Decl(reservedWords2.ts, 11, 12))
4141
>string : Symbol(string, Decl(reservedWords2.ts, 11, 17))
4242

43+
function f1(enum) {}
44+
>f1 : Symbol(f1, Decl(reservedWords2.ts, 11, 30))
45+
> : Symbol((Missing), Decl(reservedWords2.ts, 12, 12))
4346

tests/baselines/reference/reservedWords2.types

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,7 @@ class C { m(null: string) {} }
7474
> : any
7575
>string : any
7676

77+
function f1(enum) {}
78+
>f1 : () => any
79+
> : (Missing)
7780

tests/cases/compiler/reservedWords2.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ var [debugger, if] = [1, 2];
1010
enum void {}
1111
function f(default: number) {}
1212
class C { m(null: string) {} }
13-
13+
function f1(enum) {}

0 commit comments

Comments
 (0)