Skip to content

Commit 33e810d

Browse files
committed
fix import.meta parsing/fix assertions on string literals
1 parent f8212de commit 33e810d

3 files changed

Lines changed: 17 additions & 12 deletions

File tree

lang-version-impl/typescript-impl/src/main/grammar/consulo/typescript/language/grammar/TypeScript.bnf

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
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
479480
ambient_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

487488
private import_clause ::= IDENTIFIER (',' (namespace_import | named_imports))?
488489
| namespace_import
@@ -496,16 +497,17 @@ import_specifier ::= TYPE_KEYWORD? IDENTIFIER (AS_KEYWORD IDENTIFIER)?
496497

497498
private from_clause ::= FROM_KEYWORD module_specifier
498499

499-
private module_specifier ::= STRING_LITERAL
500+
private module_specifier ::= STRING_LITERAL | SINGLE_QUOTE_STRING_LITERAL
500501

501502
import_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 ---
506507
export_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

609612
this_expression ::= 'this'
610613
super_expression ::= 'super'
614+
import_meta_expression ::= 'import' '.' IDENTIFIER
611615
reference_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

614618
yield_expression ::= 'yield' '*'? expression?
615619

@@ -719,7 +723,7 @@ mapped_type ::= '{' ('+' | '-')? READONLY_KEYWORD? '[' IDENTIFIER 'in' type_expr
719723

720724
indexed_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

724728
typeof_type ::= 'typeof' reference_expression
725729

@@ -729,7 +733,7 @@ infer_type ::= INFER_KEYWORD IDENTIFIER ('extends' type_expression)?
729733

730734
template_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

734738
type_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

754758
qualified_name ::= IDENTIFIER ('.' IDENTIFIER)*
755759

lang-version-impl/typescript-impl/src/main/java/consulo/typescript/language/TypeScriptTokenTypeFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public final class TypeScriptTokenTypeFactory {
3131
TOKEN_MAP.put("IDENTIFIER", JSTokenTypes.IDENTIFIER);
3232
TOKEN_MAP.put("NUMERIC_LITERAL", JSTokenTypes.NUMERIC_LITERAL);
3333
TOKEN_MAP.put("STRING_LITERAL", JSTokenTypes.STRING_LITERAL);
34+
TOKEN_MAP.put("SINGLE_QUOTE_STRING_LITERAL", JSTokenTypes.SINGLE_QUOTE_STRING_LITERAL);
3435
TOKEN_MAP.put("REGEXP_LITERAL", JSTokenTypes.REGEXP_LITERAL);
3536

3637
// Template literals (TypeScript-specific tokens)

lang-version-impl/typescript-impl/src/main/java/consulo/typescript/language/impl/syntax/_TypeScriptLexer.flex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ REGEXP_LITERAL="/"([^\*\\/\r\n]|{ESCAPE_SEQUENCE}|{GROUP})([^\\/\r\n]|{ESCAPE_SE
7171
<YYINITIAL,DIV_OR_GT,TEMPLATE_STRING_EXPRESSION> {FLOAT_LITERAL} { yybegin(DIV_OR_GT); return JSTokenTypes.NUMERIC_LITERAL; }
7272

7373
// === String literals ===
74-
<YYINITIAL,DIV_OR_GT,TEMPLATE_STRING_EXPRESSION> {QUOTED_LITERAL} { yybegin(DIV_OR_GT); return JSTokenTypes.STRING_LITERAL; }
74+
<YYINITIAL,DIV_OR_GT,TEMPLATE_STRING_EXPRESSION> {QUOTED_LITERAL} { yybegin(DIV_OR_GT); return JSTokenTypes.SINGLE_QUOTE_STRING_LITERAL; }
7575
<YYINITIAL,DIV_OR_GT,TEMPLATE_STRING_EXPRESSION> {DOUBLE_QUOTED_LITERAL} { yybegin(DIV_OR_GT); return JSTokenTypes.STRING_LITERAL; }
7676

7777
// === Template literals ===

0 commit comments

Comments
 (0)