fix(46433): forbid using keywords as parameter names (#46459)

This commit is contained in:
Oleksandr T 2021-10-22 19:58:01 +03:00 committed by GitHub
parent 449aaa118f
commit ce676d0963
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 124 additions and 6 deletions

View file

@ -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

View file

@ -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);

View file

@ -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.

View file

@ -11,7 +11,6 @@ var [debugger, if] = [1, 2];
enum void {}
function f(default: number) {}
class C { m(null: string) {} }
//// [reservedWords2.js]

View file

@ -40,4 +40,3 @@ class C { m(null: string) {} }
> : Symbol((Missing), Decl(reservedWords2.ts, 11, 12))
>string : Symbol(string, Decl(reservedWords2.ts, 11, 17))

View file

@ -74,4 +74,3 @@ class C { m(null: string) {} }
> : any
>string : any

View file

@ -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.

View file

@ -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 (;;) { }

View file

@ -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))

View file

@ -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

View file

@ -10,4 +10,3 @@ var [debugger, if] = [1, 2];
enum void {}
function f(default: number) {}
class C { m(null: string) {} }

View file

@ -0,0 +1,5 @@
function f1(enum) {}
function f2(class) {}
function f3(function) {}
function f4(while) {}
function f5(for) {}