Files
kjol/tools/tsgo/internal/project/parsecache.go
2026-07-09 16:50:43 -04:00

40 lines
962 B
Go

package project
import (
"github.com/microsoft/typescript-go/internal/ast"
"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/parser"
"github.com/zeebo/xxh3"
)
type ParseCacheKey struct {
ast.SourceFileParseOptions
ScriptKind core.ScriptKind
Hash xxh3.Uint128
}
func NewParseCacheKey(
options ast.SourceFileParseOptions,
hash xxh3.Uint128,
scriptKind core.ScriptKind,
) ParseCacheKey {
return ParseCacheKey{
SourceFileParseOptions: options,
Hash: hash,
ScriptKind: scriptKind,
}
}
type ParseCache = RefCountCache[ParseCacheKey, *ast.SourceFile, FileHandle]
func NewParseCache(options RefCountCacheOptions) *ParseCache {
return NewRefCountCache(
options,
func(key ParseCacheKey, fh FileHandle) *ast.SourceFile {
file := parser.ParseSourceFile(key.SourceFileParseOptions, fh.Content(), key.ScriptKind)
file.Hash = fh.Hash()
return file
},
)
}