fix(46433): forbid using keywords as parameter names (#46459)
This commit is contained in:
parent
449aaa118f
commit
ce676d0963
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
@ -11,7 +11,6 @@ var [debugger, if] = [1, 2];
|
|||
enum void {}
|
||||
function f(default: number) {}
|
||||
class C { m(null: string) {} }
|
||||
|
||||
|
||||
|
||||
//// [reservedWords2.js]
|
||||
|
|
|
@ -40,4 +40,3 @@ class C { m(null: string) {} }
|
|||
> : Symbol((Missing), Decl(reservedWords2.ts, 11, 12))
|
||||
>string : Symbol(string, Decl(reservedWords2.ts, 11, 17))
|
||||
|
||||
|
||||
|
|
|
@ -74,4 +74,3 @@ class C { m(null: string) {} }
|
|||
> : any
|
||||
>string : any
|
||||
|
||||
|
||||
|
|
45
tests/baselines/reference/reservedWords3.errors.txt
Normal file
45
tests/baselines/reference/reservedWords3.errors.txt
Normal 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.
|
||||
|
28
tests/baselines/reference/reservedWords3.js
Normal file
28
tests/baselines/reference/reservedWords3.js
Normal 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 (;;) { }
|
18
tests/baselines/reference/reservedWords3.symbols
Normal file
18
tests/baselines/reference/reservedWords3.symbols
Normal 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))
|
||||
|
20
tests/baselines/reference/reservedWords3.types
Normal file
20
tests/baselines/reference/reservedWords3.types
Normal 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
|
||||
|
|
@ -10,4 +10,3 @@ var [debugger, if] = [1, 2];
|
|||
enum void {}
|
||||
function f(default: number) {}
|
||||
class C { m(null: string) {} }
|
||||
|
||||
|
|
5
tests/cases/compiler/reservedWords3.ts
Normal file
5
tests/cases/compiler/reservedWords3.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
function f1(enum) {}
|
||||
function f2(class) {}
|
||||
function f3(function) {}
|
||||
function f4(while) {}
|
||||
function f5(for) {}
|
Loading…
Reference in a new issue