Skip to content

Commit 22b81d2

Browse files
committed
add import attribute type to resolved file cache key
1 parent 06a2c64 commit 22b81d2

File tree

6 files changed

+32
-13
lines changed

6 files changed

+32
-13
lines changed

internal/checker/checker.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ type Program interface {
533533
GetEmitModuleFormatOfFile(sourceFile ast.HasFileName) core.ModuleKind
534534
GetEmitSyntaxForUsageLocation(sourceFile ast.HasFileName, usageLocation *ast.StringLiteralLike) core.ResolutionMode
535535
GetImpliedNodeFormatForEmit(sourceFile ast.HasFileName) core.ModuleKind
536-
GetResolvedModule(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule
536+
GetResolvedModule(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode, importAttributeType string) *module.ResolvedModule
537537
GetResolvedModules() map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule]
538538
GetSourceFileMetaData(path tspath.Path) ast.SourceFileMetaData
539539
GetJSXRuntimeImportSpecifier(path tspath.Path) (moduleReference string, specifier *ast.Node)
@@ -544,6 +544,8 @@ type Program interface {
544544
GetProjectReferenceFromOutputDts(path tspath.Path) *tsoptions.SourceOutputAndProjectReference
545545
GetRedirectForResolution(file ast.HasFileName) *tsoptions.ParsedCommandLine
546546
CommonSourceDirectory() string
547+
548+
GetModuleLiteralImportAttributeType(node *ast.StringLiteralLike) string
547549
}
548550

549551
type Host interface {
@@ -14731,7 +14733,7 @@ func (c *Checker) resolveExternalModule(location *ast.Node, moduleReference stri
1473114733
mode = c.program.GetDefaultResolutionModeForFile(importingSourceFile)
1473214734
}
1473314735

14734-
resolvedModule := c.program.GetResolvedModule(importingSourceFile, moduleReference, mode)
14736+
resolvedModule := c.program.GetResolvedModule(importingSourceFile, moduleReference, mode, c.program.GetModuleLiteralImportAttributeType(contextSpecifier))
1473514737

1473614738
var resolutionDiagnostic *diagnostics.Message
1473714739
if errorNode != nil && resolvedModule.IsResolved() {

internal/compiler/fileloader.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -544,11 +544,15 @@ func (p *fileLoader) resolveImportsAndModuleAugmentations(t *parseTask) {
544544

545545
var kind *string = nil
546546
if ast.IsStringLiteralLike(entry) {
547-
kind = getModuleLiteralImportKind(entry)
547+
kind = getModuleLiteralImportAttributeType(entry)
548+
}
549+
importAttributeType := ""
550+
if kind != nil {
551+
importAttributeType = *kind
548552
}
549553
mode := getModeForUsageLocation(file.FileName(), meta, entry, optionsForFile)
550554
resolvedModule, trace := p.resolver.ResolveModuleName(moduleName, fileName, kind, mode, redirect)
551-
resolutionsInFile[module.ModeAwareCacheKey{Name: moduleName, Mode: mode}] = resolvedModule
555+
resolutionsInFile[module.ModeAwareCacheKey{Name: moduleName, Mode: mode, ImportAttributeType: importAttributeType}] = resolvedModule
552556
resolutionsTrace = append(resolutionsTrace, trace...)
553557

554558
if !resolvedModule.IsResolved() {
@@ -783,7 +787,7 @@ func getRawTypeValue(node *ast.Node) *string {
783787
return nil
784788
}
785789

786-
func getModuleLiteralImportKind(node *ast.StringLiteralLike) *string {
790+
func getModuleLiteralImportAttributeType(node *ast.StringLiteralLike) *string {
787791
parent := node.Parent
788792
if parent == nil {
789793
return nil

internal/compiler/program.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,14 @@ func (p *Program) GetDenoForkContextInfo() ast.DenoForkContextInfo {
167167
return p.Host().GetDenoForkContextInfo()
168168
}
169169

170+
func (p *Program) GetModuleLiteralImportAttributeType(node *ast.StringLiteralLike) string {
171+
t := getModuleLiteralImportAttributeType(node)
172+
if t != nil {
173+
return *t
174+
}
175+
return ""
176+
}
177+
170178
var _ checker.Program = (*Program)(nil)
171179

172180
/** This should have similar behavior to 'processSourceFile' without diagnostics or mutation. */
@@ -385,9 +393,9 @@ func (p *Program) GetTypeCheckerForFile(ctx context.Context, file *ast.SourceFil
385393
return p.checkerPool.GetCheckerForFile(ctx, file)
386394
}
387395

388-
func (p *Program) GetResolvedModule(file ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule {
396+
func (p *Program) GetResolvedModule(file ast.HasFileName, moduleReference string, mode core.ResolutionMode, importAttributeType string) *module.ResolvedModule {
389397
if resolutions, ok := p.resolvedModules[file.Path()]; ok {
390-
if resolved, ok := resolutions[module.ModeAwareCacheKey{Name: moduleReference, Mode: mode}]; ok {
398+
if resolved, ok := resolutions[module.ModeAwareCacheKey{Name: moduleReference, Mode: mode, ImportAttributeType: importAttributeType}]; ok {
391399
return resolved
392400
}
393401
}
@@ -399,7 +407,7 @@ func (p *Program) GetResolvedModuleFromModuleSpecifier(file ast.HasFileName, mod
399407
panic("moduleSpecifier must be a StringLiteralLike")
400408
}
401409
mode := p.GetModeForUsageLocation(file, moduleSpecifier)
402-
return p.GetResolvedModule(file, moduleSpecifier.Text(), mode)
410+
return p.GetResolvedModule(file, moduleSpecifier.Text(), mode, p.GetModuleLiteralImportAttributeType(moduleSpecifier))
403411
}
404412

405413
func (p *Program) GetResolvedModules() map[tspath.Path]module.ModeAwareCache[*module.ResolvedModule] {

internal/module/resolver_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ func doCall(t *testing.T, resolver *module.Resolver, call functionCall, skipLoca
265265

266266
errorMessageArgs := []any{call.args.Name, call.args.ContainingFile}
267267
if call.call == "resolveModuleName" {
268-
resolved, _ := resolver.ResolveModuleName(call.args.Name, call.args.ContainingFile, core.ModuleKind(call.args.ResolutionMode), redirectedReference)
268+
resolved, _ := resolver.ResolveModuleName(call.args.Name, call.args.ContainingFile, nil, core.ModuleKind(call.args.ResolutionMode), redirectedReference)
269269
assert.Check(t, resolved != nil, "ResolveModuleName should not return nil", errorMessageArgs)
270270
if expectedResolvedModule, ok := call.returnValue["resolvedModule"].(map[string]any); ok {
271271
assert.Check(t, resolved.IsResolved(), errorMessageArgs)

internal/module/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type ResolutionHost interface {
1919
type ModeAwareCacheKey struct {
2020
Name string
2121
Mode core.ResolutionMode
22+
ImportAttributeType string
2223
}
2324

2425
type ResolvedProjectReference interface {

internal/transformers/tstransforms/importelision_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type fakeProgram struct {
2424
files []*ast.SourceFile
2525
getEmitModuleFormatOfFile func(sourceFile ast.HasFileName) core.ModuleKind
2626
getImpliedNodeFormatForEmit func(sourceFile ast.HasFileName) core.ModuleKind
27-
getResolvedModule func(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule
27+
getResolvedModule func(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode, importAttributeType string) *module.ResolvedModule
2828
getSourceFile func(FileName string) *ast.SourceFile
2929
getSourceFileForResolvedModule func(FileName string) *ast.SourceFile
3030
}
@@ -133,8 +133,8 @@ func (p *fakeProgram) GetModeForUsageLocation(sourceFile ast.HasFileName, locati
133133
return p.getEmitModuleFormatOfFile(sourceFile)
134134
}
135135

136-
func (p *fakeProgram) GetResolvedModule(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule {
137-
return p.getResolvedModule(currentSourceFile, moduleReference, mode)
136+
func (p *fakeProgram) GetResolvedModule(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode, importAttributeType string) *module.ResolvedModule {
137+
return p.getResolvedModule(currentSourceFile, moduleReference, mode, importAttributeType)
138138
}
139139

140140
func (p *fakeProgram) GetSourceFile(FileName string) *ast.SourceFile {
@@ -173,6 +173,10 @@ func (p *fakeProgram) GetDenoForkContextInfo() ast.DenoForkContextInfo {
173173
return ast.DenoForkContextInfo{}
174174
}
175175

176+
func (p *fakeProgram) GetModuleLiteralImportAttributeType(node *ast.StringLiteralLike) string {
177+
return ""
178+
}
179+
176180
func TestImportElision(t *testing.T) {
177181
t.Parallel()
178182
data := []struct {
@@ -243,7 +247,7 @@ func TestImportElision(t *testing.T) {
243247
}
244248
return nil
245249
},
246-
getResolvedModule: func(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode) *module.ResolvedModule {
250+
getResolvedModule: func(currentSourceFile ast.HasFileName, moduleReference string, mode core.ResolutionMode, importAttributeType string) *module.ResolvedModule {
247251
if currentSourceFile == file && moduleReference == "other" {
248252
return &module.ResolvedModule{
249253
ResolvedFileName: "other.ts",

0 commit comments

Comments
 (0)