139 lines
3.6 KiB
Go
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()
|
|
}
|