Add 12 more grammar errors (#47075)

These are the last ones that I know of. They come from calls to
`grammarErrorOnFirstToken`.

Fixes part of #45349
Follow-up to #47067
This commit is contained in:
Nathan Shively-Sanders 2021-12-08 16:54:58 -08:00 committed by GitHub
parent c8f1a874a3
commit a2c7fa2d05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 477 additions and 207 deletions

View File

@ -839,12 +839,14 @@ namespace ts {
// grammar errors
Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement.code,
Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement.code,
Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name.code,
Diagnostics.A_class_member_cannot_have_the_0_keyword.code,
Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name.code,
Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement.code,
Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,
Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,
Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement.code,
Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration.code,
Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context.code,
Diagnostics.A_destructuring_declaration_must_have_an_initializer.code,
Diagnostics.A_get_accessor_cannot_have_parameters.code,
@ -855,13 +857,21 @@ namespace ts {
Diagnostics.A_rest_parameter_cannot_have_an_initializer.code,
Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list.code,
Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma.code,
Diagnostics.A_return_statement_can_only_be_used_within_a_function_body.code,
Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block.code,
Diagnostics.A_set_accessor_cannot_have_rest_parameter.code,
Diagnostics.A_set_accessor_must_have_exactly_one_parameter.code,
Diagnostics.An_export_declaration_can_only_be_used_in_a_module.code,
Diagnostics.An_export_declaration_cannot_have_modifiers.code,
Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module.code,
Diagnostics.An_import_declaration_cannot_have_modifiers.code,
Diagnostics.An_object_member_cannot_be_declared_optional.code,
Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element.code,
Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable.code,
Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause.code,
Diagnostics.Catch_clause_variable_cannot_have_an_initializer.code,
Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator.code,
Diagnostics.Classes_can_only_extend_a_single_class.code,
Diagnostics.Classes_may_not_have_a_field_named_constructor.code,
Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code,
Diagnostics.Duplicate_label_0.code,
@ -873,6 +883,7 @@ namespace ts {
Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names.code,
Diagnostics.Jump_target_cannot_cross_function_boundary.code,
Diagnostics.Line_terminator_not_permitted_before_arrow.code,
Diagnostics.Modifiers_cannot_appear_here.code,
Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement.code,
Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement.code,
Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies.code,
@ -897,6 +908,7 @@ namespace ts {
Diagnostics._0_modifier_must_precede_1_modifier.code,
Diagnostics.const_declarations_can_only_be_declared_inside_a_block.code,
Diagnostics.const_declarations_must_be_initialized.code,
Diagnostics.extends_clause_already_seen.code,
Diagnostics.let_declarations_can_only_be_declared_inside_a_block.code,
Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations.code,
]);

View File

@ -2,94 +2,108 @@ tests/cases/conformance/salsa/plainJSGrammarErrors.js(3,9): error TS1451: Privat
tests/cases/conformance/salsa/plainJSGrammarErrors.js(5,9): error TS1451: Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression
tests/cases/conformance/salsa/plainJSGrammarErrors.js(10,15): error TS2803: Cannot assign to private method '#m'. Private methods are not writable.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(14,13): error TS18038: 'For await' loops cannot be used inside a class static block.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(19,5): error TS1089: 'static' modifier cannot appear on a constructor declaration.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(20,5): error TS1089: 'async' modifier cannot appear on a constructor declaration.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(21,5): error TS8009: The 'const' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(21,11): error TS1248: A class member cannot have the 'const' keyword.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(17,9): error TS18041: A 'return' statement cannot be used inside a class static block.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(20,5): error TS1089: 'static' modifier cannot appear on a constructor declaration.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(21,5): error TS1089: 'async' modifier cannot appear on a constructor declaration.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(22,5): error TS8009: The 'const' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(22,11): error TS1248: A class member cannot have the 'const' keyword.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(25,11): error TS1030: 'async' modifier already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(27,11): error TS1029: 'static' modifier must precede 'async' modifier.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(28,5): error TS1031: 'export' modifier cannot appear on class elements of this kind.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(28,5): error TS8009: The 'export' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(23,5): error TS8009: The 'const' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(23,11): error TS1248: A class member cannot have the 'const' keyword.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(26,11): error TS1030: 'async' modifier already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(28,11): error TS1029: 'static' modifier must precede 'async' modifier.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(29,5): error TS1031: 'export' modifier cannot appear on class elements of this kind.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(33,22): error TS1005: '{' expected.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(34,9): error TS1054: A 'get' accessor cannot have parameters.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(35,9): error TS1049: A 'set' accessor must have exactly one parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(29,5): error TS8009: The 'export' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(30,5): error TS1031: 'export' modifier cannot appear on class elements of this kind.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(34,22): error TS1005: '{' expected.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(35,9): error TS1054: A 'get' accessor cannot have parameters.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(36,9): error TS1049: A 'set' accessor must have exactly one parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(37,18): error TS1053: A 'set' accessor cannot have rest parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(40,5): error TS18006: Classes may not have a field named 'constructor'.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(43,1): error TS18016: Private identifiers are not allowed outside class bodies.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(44,6): error TS18016: Private identifiers are not allowed outside class bodies.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(45,9): error TS18013: Property '#m' is not accessible outside class 'C' because it has a private identifier.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(48,8): error TS1030: 'export' modifier already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(49,8): error TS1044: 'static' modifier cannot appear on a module or namespace element.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(50,22): error TS1090: 'static' modifier cannot appear on a parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(50,22): error TS8012: Parameter modifiers can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(51,7): error TS1029: 'export' modifier must precede 'async' modifier.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(52,26): error TS1090: 'export' modifier cannot appear on a parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(52,26): error TS8012: Parameter modifiers can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(53,25): error TS1090: 'async' modifier cannot appear on a parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(53,25): error TS8012: Parameter modifiers can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(54,7): error TS1030: 'async' modifier already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(55,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(56,5): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(56,5): error TS8009: The 'async' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(58,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(59,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(60,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(63,25): error TS1014: A rest parameter must be last in a parameter list.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(65,37): error TS1048: A rest parameter cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(67,41): error TS1013: A rest parameter or binding pattern may not have a trailing comma.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(69,8): error TS2501: A rest element cannot contain a binding pattern.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(71,12): error TS2462: A rest element must be last in a destructuring pattern.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(72,33): error TS2566: A rest element cannot have a property name.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(73,42): error TS1186: A rest element cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(76,4): error TS1123: Variable declaration list cannot be empty.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(77,9): error TS5076: '||' and '??' operations cannot be mixed without parentheses.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(78,14): error TS5076: '||' and '??' operations cannot be mixed without parentheses.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(80,3): error TS1200: Line terminator not permitted before arrow.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(82,4): error TS1358: Tagged template expressions are not permitted in an optional chain.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(84,6): error TS1171: A comma expression is not allowed in a computed property name.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(85,5): error TS18016: Private identifiers are not allowed outside class bodies.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(86,5): error TS1042: 'export' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(88,25): error TS1162: An object member cannot be declared optional.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(89,6): error TS1162: An object member cannot be declared optional.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(89,6): error TS8009: The '?' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(90,15): error TS1255: A definite assignment assertion '!' is not permitted in this context.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(91,19): error TS1255: A definite assignment assertion '!' is not permitted in this context.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(94,16): error TS1312: Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(96,24): error TS1009: Trailing comma not allowed.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(97,29): error TS1097: 'extends' list cannot be empty.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(100,7): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(101,7): error TS1155: 'const' declarations must be initialized.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(102,5): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(102,5): error TS2480: 'let' is not allowed to be used as a name in 'let' or 'const' declarations.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(104,5): error TS1157: 'let' declarations can only be declared inside a block.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(106,5): error TS1156: 'const' declarations can only be declared inside a block.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(111,6): error TS1106: The left-hand side of a 'for...of' statement may not be 'async'.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(114,12): error TS1190: The variable declaration of a 'for...of' statement cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(117,12): error TS1189: The variable declaration of a 'for...in' statement cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(120,13): error TS1188: Only a single variable declaration is allowed in a 'for...of' statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(123,13): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(134,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(141,11): error TS2492: Cannot redeclare identifier 'e' in catch clause.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(145,5): error TS1114: Duplicate label 'label'.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(154,13): error TS1107: Jump target cannot cross function boundary.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(162,13): error TS1115: A 'continue' statement can only jump to a label of an enclosing iteration statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(166,5): error TS1107: Jump target cannot cross function boundary.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(169,5): error TS1116: A 'break' statement can only jump to a label of an enclosing statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(170,5): error TS1115: A 'continue' statement can only jump to a label of an enclosing iteration statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(172,1): error TS1105: A 'break' statement can only be used within an enclosing iteration or switch statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(173,1): error TS1104: A 'continue' statement can only be used within an enclosing iteration statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(176,28): error TS17012: 'metal' is not a valid meta-property for keyword 'import'. Did you mean 'meta'?
tests/cases/conformance/salsa/plainJSGrammarErrors.js(177,22): error TS17012: 'targe' is not a valid meta-property for keyword 'new'. Did you mean 'target'?
tests/cases/conformance/salsa/plainJSGrammarErrors.js(178,30): message TS1450: Dynamic imports can only accept a module specifier and an optional assertion as arguments
tests/cases/conformance/salsa/plainJSGrammarErrors.js(179,30): message TS1450: Dynamic imports can only accept a module specifier and an optional assertion as arguments
tests/cases/conformance/salsa/plainJSGrammarErrors.js(180,36): error TS1325: Argument of dynamic import cannot be spread element.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(37,9): error TS1049: A 'set' accessor must have exactly one parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(38,18): error TS1053: A 'set' accessor cannot have rest parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(41,5): error TS18006: Classes may not have a field named 'constructor'.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(43,1): error TS1211: A class declaration without the 'default' modifier must have a name.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(46,25): error TS1172: 'extends' clause already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(47,25): error TS1174: Classes can only extend a single class.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(49,1): error TS18016: Private identifiers are not allowed outside class bodies.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(50,6): error TS18016: Private identifiers are not allowed outside class bodies.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(51,9): error TS18013: Property '#m' is not accessible outside class 'C' because it has a private identifier.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(54,8): error TS1030: 'export' modifier already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(55,8): error TS1044: 'static' modifier cannot appear on a module or namespace element.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(56,22): error TS1090: 'static' modifier cannot appear on a parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(56,22): error TS8012: Parameter modifiers can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(57,7): error TS1029: 'export' modifier must precede 'async' modifier.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(58,26): error TS1090: 'export' modifier cannot appear on a parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(58,26): error TS8012: Parameter modifiers can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(59,25): error TS1090: 'async' modifier cannot appear on a parameter.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(59,25): error TS8012: Parameter modifiers can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(60,7): error TS1030: 'async' modifier already seen.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(61,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(62,5): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(62,5): error TS8009: The 'async' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(64,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(65,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(66,1): error TS1042: 'async' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(67,1): error TS1191: An import declaration cannot have modifiers.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(68,1): error TS1193: An export declaration cannot have modifiers.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(70,5): error TS1233: An export declaration can only be used in a module.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(71,5): error TS1232: An import declaration can only be used in a namespace or module.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(72,5): error TS1258: A default export must be at the top level of a file or module declaration.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(75,5): error TS1184: Modifiers cannot appear here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(78,5): error TS1042: 'static' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(78,5): error TS1184: Modifiers cannot appear here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(83,25): error TS1014: A rest parameter must be last in a parameter list.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(85,37): error TS1048: A rest parameter cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(87,41): error TS1013: A rest parameter or binding pattern may not have a trailing comma.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(89,8): error TS2501: A rest element cannot contain a binding pattern.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(91,12): error TS2462: A rest element must be last in a destructuring pattern.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(92,33): error TS2566: A rest element cannot have a property name.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(93,42): error TS1186: A rest element cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(96,4): error TS1123: Variable declaration list cannot be empty.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(97,9): error TS5076: '||' and '??' operations cannot be mixed without parentheses.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(98,14): error TS5076: '||' and '??' operations cannot be mixed without parentheses.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(100,3): error TS1200: Line terminator not permitted before arrow.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(102,4): error TS1358: Tagged template expressions are not permitted in an optional chain.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(104,6): error TS1171: A comma expression is not allowed in a computed property name.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(105,5): error TS18016: Private identifiers are not allowed outside class bodies.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(106,5): error TS1042: 'export' modifier cannot be used here.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(108,25): error TS1162: An object member cannot be declared optional.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(109,6): error TS1162: An object member cannot be declared optional.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(109,6): error TS8009: The '?' modifier can only be used in TypeScript files.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(110,15): error TS1255: A definite assignment assertion '!' is not permitted in this context.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(111,19): error TS1255: A definite assignment assertion '!' is not permitted in this context.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(114,16): error TS1312: Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(116,24): error TS1009: Trailing comma not allowed.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(117,29): error TS1097: 'extends' list cannot be empty.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(120,7): error TS1182: A destructuring declaration must have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(121,7): error TS1155: 'const' declarations must be initialized.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(122,5): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(122,5): error TS2480: 'let' is not allowed to be used as a name in 'let' or 'const' declarations.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(124,5): error TS1157: 'let' declarations can only be declared inside a block.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(126,5): error TS1156: 'const' declarations can only be declared inside a block.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(131,6): error TS1106: The left-hand side of a 'for...of' statement may not be 'async'.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(134,12): error TS1190: The variable declaration of a 'for...of' statement cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(137,12): error TS1189: The variable declaration of a 'for...in' statement cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(140,13): error TS1188: Only a single variable declaration is allowed in a 'for...of' statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(143,13): error TS1091: Only a single variable declaration is allowed in a 'for...in' statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(154,5): error TS1113: A 'default' clause cannot appear more than once in a 'switch' statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(161,11): error TS2492: Cannot redeclare identifier 'e' in catch clause.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(167,12): error TS1197: Catch clause variable cannot have an initializer.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(170,5): error TS1114: Duplicate label 'label'.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(179,13): error TS1107: Jump target cannot cross function boundary.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(187,13): error TS1115: A 'continue' statement can only jump to a label of an enclosing iteration statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(191,5): error TS1107: Jump target cannot cross function boundary.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(194,5): error TS1116: A 'break' statement can only jump to a label of an enclosing statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(195,5): error TS1115: A 'continue' statement can only jump to a label of an enclosing iteration statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(197,1): error TS1105: A 'break' statement can only be used within an enclosing iteration or switch statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(198,1): error TS1104: A 'continue' statement can only be used within an enclosing iteration statement.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(201,28): error TS17012: 'metal' is not a valid meta-property for keyword 'import'. Did you mean 'meta'?
tests/cases/conformance/salsa/plainJSGrammarErrors.js(202,22): error TS17012: 'targe' is not a valid meta-property for keyword 'new'. Did you mean 'target'?
tests/cases/conformance/salsa/plainJSGrammarErrors.js(203,30): message TS1450: Dynamic imports can only accept a module specifier and an optional assertion as arguments
tests/cases/conformance/salsa/plainJSGrammarErrors.js(204,30): message TS1450: Dynamic imports can only accept a module specifier and an optional assertion as arguments
tests/cases/conformance/salsa/plainJSGrammarErrors.js(205,36): error TS1325: Argument of dynamic import cannot be spread element.
tests/cases/conformance/salsa/plainJSGrammarErrors.js(207,1): error TS1108: A 'return' statement can only be used within a function body.
==== tests/cases/conformance/salsa/plainJSGrammarErrors.js (89 errors) ====
==== tests/cases/conformance/salsa/plainJSGrammarErrors.js (103 errors) ====
class C {
// #private mistakes
q = #unbound
@ -114,6 +128,9 @@ tests/cases/conformance/salsa/plainJSGrammarErrors.js(180,36): error TS1325: Arg
!!! error TS18038: 'For await' loops cannot be used inside a class static block.
console.log(x)
}
return null
~~~~~~
!!! error TS18041: A 'return' statement cannot be used inside a class static block.
}
// modifier mistakes
static constructor() { }
@ -173,6 +190,17 @@ tests/cases/conformance/salsa/plainJSGrammarErrors.js(180,36): error TS1325: Arg
~~~~~~~~~~~~~
!!! error TS18006: Classes may not have a field named 'constructor'.
}
class {
~~~~~
!!! error TS1211: A class declaration without the 'default' modifier must have a name.
missingName = true
}
class Doubler extends C extends C { }
~~~~~~~
!!! error TS1172: 'extends' clause already seen.
class Trebler extends C,C,C { }
~
!!! error TS1174: Classes can only extend a single class.
// #private mistakes
#unrelated
~~~~~~~~~~
@ -230,6 +258,36 @@ tests/cases/conformance/salsa/plainJSGrammarErrors.js(180,36): error TS1325: Arg
async export { CantAsyncClass }
~~~~~
!!! error TS1042: 'async' modifier cannot be used here.
export import 'fs'
~~~~~~
!!! error TS1191: An import declaration cannot have modifiers.
export export { C }
~~~~~~
!!! error TS1193: An export declaration cannot have modifiers.
function nestedExports() {
export { staticParam }
~~~~~~
!!! error TS1233: An export declaration can only be used in a module.
import 'fs'
~~~~~~
!!! error TS1232: An import declaration can only be used in a namespace or module.
export default 12
~~~~~~
!!! error TS1258: A default export must be at the top level of a file or module declaration.
}
function outerStaticFunction() {
static function staticFunction() { }
~~~~~~
!!! error TS1184: Modifiers cannot appear here.
}
const noStaticLiteralMethods = {
static m() {
~~~~~~
!!! error TS1042: 'static' modifier cannot be used here.
~~~~~~
!!! error TS1184: Modifiers cannot appear here.
}
}
// rest parameters
function restMustBeLast(...x, y) {
@ -385,6 +443,13 @@ tests/cases/conformance/salsa/plainJSGrammarErrors.js(180,36): error TS1325: Arg
!!! error TS2492: Cannot redeclare identifier 'e' in catch clause.
console.log(e)
}
try {
throw 20
}
catch (e = 0) {
~
!!! error TS1197: Catch clause variable cannot have an initializer.
}
label: for (const x in [1,2,3]) {
label: for (const y in [1,2,3]) {
~~~~~
@ -448,4 +513,8 @@ tests/cases/conformance/salsa/plainJSGrammarErrors.js(180,36): error TS1325: Arg
const spreadDynamicImport = import(...[])
~~~~~
!!! error TS1325: Argument of dynamic import cannot be spread element.
return
~~~~~~
!!! error TS1108: A 'return' statement can only be used within a function body.

View File

@ -15,6 +15,7 @@ class C {
for await (const x of [1,2,3]) {
console.log(x)
}
return null
}
// modifier mistakes
static constructor() { }
@ -40,6 +41,11 @@ class C {
// other
"constructor" = 16
}
class {
missingName = true
}
class Doubler extends C extends C { }
class Trebler extends C,C,C { }
// #private mistakes
#unrelated
junk.#m
@ -59,6 +65,20 @@ async class CantAsyncClass {
async const cantAsyncConst = 2
async import 'assert'
async export { CantAsyncClass }
export import 'fs'
export export { C }
function nestedExports() {
export { staticParam }
import 'fs'
export default 12
}
function outerStaticFunction() {
static function staticFunction() { }
}
const noStaticLiteralMethods = {
static m() {
}
}
// rest parameters
function restMustBeLast(...x, y) {
@ -142,6 +162,11 @@ catch (e) {
const e = 1
console.log(e)
}
try {
throw 20
}
catch (e = 0) {
}
label: for (const x in [1,2,3]) {
label: for (const y in [1,2,3]) {
break label;
@ -179,6 +204,8 @@ function foo() { new.targe }
const nullaryDynamicImport = import()
const trinaryDynamicImport = import('1', '2', '3')
const spreadDynamicImport = import(...[])
return
//// [plainJSGrammarErrors.js]
@ -198,6 +225,7 @@ class C {
for await (const x of [1, 2, 3]) {
console.log(x);
}
return null;
}
// modifier mistakes
static constructor() { }
@ -221,6 +249,13 @@ class C {
// other
"constructor" = 16;
}
class {
missingName = true;
}
class Doubler extends C extends C {
}
class Trebler extends C, C, C {
}
// #private mistakes
#unrelated;
junk.#m;
@ -239,6 +274,20 @@ async class CantAsyncClass {
async const cantAsyncConst = 2;
async import 'assert';
export { CantAsyncClass };
export import 'fs';
export { C };
function nestedExports() {
export { staticParam };
import 'fs';
export default 12;
}
function outerStaticFunction() {
static function staticFunction() { }
}
const noStaticLiteralMethods = {
static m() {
}
};
// rest parameters
function restMustBeLast(...x, y) {
}
@ -318,6 +367,11 @@ catch (e) {
const e = 1;
console.log(e);
}
try {
throw 20;
}
catch (e = 0) {
}
label: for (const x in [1, 2, 3]) {
label: for (const y in [1, 2, 3]) {
break label;
@ -353,3 +407,4 @@ function foo() { new.targe; }
const nullaryDynamicImport = import();
const trinaryDynamicImport = import('1', '2', '3');
const spreadDynamicImport = import(...[]);
return;

View File

@ -32,55 +32,71 @@ class C {
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 13, 24))
}
return null
}
// modifier mistakes
static constructor() { }
async constructor() { }
const x = 1
>x : Symbol(C.x, Decl(plainJSGrammarErrors.js, 19, 27))
>x : Symbol(C.x, Decl(plainJSGrammarErrors.js, 20, 27))
const y() {
>y : Symbol(C.y, Decl(plainJSGrammarErrors.js, 20, 15))
>y : Symbol(C.y, Decl(plainJSGrammarErrors.js, 21, 15))
return 12
}
async async extremelyAsync() {
>extremelyAsync : Symbol(C.extremelyAsync, Decl(plainJSGrammarErrors.js, 23, 5))
>extremelyAsync : Symbol(C.extremelyAsync, Decl(plainJSGrammarErrors.js, 24, 5))
}
async static oorder(){ }
>oorder : Symbol(C.oorder, Decl(plainJSGrammarErrors.js, 25, 5))
>oorder : Symbol(C.oorder, Decl(plainJSGrammarErrors.js, 26, 5))
export cantExportProperty = 1
>cantExportProperty : Symbol(C.cantExportProperty, Decl(plainJSGrammarErrors.js, 26, 28))
>cantExportProperty : Symbol(C.cantExportProperty, Decl(plainJSGrammarErrors.js, 27, 28))
export cantExportMethod() {
>cantExportMethod : Symbol(C.cantExportMethod, Decl(plainJSGrammarErrors.js, 27, 33))
>cantExportMethod : Symbol(C.cantExportMethod, Decl(plainJSGrammarErrors.js, 28, 33))
}
// accessor mistakes
get incorporeal();
>incorporeal : Symbol(C.incorporeal, Decl(plainJSGrammarErrors.js, 29, 5))
>incorporeal : Symbol(C.incorporeal, Decl(plainJSGrammarErrors.js, 30, 5))
get parametric(n) { return 1 }
>parametric : Symbol(C.parametric, Decl(plainJSGrammarErrors.js, 32, 22))
>n : Symbol(n, Decl(plainJSGrammarErrors.js, 33, 19))
>parametric : Symbol(C.parametric, Decl(plainJSGrammarErrors.js, 33, 22))
>n : Symbol(n, Decl(plainJSGrammarErrors.js, 34, 19))
set invariant() { }
>invariant : Symbol(C.invariant, Decl(plainJSGrammarErrors.js, 33, 34))
>invariant : Symbol(C.invariant, Decl(plainJSGrammarErrors.js, 34, 34))
set binary(fst, snd) { }
>binary : Symbol(C.binary, Decl(plainJSGrammarErrors.js, 34, 23))
>fst : Symbol(fst, Decl(plainJSGrammarErrors.js, 35, 15))
>snd : Symbol(snd, Decl(plainJSGrammarErrors.js, 35, 19))
>binary : Symbol(C.binary, Decl(plainJSGrammarErrors.js, 35, 23))
>fst : Symbol(fst, Decl(plainJSGrammarErrors.js, 36, 15))
>snd : Symbol(snd, Decl(plainJSGrammarErrors.js, 36, 19))
set variable(...n) { }
>variable : Symbol(C.variable, Decl(plainJSGrammarErrors.js, 35, 28))
>n : Symbol(n, Decl(plainJSGrammarErrors.js, 36, 17))
>variable : Symbol(C.variable, Decl(plainJSGrammarErrors.js, 36, 28))
>n : Symbol(n, Decl(plainJSGrammarErrors.js, 37, 17))
// other
"constructor" = 16
>"constructor" : Symbol(C["constructor"], Decl(plainJSGrammarErrors.js, 36, 26))
>"constructor" : Symbol(C["constructor"], Decl(plainJSGrammarErrors.js, 37, 26))
}
class {
missingName = true
>missingName : Symbol(__missing.missingName, Decl(plainJSGrammarErrors.js, 42, 7))
}
class Doubler extends C extends C { }
>Doubler : Symbol(Doubler, Decl(plainJSGrammarErrors.js, 44, 1))
>C : Symbol(C, Decl(plainJSGrammarErrors.js, 0, 0))
>C : Symbol(C, Decl(plainJSGrammarErrors.js, 0, 0))
class Trebler extends C,C,C { }
>Trebler : Symbol(Trebler, Decl(plainJSGrammarErrors.js, 45, 37))
>C : Symbol(C, Decl(plainJSGrammarErrors.js, 0, 0))
>C : Symbol(C, Decl(plainJSGrammarErrors.js, 0, 0))
>C : Symbol(C, Decl(plainJSGrammarErrors.js, 0, 0))
// #private mistakes
#unrelated
junk.#m
@ -89,234 +105,261 @@ new C().#m
// modifier mistakes
export export var extremelyExported = 10
>extremelyExported : Symbol(extremelyExported, Decl(plainJSGrammarErrors.js, 47, 17))
>extremelyExported : Symbol(extremelyExported, Decl(plainJSGrammarErrors.js, 53, 17))
export static var staticExport = 1
>staticExport : Symbol(staticExport, Decl(plainJSGrammarErrors.js, 48, 17))
>staticExport : Symbol(staticExport, Decl(plainJSGrammarErrors.js, 54, 17))
function staticParam(static x = 1) { return x }
>staticParam : Symbol(staticParam, Decl(plainJSGrammarErrors.js, 48, 34))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 49, 21))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 49, 21))
>staticParam : Symbol(staticParam, Decl(plainJSGrammarErrors.js, 54, 34))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 55, 21))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 55, 21))
async export function oorder(x = 1) { return x }
>oorder : Symbol(oorder, Decl(plainJSGrammarErrors.js, 49, 47))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 50, 29))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 50, 29))
>oorder : Symbol(oorder, Decl(plainJSGrammarErrors.js, 55, 47))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 56, 29))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 56, 29))
function cantExportParam(export x = 1) { return x }
>cantExportParam : Symbol(cantExportParam, Decl(plainJSGrammarErrors.js, 50, 48))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 51, 25))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 51, 25))
>cantExportParam : Symbol(cantExportParam, Decl(plainJSGrammarErrors.js, 56, 48))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 57, 25))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 57, 25))
function cantAsyncParam(async x = 1) { return x }
>cantAsyncParam : Symbol(cantAsyncParam, Decl(plainJSGrammarErrors.js, 51, 51))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 52, 24))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 52, 24))
>cantAsyncParam : Symbol(cantAsyncParam, Decl(plainJSGrammarErrors.js, 57, 51))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 58, 24))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 58, 24))
async async function extremelyAsync() {}
>extremelyAsync : Symbol(extremelyAsync, Decl(plainJSGrammarErrors.js, 52, 49))
>extremelyAsync : Symbol(extremelyAsync, Decl(plainJSGrammarErrors.js, 58, 49))
async class CantAsyncClass {
>CantAsyncClass : Symbol(CantAsyncClass, Decl(plainJSGrammarErrors.js, 53, 40))
>CantAsyncClass : Symbol(CantAsyncClass, Decl(plainJSGrammarErrors.js, 59, 40))
async cantAsyncPropert = 1
>cantAsyncPropert : Symbol(CantAsyncClass.cantAsyncPropert, Decl(plainJSGrammarErrors.js, 54, 28))
>cantAsyncPropert : Symbol(CantAsyncClass.cantAsyncPropert, Decl(plainJSGrammarErrors.js, 60, 28))
}
async const cantAsyncConst = 2
>cantAsyncConst : Symbol(cantAsyncConst, Decl(plainJSGrammarErrors.js, 57, 11))
>cantAsyncConst : Symbol(cantAsyncConst, Decl(plainJSGrammarErrors.js, 63, 11))
async import 'assert'
async export { CantAsyncClass }
>CantAsyncClass : Symbol(CantAsyncClass, Decl(plainJSGrammarErrors.js, 59, 14))
>CantAsyncClass : Symbol(CantAsyncClass, Decl(plainJSGrammarErrors.js, 65, 14))
export import 'fs'
export export { C }
>C : Symbol(C, Decl(plainJSGrammarErrors.js, 67, 15))
function nestedExports() {
>nestedExports : Symbol(nestedExports, Decl(plainJSGrammarErrors.js, 67, 19))
export { staticParam }
>staticParam : Symbol(staticParam, Decl(plainJSGrammarErrors.js, 69, 12))
import 'fs'
export default 12
}
function outerStaticFunction() {
>outerStaticFunction : Symbol(outerStaticFunction, Decl(plainJSGrammarErrors.js, 72, 1))
static function staticFunction() { }
>staticFunction : Symbol(staticFunction, Decl(plainJSGrammarErrors.js, 73, 32))
}
const noStaticLiteralMethods = {
>noStaticLiteralMethods : Symbol(noStaticLiteralMethods, Decl(plainJSGrammarErrors.js, 76, 5))
static m() {
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 76, 32))
}
}
// rest parameters
function restMustBeLast(...x, y) {
>restMustBeLast : Symbol(restMustBeLast, Decl(plainJSGrammarErrors.js, 59, 31))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 62, 24))
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 62, 29))
>restMustBeLast : Symbol(restMustBeLast, Decl(plainJSGrammarErrors.js, 79, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 82, 24))
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 82, 29))
}
function restCantHaveInitialiser(...x = [1,2,3]) {
>restCantHaveInitialiser : Symbol(restCantHaveInitialiser, Decl(plainJSGrammarErrors.js, 63, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 64, 33))
>restCantHaveInitialiser : Symbol(restCantHaveInitialiser, Decl(plainJSGrammarErrors.js, 83, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 84, 33))
}
function restCantHaveTrailingComma (...x,) {
>restCantHaveTrailingComma : Symbol(restCantHaveTrailingComma, Decl(plainJSGrammarErrors.js, 65, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 66, 36))
>restCantHaveTrailingComma : Symbol(restCantHaveTrailingComma, Decl(plainJSGrammarErrors.js, 85, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 86, 36))
}
;({ ...{} } = {})
const doom = { e: 1, m: 1, name: "knee-deep" }
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 69, 5))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 69, 14))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 69, 20))
>name : Symbol(name, Decl(plainJSGrammarErrors.js, 69, 26))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 89, 5))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 89, 14))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 89, 20))
>name : Symbol(name, Decl(plainJSGrammarErrors.js, 89, 26))
const { ...rest, e: episode, m: mission } = doom
>rest : Symbol(rest, Decl(plainJSGrammarErrors.js, 70, 7))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 69, 14))
>episode : Symbol(episode, Decl(plainJSGrammarErrors.js, 70, 16))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 69, 20))
>mission : Symbol(mission, Decl(plainJSGrammarErrors.js, 70, 28))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 69, 5))
>rest : Symbol(rest, Decl(plainJSGrammarErrors.js, 90, 7))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 89, 14))
>episode : Symbol(episode, Decl(plainJSGrammarErrors.js, 90, 16))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 89, 20))
>mission : Symbol(mission, Decl(plainJSGrammarErrors.js, 90, 28))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 89, 5))
const { e: eep, m: em, ...rest: noRestAllowed } = doom
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 69, 14))
>eep : Symbol(eep, Decl(plainJSGrammarErrors.js, 71, 7))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 69, 20))
>em : Symbol(em, Decl(plainJSGrammarErrors.js, 71, 15))
>noRestAllowed : Symbol(noRestAllowed, Decl(plainJSGrammarErrors.js, 71, 22))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 69, 5))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 89, 14))
>eep : Symbol(eep, Decl(plainJSGrammarErrors.js, 91, 7))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 89, 20))
>em : Symbol(em, Decl(plainJSGrammarErrors.js, 91, 15))
>noRestAllowed : Symbol(noRestAllowed, Decl(plainJSGrammarErrors.js, 91, 22))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 89, 5))
const { e: erp, m: erm, ...noInitialiser = true } = doom
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 69, 14))
>erp : Symbol(erp, Decl(plainJSGrammarErrors.js, 72, 7))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 69, 20))
>erm : Symbol(erm, Decl(plainJSGrammarErrors.js, 72, 15))
>noInitialiser : Symbol(noInitialiser, Decl(plainJSGrammarErrors.js, 72, 23))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 69, 5))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 89, 14))
>erp : Symbol(erp, Decl(plainJSGrammarErrors.js, 92, 7))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 89, 20))
>erm : Symbol(erm, Decl(plainJSGrammarErrors.js, 92, 15))
>noInitialiser : Symbol(noInitialiser, Decl(plainJSGrammarErrors.js, 92, 23))
>doom : Symbol(doom, Decl(plainJSGrammarErrors.js, 89, 5))
// left-over parsing
var;
var x = 1 || 2 ?? 3
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 76, 3), Decl(plainJSGrammarErrors.js, 77, 3))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 96, 3), Decl(plainJSGrammarErrors.js, 97, 3))
var x = 2 ?? 3 || 4
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 76, 3), Decl(plainJSGrammarErrors.js, 77, 3))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 96, 3), Decl(plainJSGrammarErrors.js, 97, 3))
const arr = x
>arr : Symbol(arr, Decl(plainJSGrammarErrors.js, 78, 5))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 78, 11))
>arr : Symbol(arr, Decl(plainJSGrammarErrors.js, 98, 5))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 98, 11))
=> x + 1
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 78, 11))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 98, 11))
var a = [1,2]
>a : Symbol(a, Decl(plainJSGrammarErrors.js, 80, 3))
>a : Symbol(a, Decl(plainJSGrammarErrors.js, 100, 3))
a?.`length`;
>a : Symbol(a, Decl(plainJSGrammarErrors.js, 80, 3))
>a : Symbol(a, Decl(plainJSGrammarErrors.js, 100, 3))
const o = {
>o : Symbol(o, Decl(plainJSGrammarErrors.js, 82, 5))
>o : Symbol(o, Decl(plainJSGrammarErrors.js, 102, 5))
[console.log('oh no'),2]: 'hi',
>[console.log('oh no'),2] : Symbol([console.log('oh no'),2], Decl(plainJSGrammarErrors.js, 82, 11))
>[console.log('oh no'),2] : Symbol([console.log('oh no'),2], Decl(plainJSGrammarErrors.js, 102, 11))
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
#noPrivate: 3,
>#noPrivate : Symbol(#noPrivate, Decl(plainJSGrammarErrors.js, 83, 35))
>#noPrivate : Symbol(#noPrivate, Decl(plainJSGrammarErrors.js, 103, 35))
export cantExportProperties: 4,
>cantExportProperties : Symbol(cantExportProperties, Decl(plainJSGrammarErrors.js, 84, 18))
>cantExportProperties : Symbol(cantExportProperties, Decl(plainJSGrammarErrors.js, 104, 18))
// TODO: See what the existing JS error is like for these
cantHaveQuestionMark?: 1,
>cantHaveQuestionMark : Symbol(cantHaveQuestionMark, Decl(plainJSGrammarErrors.js, 85, 35))
>cantHaveQuestionMark : Symbol(cantHaveQuestionMark, Decl(plainJSGrammarErrors.js, 105, 35))
m?() { return 12 },
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 87, 29))
>m : Symbol(m, Decl(plainJSGrammarErrors.js, 107, 29))
definitely!,
>definitely : Symbol(definitely, Decl(plainJSGrammarErrors.js, 88, 23))
>definitely : Symbol(definitely, Decl(plainJSGrammarErrors.js, 108, 23))
definiteMethod!() { return 13 },
>definiteMethod : Symbol(definiteMethod, Decl(plainJSGrammarErrors.js, 89, 16))
>definiteMethod : Symbol(definiteMethod, Decl(plainJSGrammarErrors.js, 109, 16))
}
const noAssignment = {
>noAssignment : Symbol(noAssignment, Decl(plainJSGrammarErrors.js, 92, 5))
>noAssignment : Symbol(noAssignment, Decl(plainJSGrammarErrors.js, 112, 5))
assignment = 1,
>assignment : Symbol(assignment, Decl(plainJSGrammarErrors.js, 92, 22))
>assignment : Symbol(assignment, Decl(plainJSGrammarErrors.js, 112, 22))
}
var noTrailingComma = 1,;
>noTrailingComma : Symbol(noTrailingComma, Decl(plainJSGrammarErrors.js, 95, 3))
>noTrailingComma : Symbol(noTrailingComma, Decl(plainJSGrammarErrors.js, 115, 3))
class MissingExtends extends { }
>MissingExtends : Symbol(MissingExtends, Decl(plainJSGrammarErrors.js, 95, 25))
>MissingExtends : Symbol(MissingExtends, Decl(plainJSGrammarErrors.js, 115, 25))
// let/const mistakes
const { e: ee };
>e : Symbol(e)
>ee : Symbol(ee, Decl(plainJSGrammarErrors.js, 99, 7))
>ee : Symbol(ee, Decl(plainJSGrammarErrors.js, 119, 7))
const noInit;
>noInit : Symbol(noInit, Decl(plainJSGrammarErrors.js, 100, 5))
>noInit : Symbol(noInit, Decl(plainJSGrammarErrors.js, 120, 5))
let let = 15;
>let : Symbol(let, Decl(plainJSGrammarErrors.js, 101, 3))
>let : Symbol(let, Decl(plainJSGrammarErrors.js, 121, 3))
if (true)
let onlyBlockLet = 17;
>onlyBlockLet : Symbol(onlyBlockLet, Decl(plainJSGrammarErrors.js, 103, 7))
>onlyBlockLet : Symbol(onlyBlockLet, Decl(plainJSGrammarErrors.js, 123, 7))
if (true)
const onlyBlockConst = 18;
>onlyBlockConst : Symbol(onlyBlockConst, Decl(plainJSGrammarErrors.js, 105, 9))
>onlyBlockConst : Symbol(onlyBlockConst, Decl(plainJSGrammarErrors.js, 125, 9))
// loop mistakes
let async
>async : Symbol(async, Decl(plainJSGrammarErrors.js, 108, 3))
>async : Symbol(async, Decl(plainJSGrammarErrors.js, 128, 3))
export const l = [1,2,3]
>l : Symbol(l, Decl(plainJSGrammarErrors.js, 109, 12))
>l : Symbol(l, Decl(plainJSGrammarErrors.js, 129, 12))
for (async of l) {
>async : Symbol(async, Decl(plainJSGrammarErrors.js, 108, 3))
>l : Symbol(l, Decl(plainJSGrammarErrors.js, 109, 12))
>async : Symbol(async, Decl(plainJSGrammarErrors.js, 128, 3))
>l : Symbol(l, Decl(plainJSGrammarErrors.js, 129, 12))
console.log(x)
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 76, 3), Decl(plainJSGrammarErrors.js, 77, 3))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 96, 3), Decl(plainJSGrammarErrors.js, 97, 3))
}
for (const cantHaveInit = 1 of [1,2,3]) {
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 113, 10))
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 133, 10))
console.log(cantHaveInit)
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 113, 10))
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 133, 10))
}
for (const cantHaveInit = 1 in [1,2,3]) {
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 116, 10))
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 136, 10))
console.log(cantHaveInit)
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 116, 10))
>cantHaveInit : Symbol(cantHaveInit, Decl(plainJSGrammarErrors.js, 136, 10))
}
for (let y, x of [1,2,3]) {
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 119, 8))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 119, 11))
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 139, 8))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 139, 11))
console.log(x)
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 119, 11))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 139, 11))
}
for (let y, x in [1,2,3]) {
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 122, 8))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 122, 11))
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 142, 8))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 142, 11))
console.log(x)
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 122, 11))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 142, 11))
}
// duplication mistakes
var b
>b : Symbol(b, Decl(plainJSGrammarErrors.js, 127, 3))
>b : Symbol(b, Decl(plainJSGrammarErrors.js, 147, 3))
switch (b) {
>b : Symbol(b, Decl(plainJSGrammarErrors.js, 127, 3))
>b : Symbol(b, Decl(plainJSGrammarErrors.js, 147, 3))
case false:
console.log('no')
@ -340,22 +383,28 @@ try {
throw 2
}
catch (e) {
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 139, 7))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 159, 7))
const e = 1
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 140, 9))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 160, 9))
console.log(e)
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 140, 9))
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 160, 9))
}
try {
throw 20
}
catch (e = 0) {
>e : Symbol(e, Decl(plainJSGrammarErrors.js, 166, 7))
}
label: for (const x in [1,2,3]) {
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 143, 17))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 168, 17))
label: for (const y in [1,2,3]) {
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 144, 21))
>y : Symbol(y, Decl(plainJSGrammarErrors.js, 169, 21))
break label;
}
@ -363,32 +412,32 @@ label: for (const x in [1,2,3]) {
// labels
function crossFunctionBoundary() {
>crossFunctionBoundary : Symbol(crossFunctionBoundary, Decl(plainJSGrammarErrors.js, 147, 1))
>crossFunctionBoundary : Symbol(crossFunctionBoundary, Decl(plainJSGrammarErrors.js, 172, 1))
outer: for(;;) {
function test() {
>test : Symbol(test, Decl(plainJSGrammarErrors.js, 151, 20))
>test : Symbol(test, Decl(plainJSGrammarErrors.js, 176, 20))
break outer
}
test()
>test : Symbol(test, Decl(plainJSGrammarErrors.js, 151, 20))
>test : Symbol(test, Decl(plainJSGrammarErrors.js, 176, 20))
}
}
function continueIterationOnly(x) {
>continueIterationOnly : Symbol(continueIterationOnly, Decl(plainJSGrammarErrors.js, 157, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 158, 31))
>continueIterationOnly : Symbol(continueIterationOnly, Decl(plainJSGrammarErrors.js, 182, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 183, 31))
outer: switch (x) {
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 158, 31))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 183, 31))
case 1:
continue outer
}
}
function jumpToLabelOnly(x) {
>jumpToLabelOnly : Symbol(jumpToLabelOnly, Decl(plainJSGrammarErrors.js, 163, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 164, 25))
>jumpToLabelOnly : Symbol(jumpToLabelOnly, Decl(plainJSGrammarErrors.js, 188, 1))
>x : Symbol(x, Decl(plainJSGrammarErrors.js, 189, 25))
break jumpToLabelOnly
}
@ -401,19 +450,21 @@ continue
// other weirdness
export let noMeta = import.metal
>noMeta : Symbol(noMeta, Decl(plainJSGrammarErrors.js, 175, 10))
>noMeta : Symbol(noMeta, Decl(plainJSGrammarErrors.js, 200, 10))
function foo() { new.targe }
>foo : Symbol(foo, Decl(plainJSGrammarErrors.js, 175, 32))
>new.targe : Symbol(foo, Decl(plainJSGrammarErrors.js, 175, 32))
>targe : Symbol(foo, Decl(plainJSGrammarErrors.js, 175, 32))
>foo : Symbol(foo, Decl(plainJSGrammarErrors.js, 200, 32))
>new.targe : Symbol(foo, Decl(plainJSGrammarErrors.js, 200, 32))
>targe : Symbol(foo, Decl(plainJSGrammarErrors.js, 200, 32))
const nullaryDynamicImport = import()
>nullaryDynamicImport : Symbol(nullaryDynamicImport, Decl(plainJSGrammarErrors.js, 177, 5))
>nullaryDynamicImport : Symbol(nullaryDynamicImport, Decl(plainJSGrammarErrors.js, 202, 5))
const trinaryDynamicImport = import('1', '2', '3')
>trinaryDynamicImport : Symbol(trinaryDynamicImport, Decl(plainJSGrammarErrors.js, 178, 5))
>trinaryDynamicImport : Symbol(trinaryDynamicImport, Decl(plainJSGrammarErrors.js, 203, 5))
const spreadDynamicImport = import(...[])
>spreadDynamicImport : Symbol(spreadDynamicImport, Decl(plainJSGrammarErrors.js, 179, 5))
>spreadDynamicImport : Symbol(spreadDynamicImport, Decl(plainJSGrammarErrors.js, 204, 5))
return

View File

@ -41,6 +41,8 @@ class C {
>log : (...data: any[]) => void
>x : number
}
return null
>null : null
}
// modifier mistakes
static constructor() { }
@ -95,6 +97,22 @@ class C {
>"constructor" : number
>16 : 16
}
class {
missingName = true
>missingName : boolean
>true : true
}
class Doubler extends C extends C { }
>Doubler : Doubler
>C : C
>C : C
class Trebler extends C,C,C { }
>Trebler : Trebler
>C : C
>C : C
>C : C
// #private mistakes
#unrelated
junk.#m
@ -157,6 +175,34 @@ async import 'assert'
async export { CantAsyncClass }
>CantAsyncClass : typeof CantAsyncClass
export import 'fs'
export export { C }
>C : typeof C
function nestedExports() {
>nestedExports : () => void
export { staticParam }
>staticParam : any
import 'fs'
export default 12
}
function outerStaticFunction() {
>outerStaticFunction : () => void
static function staticFunction() { }
>staticFunction : () => void
}
const noStaticLiteralMethods = {
>noStaticLiteralMethods : { m(): void; }
>{ static m() { }} : { m(): void; }
static m() {
>m : () => void
}
}
// rest parameters
function restMustBeLast(...x, y) {
>restMustBeLast : (...x: any[], y: any) => void
@ -471,6 +517,14 @@ catch (e) {
>log : (...data: any[]) => void
>e : 1
}
try {
throw 20
>20 : 20
}
catch (e = 0) {
>e : any
>0 : 0
}
label: for (const x in [1,2,3]) {
>label : any
>x : string
@ -570,3 +624,5 @@ const spreadDynamicImport = import(...[])
>...[] : undefined
>[] : undefined[]
return

View File

@ -19,6 +19,7 @@ class C {
for await (const x of [1,2,3]) {
console.log(x)
}
return null
}
// modifier mistakes
static constructor() { }
@ -44,6 +45,11 @@ class C {
// other
"constructor" = 16
}
class {
missingName = true
}
class Doubler extends C extends C { }
class Trebler extends C,C,C { }
// #private mistakes
#unrelated
junk.#m
@ -63,6 +69,20 @@ async class CantAsyncClass {
async const cantAsyncConst = 2
async import 'assert'
async export { CantAsyncClass }
export import 'fs'
export export { C }
function nestedExports() {
export { staticParam }
import 'fs'
export default 12
}
function outerStaticFunction() {
static function staticFunction() { }
}
const noStaticLiteralMethods = {
static m() {
}
}
// rest parameters
function restMustBeLast(...x, y) {
@ -146,6 +166,11 @@ catch (e) {
const e = 1
console.log(e)
}
try {
throw 20
}
catch (e = 0) {
}
label: for (const x in [1,2,3]) {
label: for (const y in [1,2,3]) {
break label;
@ -183,3 +208,5 @@ function foo() { new.targe }
const nullaryDynamicImport = import()
const trinaryDynamicImport = import('1', '2', '3')
const spreadDynamicImport = import(...[])
return