kittenipc/kitcom/internal/tsgo/checker/symboltracker.go
2025-10-15 10:12:44 +03:00

139 lines
3.6 KiB
Go

package checker
import (
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ast"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/modulespecifiers"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/nodebuilder"
)
type SymbolTrackerImpl struct {
context *NodeBuilderContext
inner nodebuilder.SymbolTracker
DisableTrackSymbol bool
tchost Host
}
func NewSymbolTrackerImpl(context *NodeBuilderContext, tracker nodebuilder.SymbolTracker, tchost Host) *SymbolTrackerImpl {
if tracker != nil {
for {
t, ok := tracker.(*SymbolTrackerImpl)
if !ok {
break
}
tracker = t.inner
}
}
return &SymbolTrackerImpl{context, tracker, false, tchost}
}
func (this *SymbolTrackerImpl) GetModuleSpecifierGenerationHost() modulespecifiers.ModuleSpecifierGenerationHost {
if this.inner == nil {
return this.tchost
}
return this.inner.GetModuleSpecifierGenerationHost()
}
func (this *SymbolTrackerImpl) TrackSymbol(symbol *ast.Symbol, enclosingDeclaration *ast.Node, meaning ast.SymbolFlags) bool {
if !this.DisableTrackSymbol {
if this.inner != nil && this.inner.TrackSymbol(symbol, enclosingDeclaration, meaning) {
this.onDiagnosticReported()
return true
}
// Skip recording type parameters as they dont contribute to late painted statements
if symbol.Flags&ast.SymbolFlagsTypeParameter == 0 {
this.context.trackedSymbols = append(this.context.trackedSymbols, &TrackedSymbolArgs{symbol, enclosingDeclaration, meaning})
}
}
return false
}
func (this *SymbolTrackerImpl) ReportInaccessibleThisError() {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportInaccessibleThisError()
}
func (this *SymbolTrackerImpl) ReportPrivateInBaseOfClassExpression(propertyName string) {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportPrivateInBaseOfClassExpression(propertyName)
}
func (this *SymbolTrackerImpl) ReportInaccessibleUniqueSymbolError() {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportInaccessibleUniqueSymbolError()
}
func (this *SymbolTrackerImpl) ReportCyclicStructureError() {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportCyclicStructureError()
}
func (this *SymbolTrackerImpl) ReportLikelyUnsafeImportRequiredError(specifier string) {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportLikelyUnsafeImportRequiredError(specifier)
}
func (this *SymbolTrackerImpl) ReportTruncationError() {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportTruncationError()
}
func (this *SymbolTrackerImpl) ReportNonlocalAugmentation(containingFile *ast.SourceFile, parentSymbol *ast.Symbol, augmentingSymbol *ast.Symbol) {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportNonlocalAugmentation(containingFile, parentSymbol, augmentingSymbol)
}
func (this *SymbolTrackerImpl) ReportNonSerializableProperty(propertyName string) {
this.onDiagnosticReported()
if this.inner == nil {
return
}
this.inner.ReportNonSerializableProperty(propertyName)
}
func (this *SymbolTrackerImpl) onDiagnosticReported() {
this.context.reportedDiagnostic = true
}
func (this *SymbolTrackerImpl) ReportInferenceFallback(node *ast.Node) {
if this.inner == nil {
return
}
this.inner.ReportInferenceFallback(node)
}
func (this *SymbolTrackerImpl) PushErrorFallbackNode(node *ast.Node) {
if this.inner == nil {
return
}
this.inner.PushErrorFallbackNode(node)
}
func (this *SymbolTrackerImpl) PopErrorFallbackNode() {
if this.inner == nil {
return
}
this.inner.PopErrorFallbackNode()
}