Skip to content

Commit 1bf7ca3

Browse files
Addressed feedback.
1 parent 2ca8dec commit 1bf7ca3

File tree

2 files changed

+15
-19
lines changed

2 files changed

+15
-19
lines changed

internal/compiler/module/cache.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"sync"
77

88
"github.com/microsoft/typescript-go/internal/ast"
9-
"github.com/microsoft/typescript-go/internal/collections"
109
"github.com/microsoft/typescript-go/internal/compiler/packagejson"
1110
"github.com/microsoft/typescript-go/internal/core"
1211
"github.com/microsoft/typescript-go/internal/tspath"
@@ -19,7 +18,11 @@ type caches struct {
1918
typeReferenceDirectiveCache *resolutionCache[*ResolvedTypeReferenceDirective]
2019
packageJsonInfoCache *packagejson.InfoCache
2120
resolvedTypeReferenceDirectiveLookupLocations map[*ResolvedTypeReferenceDirective]*LookupLocations
22-
parsedPatternsCache map[*collections.OrderedMap[string, []string]]parsedPatterns
21+
22+
// Cached representation for `core.CompilerOptions.paths`.
23+
// Doesn't handle other path patterns like in `typesVersions`.
24+
parsedPatternsForPathsOnce sync.Once
25+
parsedPatternsForPaths *parsedPatterns
2326
}
2427

2528
func newCaches(

internal/compiler/module/resolver.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ func (r *resolutionState) tryLoadModuleUsingPathsIfEligible() *resolved {
10301030
return continueSearching()
10311031
}
10321032
baseDirectory := getPathsBasePath(r.compilerOptions, r.resolver.host.GetCurrentDirectory())
1033-
pathPatterns := tryParsePatternsCached(r.resolver, r.compilerOptions.Paths)
1033+
pathPatterns := r.resolver.getParsedPatternsForPaths()
10341034
return r.tryLoadModuleUsingPaths(
10351035
r.extensions,
10361036
r.name,
@@ -1044,7 +1044,7 @@ func (r *resolutionState) tryLoadModuleUsingPathsIfEligible() *resolved {
10441044
)
10451045
}
10461046

1047-
func (r *resolutionState) tryLoadModuleUsingPaths(extensions extensions, moduleName string, containingDirectory string, paths *collections.OrderedMap[string, []string], pathPatterns parsedPatterns, loader resolutionKindSpecificLoader, onlyRecordFailures bool) *resolved {
1047+
func (r *resolutionState) tryLoadModuleUsingPaths(extensions extensions, moduleName string, containingDirectory string, paths *collections.OrderedMap[string, []string], pathPatterns *parsedPatterns, loader resolutionKindSpecificLoader, onlyRecordFailures bool) *resolved {
10481048
if matchedPattern := matchPatternOrExact(pathPatterns, moduleName); matchedPattern.IsValid() {
10491049
matchedStar := matchedPattern.MatchedText(moduleName)
10501050
if r.resolver.traceEnabled() {
@@ -1701,21 +1701,14 @@ type parsedPatterns struct {
17011701
patterns []core.Pattern
17021702
}
17031703

1704-
func tryParsePatternsCached(r *Resolver, paths *collections.OrderedMap[string, []string]) parsedPatterns {
1705-
var pathPatterns parsedPatterns
1706-
if cached, ok := r.parsedPatternsCache[paths]; ok {
1707-
pathPatterns = cached
1708-
} else {
1709-
pathPatterns = tryParsePatterns(paths)
1710-
if r.parsedPatternsCache == nil {
1711-
r.parsedPatternsCache = make(map[*collections.OrderedMap[string, []string]]parsedPatterns)
1712-
}
1713-
r.caches.parsedPatternsCache[paths] = pathPatterns
1714-
}
1715-
return pathPatterns
1704+
func (r *Resolver) getParsedPatternsForPaths() *parsedPatterns {
1705+
r.parsedPatternsForPathsOnce.Do(func() {
1706+
r.parsedPatternsForPaths = tryParsePatterns(r.compilerOptions.Paths)
1707+
})
1708+
return r.parsedPatternsForPaths
17161709
}
17171710

1718-
func tryParsePatterns(pathMappings *collections.OrderedMap[string, []string]) parsedPatterns {
1711+
func tryParsePatterns(pathMappings *collections.OrderedMap[string, []string]) *parsedPatterns {
17191712
paths := pathMappings.Keys()
17201713

17211714
numPatterns := 0
@@ -1744,13 +1737,13 @@ func tryParsePatterns(pathMappings *collections.OrderedMap[string, []string]) pa
17441737
}
17451738
}
17461739
}
1747-
return parsedPatterns{
1740+
return &parsedPatterns{
17481741
matchableStringSet: matchableStringSet,
17491742
patterns: patterns,
17501743
}
17511744
}
17521745

1753-
func matchPatternOrExact(patterns parsedPatterns, candidate string) core.Pattern {
1746+
func matchPatternOrExact(patterns *parsedPatterns, candidate string) core.Pattern {
17541747
if patterns.matchableStringSet.Has(candidate) {
17551748
return core.Pattern{
17561749
Text: candidate,

0 commit comments

Comments
 (0)