From aef37f1e41f5fdcfdf78f35f726296a4685ac6d6 Mon Sep 17 00:00:00 2001 From: Yui T Date: Thu, 2 Apr 2015 17:42:24 -0700 Subject: [PATCH] Address code review: have more explicit error --- src/compiler/checker.ts | 10 +- .../diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 4 + ...lisionArgumentsClassConstructor.errors.txt | 92 +++++++++---------- .../collisionArgumentsClassMethod.errors.txt | 84 ++++++++--------- ...ationInStrictModeByDefaultInES6.errors.txt | 8 +- .../reference/parserRealSource11.errors.txt | 8 +- 7 files changed, 110 insertions(+), 97 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3ce7fe5e1cf..ed32686e794 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12441,7 +12441,15 @@ module ts { let identifier = name; if (contextNode && (contextNode.parserContextFlags & ParserContextFlags.StrictMode) && isEvalOrArgumentsIdentifier(identifier)) { let nameText = declarationNameToString(identifier); - return grammarErrorOnNode(identifier, Diagnostics.Invalid_use_of_0_in_strict_mode, nameText); + + // We are checking if this parameter's name is of method or constructor so that we can give more explicit errors because + // invalid usage error particularly of "arguments" is very common mistake + if (contextNode && (contextNode.parent.kind === SyntaxKind.MethodDeclaration || contextNode.parent.kind === SyntaxKind.Constructor)) { + return grammarErrorOnNode(identifier, Diagnostics.Invalid_use_of_0_because_class_definition_is_considered_a_strict_mode_code, nameText); + } + else { + return grammarErrorOnNode(identifier, Diagnostics.Invalid_use_of_0_in_strict_mode, nameText); + } } } } diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 3e9017786e5..c24b3fe174c 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -167,6 +167,7 @@ module ts { Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: { code: 1207, category: DiagnosticCategory.Error, key: "Decorators cannot be applied to multiple get/set accessors of the same name." }, Cannot_compile_non_external_modules_when_the_separateCompilation_flag_is_provided: { code: 1208, category: DiagnosticCategory.Error, key: "Cannot compile non-external modules when the '--separateCompilation' flag is provided." }, Ambient_const_enums_are_not_allowed_when_the_separateCompilation_flag_is_provided: { code: 1209, category: DiagnosticCategory.Error, key: "Ambient const enums are not allowed when the '--separateCompilation' flag is provided." }, + Invalid_use_of_0_because_class_definition_is_considered_a_strict_mode_code: { code: 1210, category: DiagnosticCategory.Error, key: "Invalid use of '{0}' because class definition is considered a strict mode code " }, Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." }, Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index f6edb3150b6..0c7708ad2f0 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -659,6 +659,10 @@ "category": "Error", "code": 1209 }, + "Invalid use of '{0}' because class definition is considered a strict mode code ": { + "category": "Error", + "code": 1210 + }, "Duplicate identifier '{0}'.": { "category": "Error", "code": 2300 diff --git a/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt b/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt index 7e145688bac..391e4ad24d4 100644 --- a/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt +++ b/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt @@ -1,41 +1,41 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(3,28): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(3,31): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(3,31): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(4,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(8,17): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(8,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(8,17): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. tests/cases/compiler/collisionArgumentsClassConstructor.ts(9,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(13,17): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(13,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(14,13): error TS1100: Invalid use of 'arguments' in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(20,13): error TS1100: Invalid use of 'arguments' in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(25,13): error TS1100: Invalid use of 'arguments' in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(30,17): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(30,24): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(30,24): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(31,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(35,24): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(35,24): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(36,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(41,31): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(44,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(47,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(51,31): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(52,31): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(41,31): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(44,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(47,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(51,31): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(52,31): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(53,25): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(53,28): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(53,28): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(54,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(59,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(60,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(61,17): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(59,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(60,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(61,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(61,17): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. tests/cases/compiler/collisionArgumentsClassConstructor.ts(62,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(67,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(68,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(69,17): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(67,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(68,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(69,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassConstructor.ts(70,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(75,31): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(76,31): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(79,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(80,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(84,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassConstructor.ts(75,31): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(76,31): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(79,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(80,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(84,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code ==== tests/cases/compiler/collisionArgumentsClassConstructor.ts (38 errors) ==== @@ -45,7 +45,7 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: ~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments: any[]; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -54,7 +54,7 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: class c12 { constructor(arguments: number, ...rest) { // error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code ~~~~~~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. var arguments = 10; // no error @@ -65,7 +65,7 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: class c1NoError { constructor(arguments: number) { // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments = 10; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -92,7 +92,7 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: ~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments = 10; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -101,7 +101,7 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: class c3NoError { constructor(public arguments: number) { // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments = 10; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -111,31 +111,31 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: declare class c4 { constructor(i: number, ...arguments); // No error - no code gen ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } declare class c42 { constructor(arguments: number, ...rest); // No error - no code gen ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } declare class c4NoError { constructor(arguments: number); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } class c5 { constructor(i: number, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(i: string, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(i: any, ...arguments) { // error ~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments: any[]; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -145,13 +145,13 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: class c52 { constructor(arguments: number, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(arguments: string, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(arguments: any, ...rest) { // error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code ~~~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. var arguments: any; // no error @@ -163,13 +163,13 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: class c5NoError { constructor(arguments: number); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(arguments: string); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(arguments: any) { // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments: any; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -179,25 +179,25 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1100: declare class c6 { constructor(i: number, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(i: string, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } declare class c62 { constructor(arguments: number, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(arguments: string, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } declare class c6NoError { constructor(arguments: number); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code constructor(arguments: string); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } \ No newline at end of file diff --git a/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt b/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt index 34b92990c79..67ec1309366 100644 --- a/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt +++ b/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt @@ -1,34 +1,34 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(2,27): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. -tests/cases/compiler/collisionArgumentsClassMethod.ts(2,30): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(2,30): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(5,17): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(5,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(5,17): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. tests/cases/compiler/collisionArgumentsClassMethod.ts(6,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(8,23): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(8,23): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(9,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(11,29): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(12,29): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(11,29): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(12,29): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(13,23): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. -tests/cases/compiler/collisionArgumentsClassMethod.ts(13,26): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(13,26): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(14,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(16,16): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(17,16): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(18,16): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(16,16): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(17,16): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(18,16): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(18,16): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. tests/cases/compiler/collisionArgumentsClassMethod.ts(19,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(21,22): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(22,22): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(23,22): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(21,22): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(22,22): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(23,22): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(24,13): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(29,30): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(30,17): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(31,23): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(33,29): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(34,29): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(35,16): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(36,16): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(37,22): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(38,22): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/compiler/collisionArgumentsClassMethod.ts(29,30): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(30,17): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(31,23): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(33,29): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(34,29): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(35,16): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(36,16): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(37,22): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/compiler/collisionArgumentsClassMethod.ts(38,22): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/compiler/collisionArgumentsClassMethod.ts(43,13): error TS1100: Invalid use of 'arguments' in strict mode. tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1100: Invalid use of 'arguments' in strict mode. @@ -39,14 +39,14 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1100: Inva ~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments: any[]; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. } public foo1(arguments: number, ...rest) { //arguments is error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code ~~~~~~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. var arguments = 10; // no error @@ -55,35 +55,35 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1100: Inva } public fooNoError(arguments: number) { // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments = 10; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. } public f4(i: number, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4(i: string, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4(i: any, ...arguments) { // error ~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments: any[]; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. } public f41(arguments: number, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f41(arguments: string, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f41(arguments: any, ...rest) { // error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code ~~~~~~~~~~~~~~ !!! error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. var arguments: any; // no error @@ -92,13 +92,13 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1100: Inva } public f4NoError(arguments: number); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4NoError(arguments: string); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4NoError(arguments: any) { // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code var arguments: any; // no error ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. @@ -108,32 +108,32 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1100: Inva declare class c2 { public foo(i: number, ...arguments); // No error - no code gen ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public foo1(arguments: number, ...rest); // No error - no code gen ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public fooNoError(arguments: number); // No error - no code gen ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4(i: number, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4(i: string, ...arguments); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f41(arguments: number, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f41(arguments: string, ...rest); // no codegen no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4NoError(arguments: number); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code public f4NoError(arguments: string); // no error ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code } class c3 { diff --git a/tests/baselines/reference/parseClassDeclarationInStrictModeByDefaultInES6.errors.txt b/tests/baselines/reference/parseClassDeclarationInStrictModeByDefaultInES6.errors.txt index d109b048085..024716f91fc 100644 --- a/tests/baselines/reference/parseClassDeclarationInStrictModeByDefaultInES6.errors.txt +++ b/tests/baselines/reference/parseClassDeclarationInStrictModeByDefaultInES6.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeByDefaultInES6.ts(4,16): error TS1100: Invalid use of 'arguments' in strict mode. -tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeByDefaultInES6.ts(5,17): error TS1100: Invalid use of 'eval' in strict mode. +tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeByDefaultInES6.ts(4,16): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code +tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeByDefaultInES6.ts(5,17): error TS1210: Invalid use of 'eval' because class definition is considered a strict mode code tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeByDefaultInES6.ts(6,9): error TS1100: Invalid use of 'arguments' in strict mode. tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeByDefaultInES6.ts(6,9): error TS2322: Type 'string' is not assignable to type 'IArguments'. Property 'callee' is missing in type 'String'. @@ -11,10 +11,10 @@ tests/cases/conformance/es6/classDeclaration/parseClassDeclarationInStrictModeBy public implements() { } public foo(arguments: any) { } ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code private bar(eval:any) { ~~~~ -!!! error TS1100: Invalid use of 'eval' in strict mode. +!!! error TS1210: Invalid use of 'eval' because class definition is considered a strict mode code arguments = "hello"; ~~~~~~~~~ !!! error TS1100: Invalid use of 'arguments' in strict mode. diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index 9b09e6d3b9d..1ed2ee93933 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -115,7 +115,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(504,58): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(506,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(507,58): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(518,32): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(520,29): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(520,29): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(525,27): error TS2304: Cannot find name 'Signature'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(527,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(528,34): error TS2304: Cannot find name 'NodeType'. @@ -247,7 +247,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(963,27): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(969,31): error TS2304: Cannot find name 'Symbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(977,32): error TS2304: Cannot find name 'Symbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(981,27): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(985,29): error TS1100: Invalid use of 'arguments' in strict mode. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(985,29): error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1004,44): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1004,67): error TS2304: Cannot find name 'FncFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1005,57): error TS2304: Cannot find name 'FncFlags'. @@ -1273,7 +1273,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error public target: AST, public arguments: ASTList) { ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code super(nodeType); this.minChar = this.target.minChar; } @@ -2002,7 +2002,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error constructor (public name: Identifier, public bod: ASTList, public isConstructor: boolean, public arguments: ASTList, public vars: ASTList, public scopes: ASTList, public statics: ASTList, ~~~~~~~~~ -!!! error TS1100: Invalid use of 'arguments' in strict mode. +!!! error TS1210: Invalid use of 'arguments' because class definition is considered a strict mode code nodeType: number) { super(nodeType);