Skip to content

Commit 8ea1898

Browse files
committed
Reparse @import as synthetic type-only import declaration
It is slightly stricter than Strada's treatment because Corsa now treats the synthetic node *exactly* as a type-only declaration.
1 parent 4d22cfd commit 8ea1898

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+156
-714
lines changed

internal/api/encoder/encoder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ func getChildrenPropertyMask(node *ast.Node) uint8 {
459459
case ast.KindImportEqualsDeclaration:
460460
n := node.AsImportEqualsDeclaration()
461461
return (boolToByte(n.Modifiers() != nil) << 0) | (boolToByte(n.Name() != nil) << 1) | (boolToByte(n.ModuleReference != nil) << 2)
462-
case ast.KindImportDeclaration:
462+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
463463
n := node.AsImportDeclaration()
464464
return (boolToByte(n.Modifiers() != nil) << 0) | (boolToByte(n.ImportClause != nil) << 1) | (boolToByte(n.ModuleSpecifier != nil) << 2) | (boolToByte(n.Attributes != nil) << 3)
465465
case ast.KindImportSpecifier:
@@ -468,7 +468,7 @@ func getChildrenPropertyMask(node *ast.Node) uint8 {
468468
case ast.KindImportClause:
469469
n := node.AsImportClause()
470470
return (boolToByte(n.Name() != nil) << 0) | (boolToByte(n.NamedBindings != nil) << 1)
471-
case ast.KindExportAssignment:
471+
case ast.KindExportAssignment, ast.KindJSExportAssignment:
472472
n := node.AsExportAssignment()
473473
return (boolToByte(n.Modifiers() != nil) << 0) | (boolToByte(n.Expression != nil) << 1)
474474
case ast.KindNamespaceExportDeclaration:

internal/ast/ast.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ func (n *Node) Children() *NodeList {
751751

752752
func (n *Node) ModuleSpecifier() *Expression {
753753
switch n.Kind {
754-
case KindImportDeclaration:
754+
case KindImportDeclaration, KindJSImportDeclaration:
755755
return n.AsImportDeclaration().ModuleSpecifier
756756
case KindExportDeclaration:
757757
return n.AsExportDeclaration().ModuleSpecifier
@@ -4036,13 +4036,21 @@ type ImportDeclaration struct {
40364036
Attributes *ImportAttributesNode // ImportAttributesNode. Optional
40374037
}
40384038

4039-
func (f *NodeFactory) NewImportDeclaration(modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
4039+
func (f *NodeFactory) newImportOrJSImportDeclaration(kind Kind, modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
40404040
data := &ImportDeclaration{}
40414041
data.modifiers = modifiers
40424042
data.ImportClause = importClause
40434043
data.ModuleSpecifier = moduleSpecifier
40444044
data.Attributes = attributes
4045-
return f.newNode(KindImportDeclaration, data)
4045+
return f.newNode(kind, data)
4046+
}
4047+
4048+
func (f *NodeFactory) NewImportDeclaration(modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
4049+
return f.newImportOrJSImportDeclaration(KindImportDeclaration, modifiers, importClause, moduleSpecifier, attributes)
4050+
}
4051+
4052+
func (f *NodeFactory) NewJSImportDeclaration(modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
4053+
return f.newImportOrJSImportDeclaration(KindJSImportDeclaration, modifiers, importClause, moduleSpecifier, attributes)
40464054
}
40474055

40484056
func (f *NodeFactory) UpdateImportDeclaration(node *ImportDeclaration, modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {

internal/ast/kind.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ const (
381381
KindJSTypeAliasDeclaration
382382
KindJSExportAssignment
383383
KindCommonJSExport
384+
KindJSImportDeclaration
384385
// Transformation nodes
385386
KindNotEmittedStatement
386387
KindPartiallyEmittedExpression

internal/ast/kind_stringer_generated.go

Lines changed: 8 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/ast/utilities.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,7 @@ func isDeclarationStatementKind(kind Kind) bool {
646646
KindEnumDeclaration,
647647
KindModuleDeclaration,
648648
KindImportDeclaration,
649+
KindJSImportDeclaration,
649650
KindImportEqualsDeclaration,
650651
KindExportDeclaration,
651652
KindExportAssignment,
@@ -1036,7 +1037,7 @@ func CanHaveIllegalDecorators(node *Node) bool {
10361037
KindMissingDeclaration, KindVariableStatement,
10371038
KindInterfaceDeclaration, KindTypeAliasDeclaration,
10381039
KindEnumDeclaration, KindModuleDeclaration,
1039-
KindImportEqualsDeclaration, KindImportDeclaration,
1040+
KindImportEqualsDeclaration, KindImportDeclaration, KindJSImportDeclaration,
10401041
KindNamespaceExportDeclaration, KindExportDeclaration,
10411042
KindExportAssignment:
10421043
return true
@@ -1081,6 +1082,7 @@ func CanHaveModifiers(node *Node) bool {
10811082
KindModuleDeclaration,
10821083
KindImportEqualsDeclaration,
10831084
KindImportDeclaration,
1085+
KindJSImportDeclaration,
10841086
KindExportAssignment,
10851087
KindExportDeclaration:
10861088
return true
@@ -1662,7 +1664,7 @@ func IsAnyImportOrReExport(node *Node) bool {
16621664
}
16631665

16641666
func IsAnyImportSyntax(node *Node) bool {
1665-
return NodeKindIs(node, KindImportDeclaration, KindImportEqualsDeclaration)
1667+
return NodeKindIs(node, KindImportDeclaration, KindJSImportDeclaration, KindImportEqualsDeclaration)
16661668
}
16671669

16681670
func IsJsonSourceFile(file *SourceFile) bool {
@@ -1675,7 +1677,7 @@ func IsInJsonFile(node *Node) bool {
16751677

16761678
func GetExternalModuleName(node *Node) *Expression {
16771679
switch node.Kind {
1678-
case KindImportDeclaration:
1680+
case KindImportDeclaration, KindJSImportDeclaration:
16791681
return node.AsImportDeclaration().ModuleSpecifier
16801682
case KindExportDeclaration:
16811683
return node.AsExportDeclaration().ModuleSpecifier
@@ -1701,7 +1703,7 @@ func GetExternalModuleName(node *Node) *Expression {
17011703

17021704
func GetImportAttributes(node *Node) *Node {
17031705
switch node.Kind {
1704-
case KindImportDeclaration:
1706+
case KindImportDeclaration, KindJSImportDeclaration:
17051707
return node.AsImportDeclaration().Attributes
17061708
case KindExportDeclaration:
17071709
return node.AsExportDeclaration().Attributes
@@ -2053,6 +2055,7 @@ func GetMeaningFromDeclaration(node *Node) SemanticMeaning {
20532055
KindImportSpecifier,
20542056
KindImportEqualsDeclaration,
20552057
KindImportDeclaration,
2058+
KindJSImportDeclaration,
20562059
KindExportAssignment,
20572060
KindJSExportAssignment,
20582061
KindExportDeclaration:
@@ -2168,7 +2171,7 @@ func getModuleInstanceStateWorker(node *Node, ancestors []*Node, visited map[Nod
21682171
if IsEnumConst(node) {
21692172
return ModuleInstanceStateConstEnumOnly
21702173
}
2171-
case KindImportDeclaration, KindImportEqualsDeclaration:
2174+
case KindImportDeclaration, KindJSImportDeclaration, KindImportEqualsDeclaration:
21722175
if !HasSyntacticModifier(node, ModifierFlagsExport) {
21732176
return ModuleInstanceStateNonInstantiated
21742177
}
@@ -2339,7 +2342,7 @@ func GetFirstIdentifier(node *Node) *Node {
23392342

23402343
func GetNamespaceDeclarationNode(node *Node) *Node {
23412344
switch node.Kind {
2342-
case KindImportDeclaration:
2345+
case KindImportDeclaration, KindJSImportDeclaration:
23432346
importClause := node.AsImportDeclaration().ImportClause
23442347
if importClause != nil && importClause.AsImportClause().NamedBindings != nil && IsNamespaceImport(importClause.AsImportClause().NamedBindings) {
23452348
return importClause.AsImportClause().NamedBindings
@@ -2364,7 +2367,7 @@ func ModuleExportNameIsDefault(node *Node) bool {
23642367
func IsDefaultImport(node *Node /*ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration | JSDocImportTag*/) bool {
23652368
var importClause *Node
23662369
switch node.Kind {
2367-
case KindImportDeclaration:
2370+
case KindImportDeclaration, KindJSImportDeclaration:
23682371
importClause = node.AsImportDeclaration().ImportClause
23692372
case KindJSDocImportTag:
23702373
importClause = node.AsJSDocImportTag().ImportClause

internal/checker/checker.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2205,7 +2205,7 @@ func (c *Checker) checkSourceElementWorker(node *ast.Node) {
22052205
c.checkEnumMember(node)
22062206
case ast.KindModuleDeclaration:
22072207
c.checkModuleDeclaration(node)
2208-
case ast.KindImportDeclaration:
2208+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
22092209
c.checkImportDeclaration(node)
22102210
case ast.KindImportEqualsDeclaration:
22112211
c.checkImportEqualsDeclaration(node)
@@ -4898,7 +4898,7 @@ func (c *Checker) checkModuleAugmentationElement(node *ast.Node) {
48984898
break
48994899
}
49004900
fallthrough
4901-
case ast.KindImportDeclaration:
4901+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
49024902
c.grammarErrorOnFirstToken(node, diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module)
49034903
case ast.KindBindingElement, ast.KindVariableDeclaration:
49044904
name := node.Name()
@@ -5080,6 +5080,8 @@ func isExclusivelyTypeOnlyImportOrExport(node *ast.Node) bool {
50805080
switch node.Kind {
50815081
case ast.KindExportDeclaration:
50825082
return node.AsExportDeclaration().IsTypeOnly
5083+
case ast.KindJSImportDeclaration:
5084+
return true
50835085
case ast.KindImportDeclaration:
50845086
if importClause := node.AsImportDeclaration().ImportClause; importClause != nil {
50855087
return importClause.AsImportClause().IsTypeOnly
@@ -14173,7 +14175,7 @@ func (c *Checker) getModuleSpecifierForImportOrExport(node *ast.Node) *ast.Node
1417314175

1417414176
func getModuleSpecifierFromNode(node *ast.Node) *ast.Node {
1417514177
switch node.Kind {
14176-
case ast.KindImportDeclaration:
14178+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
1417714179
return node.AsImportDeclaration().ModuleSpecifier
1417814180
case ast.KindExportDeclaration:
1417914181
return node.AsExportDeclaration().ModuleSpecifier
@@ -29387,7 +29389,7 @@ func (c *Checker) getSymbolAtLocation(node *ast.Node, ignoreErrors bool) *ast.Sy
2938729389
// 3). Require in Javascript
2938829390
// 4). type A = import("./f/*gotToDefinitionHere*/oo")
2938929391
if (ast.IsExternalModuleImportEqualsDeclaration(grandParent) && getExternalModuleImportEqualsDeclarationExpression(grandParent) == node) ||
29390-
((parent.Kind == ast.KindImportDeclaration || parent.Kind == ast.KindExportDeclaration) && parent.AsImportDeclaration().ModuleSpecifier == node) ||
29392+
((parent.Kind == ast.KindImportDeclaration || parent.Kind == ast.KindJSImportDeclaration || parent.Kind == ast.KindExportDeclaration) && parent.AsImportDeclaration().ModuleSpecifier == node) ||
2939129393
ast.IsVariableDeclarationInitializedToRequire(grandParent) ||
2939229394
(ast.IsLiteralTypeNode(parent) && ast.IsLiteralImportTypeNode(grandParent) && grandParent.AsImportTypeNode().Argument == parent) {
2939329395
return c.resolveExternalModuleName(node, node, ignoreErrors)

internal/checker/grammarchecks.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ func (c *Checker) checkGrammarModifiers(node *ast.Node /*Union[HasModifiers, Has
547547
return c.grammarErrorOnNode(lastAsync, diagnostics.X_0_modifier_cannot_appear_on_a_constructor_declaration, "async")
548548
}
549549
return false
550-
} else if (node.Kind == ast.KindImportDeclaration || node.Kind == ast.KindImportEqualsDeclaration) && flags&ast.ModifierFlagsAmbient != 0 {
550+
} else if (node.Kind == ast.KindImportDeclaration || node.Kind == ast.KindJSImportDeclaration || node.Kind == ast.KindImportEqualsDeclaration) && flags&ast.ModifierFlagsAmbient != 0 {
551551
return c.grammarErrorOnNode(lastDeclare, diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare")
552552
} else if node.Kind == ast.KindParameter && (flags&ast.ModifierFlagsParameterPropertyModifier != 0) && ast.IsBindingPattern(node.Name()) {
553553
return c.grammarErrorOnNode(node, diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern)
@@ -598,6 +598,7 @@ func (c *Checker) findFirstIllegalModifier(node *ast.Node) *ast.Node {
598598
ast.KindIndexSignature,
599599
ast.KindModuleDeclaration,
600600
ast.KindImportDeclaration,
601+
ast.KindJSImportDeclaration,
601602
ast.KindImportEqualsDeclaration,
602603
ast.KindExportDeclaration,
603604
ast.KindExportAssignment,
@@ -2021,7 +2022,7 @@ func (c *Checker) checkGrammarTopLevelElementForRequiredDeclareModifier(node *as
20212022
// export_opt AmbientDeclaration
20222023
//
20232024
// TODO: The spec needs to be amended to reflect this grammar.
2024-
if node.Kind == ast.KindInterfaceDeclaration || node.Kind == ast.KindTypeAliasDeclaration || node.Kind == ast.KindImportDeclaration || node.Kind == ast.KindImportEqualsDeclaration || node.Kind == ast.KindExportDeclaration || node.Kind == ast.KindExportAssignment || node.Kind == ast.KindJSExportAssignment || node.Kind == ast.KindNamespaceExportDeclaration || ast.HasSyntacticModifier(node, ast.ModifierFlagsAmbient|ast.ModifierFlagsExport|ast.ModifierFlagsDefault) {
2025+
if node.Kind == ast.KindInterfaceDeclaration || node.Kind == ast.KindTypeAliasDeclaration || node.Kind == ast.KindImportDeclaration || node.Kind == ast.KindJSImportDeclaration || node.Kind == ast.KindImportEqualsDeclaration || node.Kind == ast.KindExportDeclaration || node.Kind == ast.KindExportAssignment || node.Kind == ast.KindJSExportAssignment || node.Kind == ast.KindNamespaceExportDeclaration || ast.HasSyntacticModifier(node, ast.ModifierFlagsAmbient|ast.ModifierFlagsExport|ast.ModifierFlagsDefault) {
20252026
return false
20262027
}
20272028

internal/ls/utilities.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func isInString(file *ast.SourceFile, position int, previousToken *ast.Node) boo
2020

2121
func tryGetImportFromModuleSpecifier(node *ast.StringLiteralLike) *ast.Node {
2222
switch node.Parent.Kind {
23-
case ast.KindImportDeclaration, ast.KindExportDeclaration, ast.KindJSDocImportTag:
23+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration, ast.KindExportDeclaration, ast.KindJSDocImportTag:
2424
return node.Parent
2525
case ast.KindExternalModuleReference:
2626
return node.Parent.Parent

internal/parser/reparser.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ func (p *Parser) reparseTags(parent *ast.Node, jsDoc []*ast.Node) {
7979
for _, tag := range j.AsJSDoc().Tags.Nodes {
8080
switch tag.Kind {
8181
case ast.KindJSDocTypedefTag:
82-
// !!! Don't mark typedefs as exported if they are not in a module
8382
typeExpression := tag.AsJSDocTypedefTag().TypeExpression
8483
if typeExpression == nil {
8584
break
@@ -115,7 +114,16 @@ func (p *Parser) reparseTags(parent *ast.Node, jsDoc []*ast.Node) {
115114
typeAlias.Loc = core.NewTextRange(tag.Pos(), tag.End())
116115
typeAlias.Flags = p.contextFlags | ast.NodeFlagsReparsed
117116
p.reparseList = append(p.reparseList, typeAlias)
118-
// !!! @overload and other unattached tags (@callback, @import et al) support goes here
117+
case ast.KindJSDocImportTag:
118+
importTag := tag.AsJSDocImportTag()
119+
importClause := importTag.ImportClause.Clone(&p.factory)
120+
importClause.Flags |= ast.NodeFlagsReparsed
121+
importClause.AsImportClause().IsTypeOnly = true
122+
importDeclaration := p.factory.NewJSImportDeclaration(importTag.Modifiers(), importClause, importTag.ModuleSpecifier, importTag.Attributes)
123+
importDeclaration.Loc = core.NewTextRange(tag.Pos(), tag.End())
124+
importDeclaration.Flags = p.contextFlags | ast.NodeFlagsReparsed
125+
p.reparseList = append(p.reparseList, importDeclaration)
126+
// !!! @overload and other unattached tags (@callback et al) support goes here
119127
}
120128
if !isLast {
121129
continue

internal/printer/namegenerator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (g *NameGenerator) generateNameForNode(node *ast.Node, privateName bool, fl
158158
panic("Generated name for a module or enum cannot be private and may have neither a prefix nor suffix")
159159
}
160160
return g.generateNameForModuleOrEnum(node)
161-
case ast.KindImportDeclaration, ast.KindExportDeclaration:
161+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration, ast.KindExportDeclaration:
162162
if privateName || len(prefix) > 0 || len(suffix) > 0 {
163163
panic("Generated name for an import or export cannot be private and may have neither a prefix nor suffix")
164164
}

internal/printer/printer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3953,7 +3953,7 @@ func (p *Printer) emitStatement(node *ast.Statement) {
39533953
p.emitNamespaceExportDeclaration(node.AsNamespaceExportDeclaration())
39543954
case ast.KindImportEqualsDeclaration:
39553955
p.emitImportEqualsDeclaration(node.AsImportEqualsDeclaration())
3956-
case ast.KindImportDeclaration:
3956+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
39573957
p.emitImportDeclaration(node.AsImportDeclaration())
39583958
case ast.KindExportAssignment, ast.KindJSExportAssignment:
39593959
p.emitExportAssignment(node.AsExportAssignment())
@@ -5605,7 +5605,7 @@ func (p *Printer) generateNames(node *ast.Node) {
56055605
}
56065606
case ast.KindObjectBindingPattern, ast.KindArrayBindingPattern:
56075607
p.generateAllNames(node.AsBindingPattern().Elements)
5608-
case ast.KindImportDeclaration:
5608+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
56095609
p.generateNames(node.AsImportDeclaration().ImportClause)
56105610
case ast.KindImportClause:
56115611
p.generateNameIfNeeded(node.AsImportClause().Name())

internal/transformers/commonjsmodule.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ func (tx *CommonJSModuleTransformer) visitTopLevel(node *ast.Node) *ast.Node {
6363
switch node.Kind {
6464
case ast.KindImportDeclaration:
6565
node = tx.visitTopLevelImportDeclaration(node.AsImportDeclaration())
66+
case ast.KindJSImportDeclaration:
67+
node = nil
6668
case ast.KindImportEqualsDeclaration:
6769
node = tx.visitTopLevelImportEqualsDeclaration(node.AsImportEqualsDeclaration())
6870
case ast.KindExportDeclaration:

internal/transformers/esmodule.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ func (tx *ESModuleTransformer) visit(node *ast.Node) *ast.Node {
3939
node = tx.visitSourceFile(node.AsSourceFile())
4040
case ast.KindImportDeclaration:
4141
node = tx.visitImportDeclaration(node.AsImportDeclaration())
42+
case ast.KindJSImportDeclaration:
43+
node = nil
4244
case ast.KindImportEqualsDeclaration:
4345
node = tx.visitImportEqualsDeclaration(node.AsImportEqualsDeclaration())
4446
case ast.KindExportAssignment:

internal/transformers/esnext.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ func (tx *ESNextTransformer) transformUsingDeclarations(statementsIn []*ast.Stat
368368

369369
switch node.Kind {
370370
case ast.KindImportDeclaration,
371+
ast.KindJSImportDeclaration,
371372
ast.KindImportEqualsDeclaration,
372373
ast.KindExportDeclaration,
373374
ast.KindFunctionDeclaration:

internal/transformers/externalmoduleinfo.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,12 @@ func (c *externalModuleInfoCollector) collect() *externalModuleInfo {
4747
hasImportDefault := false
4848
for _, node := range c.sourceFile.Statements.Nodes {
4949
switch node.Kind {
50-
case ast.KindImportDeclaration:
50+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
5151
// import "mod"
5252
// import x from "mod"
5353
// import * as x from "mod"
5454
// import { x, y } from "mod"
55+
// @import versions of above
5556
n := node.AsImportDeclaration()
5657
c.addExternalImport(node)
5758
if !hasImportStar && getImportNeedsImportStarHelper(n) {

internal/transformers/importelision.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (tx *ImportElisionTransformer) visit(node *ast.Node) *ast.Node {
2828
return nil
2929
}
3030
return tx.visitor.VisitEachChild(node)
31-
case ast.KindImportDeclaration:
31+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
3232
if !tx.isElisionBlocked(node) {
3333
n := node.AsImportDeclaration()
3434
// Do not elide a side-effect only import declaration.
@@ -166,7 +166,7 @@ func (tx *ImportElisionTransformer) isElisionBlocked(node *ast.Node /*ImportDecl
166166
}
167167

168168
switch node.Kind {
169-
case ast.KindImportDeclaration:
169+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
170170
n := node.AsImportDeclaration()
171171
p := parsed.AsImportDeclaration()
172172
if n.ImportClause != p.ImportClause {

internal/transformers/typeeraser.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func (tx *TypeEraserTransformer) visit(node *ast.Node) *ast.Node {
255255
}
256256
return tx.visitor.VisitEachChild(node)
257257

258-
case ast.KindImportDeclaration:
258+
case ast.KindImportDeclaration, ast.KindJSImportDeclaration:
259259
n := node.AsImportDeclaration()
260260
if n.ImportClause == nil {
261261
// Do not elide a side-effect only import declaration.

testdata/baselines/reference/submodule/conformance/importTag1.errors.txt

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
1-
1.js(4,13): error TS2304: Cannot find name 'I'.
1+
1.js(1,30): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.
2+
1.js(1,30): error TS2857: Import attributes cannot be used with type-only imports or exports.
3+
1.js(2,33): error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.
4+
1.js(2,33): error TS2857: Import attributes cannot be used with type-only imports or exports.
25

36

47
==== 0.ts (0 errors) ====
58
export interface I { }
69

7-
==== 1.js (1 errors) ====
10+
==== 1.js (4 errors) ====
811
/** @import { I } from './0' with { type: "json" } */
12+
~~~~~~~~~~~~~~~~~~~~~
13+
!!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.
14+
~~~~~~~~~~~~~~~~~~~~~
15+
!!! error TS2857: Import attributes cannot be used with type-only imports or exports.
916
/** @import * as foo from './0' with { type: "json" } */
17+
~~~~~~~~~~~~~~~~~~~~~
18+
!!! error TS2823: Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.
19+
~~~~~~~~~~~~~~~~~~~~~
20+
!!! error TS2857: Import attributes cannot be used with type-only imports or exports.
1021

1122
/** @param {I} a */
12-
~
13-
!!! error TS2304: Cannot find name 'I'.
1423
function f(a) {}
1524

0 commit comments

Comments
 (0)