215215 // Literals
216216 NUMERIC_LITERAL
217217 STRING_LITERAL
218+ SINGLE_QUOTE_STRING_LITERAL
218219 REGEXP_LITERAL
219220 NO_SUBSTITUTION_TEMPLATE
220221 TEMPLATE_HEAD
@@ -332,7 +333,7 @@ private statement_recover_ ::= !(
332333 SWITCH_KEYWORD | TRY_KEYWORD | RETURN_KEYWORD |
333334 THROW_KEYWORD | BREAK_KEYWORD | CONTINUE_KEYWORD |
334335 IMPORT_KEYWORD | EXPORT_KEYWORD | ENUM_KEYWORD | AT |
335- NUMERIC_LITERAL | STRING_LITERAL |
336+ NUMERIC_LITERAL | STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL |
336337 LPAR | LBRACKET | PLUS | MINUS | EXCL | TILDE |
337338 PLUSPLUS | MINUSMINUS | THIS_KEYWORD | NEW_KEYWORD |
338339 DELETE_KEYWORD | TYPEOF_KEYWORD | VOID_KEYWORD |
@@ -479,10 +480,10 @@ namespace_declaration ::= (NAMESPACE_KEYWORD | MODULE_KEYWORD) qualified_name bl
479480ambient_declaration ::= DECLARE_KEYWORD (var_statement | function_declaration | class_declaration | enum_declaration | namespace_declaration | interface_declaration | type_alias_declaration | GLOBAL_KEYWORD block_statement) {pin=1}
480481
481482// --- Import ---
482- import_declaration ::= 'import' TYPE_KEYWORD? import_clause from_clause import_attributes? semicolon
483- | 'import' TYPE_KEYWORD? module_specifier semicolon
484- | 'import' IDENTIFIER '=' (IDENTIFIER '(' module_specifier ')' | qualified_name) semicolon
485- {pin=1 }
483+ import_declaration ::= 'import' !('.' | '(') ( TYPE_KEYWORD? import_clause from_clause import_attributes? semicolon
484+ | TYPE_KEYWORD? module_specifier semicolon
485+ | IDENTIFIER '=' (IDENTIFIER '(' module_specifier ')' | qualified_name) semicolon)
486+ {pin=2 }
486487
487488private import_clause ::= IDENTIFIER (',' (namespace_import | named_imports))?
488489 | namespace_import
@@ -496,16 +497,17 @@ import_specifier ::= TYPE_KEYWORD? IDENTIFIER (AS_KEYWORD IDENTIFIER)?
496497
497498private from_clause ::= FROM_KEYWORD module_specifier
498499
499- private module_specifier ::= STRING_LITERAL
500+ private module_specifier ::= STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL
500501
501502import_attributes ::= (IDENTIFIER | AS_KEYWORD) '{' (import_attribute (',' import_attribute)* ','?)? '}'
502503
503- import_attribute ::= (IDENTIFIER | STRING_LITERAL) ':' (STRING_LITERAL | IDENTIFIER)
504+ import_attribute ::= (IDENTIFIER | STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL ) ':' (STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL | IDENTIFIER)
504505
505506// --- Export ---
506507export_declaration ::= 'export' (
507508 'default'? (function_declaration | class_declaration | interface_declaration | enum_declaration | type_alias_declaration)
508509 | 'default' expression semicolon
510+ | ambient_declaration
509511 | var_statement
510512 | named_exports from_clause? semicolon
511513 | '*' (AS_KEYWORD IDENTIFIER)? from_clause semicolon
@@ -601,15 +603,17 @@ private primary_expression ::=
601603 | new_expression
602604 | template_literal_expression
603605 | parenthesized_expression
606+ | import_meta_expression
604607 | reference_expression
605608 | type_assertion_expression
606609 | yield_expression
607610 | await_expression
608611
609612this_expression ::= 'this'
610613super_expression ::= 'super'
614+ import_meta_expression ::= 'import' '.' IDENTIFIER
611615reference_expression ::= IDENTIFIER
612- literal_expression ::= NUMERIC_LITERAL | STRING_LITERAL | TRUE_KEYWORD | FALSE_KEYWORD | NULL_KEYWORD | REGEXP_LITERAL
616+ literal_expression ::= NUMERIC_LITERAL | STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL | TRUE_KEYWORD | FALSE_KEYWORD | NULL_KEYWORD | REGEXP_LITERAL
613617
614618yield_expression ::= 'yield' '*'? expression?
615619
@@ -719,7 +723,7 @@ mapped_type ::= '{' ('+' | '-')? READONLY_KEYWORD? '[' IDENTIFIER 'in' type_expr
719723
720724indexed_access_type ::= primary_type '[' type_expression ']'
721725
722- literal_type ::= NUMERIC_LITERAL | STRING_LITERAL | TRUE_KEYWORD | FALSE_KEYWORD | NULL_KEYWORD
726+ literal_type ::= NUMERIC_LITERAL | STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL | TRUE_KEYWORD | FALSE_KEYWORD | NULL_KEYWORD
723727
724728typeof_type ::= 'typeof' reference_expression
725729
@@ -729,7 +733,7 @@ infer_type ::= INFER_KEYWORD IDENTIFIER ('extends' type_expression)?
729733
730734template_literal_type ::= NO_SUBSTITUTION_TEMPLATE | TEMPLATE_HEAD type_expression (TEMPLATE_MIDDLE type_expression)* TEMPLATE_TAIL
731735
732- predefined_type ::= IDENTIFIER
736+ predefined_type ::= IDENTIFIER | VOID_KEYWORD
733737
734738type_parameter_list ::= '<' type_parameter (',' type_parameter)* '>' {pin=1}
735739
@@ -749,7 +753,7 @@ private access_modifier ::= PUBLIC_KEYWORD | PRIVATE_KEYWORD | PROTECTED_KEYWORD
749753
750754// ==================== Utility Rules ====================
751755
752- private property_name ::= IDENTIFIER | STRING_LITERAL | NUMERIC_LITERAL | computed_property_name
756+ private property_name ::= IDENTIFIER | STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL | NUMERIC_LITERAL | computed_property_name
753757
754758qualified_name ::= IDENTIFIER ('.' IDENTIFIER)*
755759
0 commit comments