From 424e7673b56c9aa0f86a6020daa18e817d837f39 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 12:27:45 -0700 Subject: [PATCH 1/9] Clear node builder links when done --- internal/checker/nodebuilder.go | 6 ++---- internal/core/linkstore.go | 7 +++++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 0a8570ea8f..74a835ee73 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -43,6 +43,8 @@ func (b *NodeBuilder) popContext() { stackSize := len(b.ctxStack) if stackSize == 0 { b.impl.ctx = nil + b.impl.links.Clear() + b.impl.symbolLinks.Clear() } else { b.impl.ctx = b.ctxStack[stackSize-1] b.ctxStack = b.ctxStack[:stackSize-1] @@ -169,7 +171,3 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { impl := newNodeBuilderImpl(ch, e) return &NodeBuilder{impl: impl, ctxStack: make([]*NodeBuilderContext, 0, 1), host: ch.program} } - -func (c *Checker) GetDiagnosticNodeBuilder() *NodeBuilder { - return c.nodeBuilder -} diff --git a/internal/core/linkstore.go b/internal/core/linkstore.go index c1b05ee7e8..25cd3d4553 100644 --- a/internal/core/linkstore.go +++ b/internal/core/linkstore.go @@ -28,3 +28,10 @@ func (s *LinkStore[K, V]) Has(key K) bool { func (s *LinkStore[K, V]) TryGet(key K) *V { return s.entries[key] } + +func (s *LinkStore[K, V]) Clear() { + clear(s.entries) + *s = LinkStore[K, V]{ + entries: s.entries, + } +} From e1397f514604275cd713563ebfc3e4be79bc6c80 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 12:58:45 -0700 Subject: [PATCH 2/9] what if fresh builder each time --- internal/checker/checker.go | 5 ----- internal/checker/nodebuilder.go | 4 ++++ internal/checker/printer.go | 26 +++++++++++++++----------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 75b2f72d53..244a106eed 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -22,7 +22,6 @@ import ( "github.com/microsoft/typescript-go/internal/jsnum" "github.com/microsoft/typescript-go/internal/module" "github.com/microsoft/typescript-go/internal/modulespecifiers" - "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/scanner" "github.com/microsoft/typescript-go/internal/stringutil" "github.com/microsoft/typescript-go/internal/tsoptions" @@ -847,8 +846,6 @@ type Checker struct { markNodeAssignments func(*ast.Node) bool emitResolver *emitResolver emitResolverOnce sync.Once - diagnosticConstructionContext *printer.EmitContext - nodeBuilder *NodeBuilder _jsxNamespace string _jsxFactoryEntity *ast.Node skipDirectInferenceNodes collections.Set[*ast.Node] @@ -1065,8 +1062,6 @@ func NewChecker(program Program) *Checker { c.getGlobalClassAccessorDecoratorTargetType = c.getGlobalTypeResolver("ClassAccessorDecoratorTarget", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassAccessorDecoratorResultType = c.getGlobalTypeResolver("ClassAccessorDecoratorResult", 2 /*arity*/, true /*reportErrors*/) c.getGlobalClassFieldDecoratorContextType = c.getGlobalTypeResolver("ClassFieldDecoratorContext", 2 /*arity*/, true /*reportErrors*/) - c.diagnosticConstructionContext = printer.NewEmitContext() - c.nodeBuilder = NewNodeBuilder(c, c.diagnosticConstructionContext) c.initializeClosures() c.initializeIterationResolvers() c.initializeChecker() diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 74a835ee73..ef316698f9 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -171,3 +171,7 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { impl := newNodeBuilderImpl(ch, e) return &NodeBuilder{impl: impl, ctxStack: make([]*NodeBuilderContext, 0, 1), host: ch.program} } + +func (c *Checker) NewNodeBuilder() *NodeBuilder { + return NewNodeBuilder(c, printer.NewEmitContext()) +} diff --git a/internal/checker/printer.go b/internal/checker/printer.go index 4b668e2c16..58b5c86d72 100644 --- a/internal/checker/printer.go +++ b/internal/checker/printer.go @@ -182,7 +182,8 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags if noTruncation { combinedFlags = combinedFlags | nodebuilder.FlagsNoTruncation } - typeNode := c.nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) + nodeBuilder := c.NewNodeBuilder() + typeNode := nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) if typeNode == nil { panic("should always get typenode") } @@ -190,9 +191,9 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags // Otherwise, we always strip comments out. var printer *printer.Printer if t == c.unresolvedType { - printer = createPrinterWithDefaults(c.diagnosticConstructionContext) + printer = createPrinterWithDefaults(nodeBuilder.EmitContext()) } else { - printer = createPrinterWithRemoveComments(c.diagnosticConstructionContext) + printer = createPrinterWithRemoveComments(nodeBuilder.EmitContext()) } var sourceFile *ast.SourceFile if enclosingDeclaration != nil { @@ -245,22 +246,23 @@ func (c *Checker) symbolToStringEx(symbol *ast.Symbol, enclosingDeclaration *ast internalNodeFlags |= nodebuilder.InternalFlagsWriteComputedProps } + nodeBuilder := c.NewNodeBuilder() var sourceFile *ast.SourceFile if enclosingDeclaration != nil { sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration) } var printer_ *printer.Printer if enclosingDeclaration != nil && enclosingDeclaration.Kind == ast.KindSourceFile { - printer_ = createPrinterWithRemoveCommentsNeverAsciiEscape(c.diagnosticConstructionContext) + printer_ = createPrinterWithRemoveCommentsNeverAsciiEscape(nodeBuilder.EmitContext()) } else { - printer_ = createPrinterWithRemoveComments(c.diagnosticConstructionContext) + printer_ = createPrinterWithRemoveComments(nodeBuilder.EmitContext()) } var builder func(symbol *ast.Symbol, meaning ast.SymbolFlags, enclosingDeclaration *ast.Node, flags nodebuilder.Flags, internalFlags nodebuilder.InternalFlags, tracker nodebuilder.SymbolTracker) *ast.Node if flags&SymbolFormatFlagsAllowAnyNodeKind != 0 { - builder = c.nodeBuilder.SymbolToNode + builder = nodeBuilder.SymbolToNode } else { - builder = c.nodeBuilder.SymbolToEntityName + builder = nodeBuilder.SymbolToEntityName } entity := builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags, nil) // TODO: GH#18217 printer_.Write(entity /*sourceFile*/, sourceFile, getTrailingSemicolonDeferringWriter(writer), nil) // TODO: GH#18217 @@ -294,9 +296,10 @@ func (c *Checker) signatureToStringEx(signature *Signature, enclosingDeclaration writer, putWriter := printer.GetSingleLineStringWriter() defer putWriter() + nodeBuilder := c.NewNodeBuilder() combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName - sig := c.nodeBuilder.SignatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) - printer_ := createPrinterWithRemoveCommentsOmitTrailingSemicolon(c.diagnosticConstructionContext) + sig := nodeBuilder.SignatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) + printer_ := createPrinterWithRemoveCommentsOmitTrailingSemicolon(nodeBuilder.EmitContext()) var sourceFile *ast.SourceFile if enclosingDeclaration != nil { sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration) @@ -312,9 +315,10 @@ func (c *Checker) typePredicateToString(typePredicate *TypePredicate) string { func (c *Checker) typePredicateToStringEx(typePredicate *TypePredicate, enclosingDeclaration *ast.Node, flags TypeFormatFlags) string { writer, putWriter := printer.GetSingleLineStringWriter() defer putWriter() + nodeBuilder := c.NewNodeBuilder() combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName - predicate := c.nodeBuilder.TypePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) // TODO: GH#18217 - printer_ := createPrinterWithRemoveComments(c.diagnosticConstructionContext) + predicate := nodeBuilder.TypePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) // TODO: GH#18217 + printer_ := createPrinterWithRemoveComments(nodeBuilder.EmitContext()) var sourceFile *ast.SourceFile if enclosingDeclaration != nil { sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration) From 3b5d48f82713f822328f0e42bd1531da78667fe2 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 13:35:33 -0700 Subject: [PATCH 3/9] Revert "Clear node builder links when done" This reverts commit 424e7673b56c9aa0f86a6020daa18e817d837f39. --- internal/checker/nodebuilder.go | 6 ++++-- internal/core/linkstore.go | 7 ------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index ef316698f9..78a27bd6f5 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -43,8 +43,6 @@ func (b *NodeBuilder) popContext() { stackSize := len(b.ctxStack) if stackSize == 0 { b.impl.ctx = nil - b.impl.links.Clear() - b.impl.symbolLinks.Clear() } else { b.impl.ctx = b.ctxStack[stackSize-1] b.ctxStack = b.ctxStack[:stackSize-1] @@ -175,3 +173,7 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { func (c *Checker) NewNodeBuilder() *NodeBuilder { return NewNodeBuilder(c, printer.NewEmitContext()) } + +func (c *Checker) GetDiagnosticNodeBuilder() *NodeBuilder { + return c.nodeBuilder +} diff --git a/internal/core/linkstore.go b/internal/core/linkstore.go index 25cd3d4553..c1b05ee7e8 100644 --- a/internal/core/linkstore.go +++ b/internal/core/linkstore.go @@ -28,10 +28,3 @@ func (s *LinkStore[K, V]) Has(key K) bool { func (s *LinkStore[K, V]) TryGet(key K) *V { return s.entries[key] } - -func (s *LinkStore[K, V]) Clear() { - clear(s.entries) - *s = LinkStore[K, V]{ - entries: s.entries, - } -} From a9be7e611148516116086562ad852a934cec925c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 13:38:26 -0700 Subject: [PATCH 4/9] oops --- internal/checker/nodebuilder.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 78a27bd6f5..13c8a5e497 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -173,7 +173,3 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { func (c *Checker) NewNodeBuilder() *NodeBuilder { return NewNodeBuilder(c, printer.NewEmitContext()) } - -func (c *Checker) GetDiagnosticNodeBuilder() *NodeBuilder { - return c.nodeBuilder -} From 254241cafc3f356ffa6ba538f7abfeeb646df5ea Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 13:55:47 -0700 Subject: [PATCH 5/9] Share a NodeBuilder during checkSourceFile --- internal/checker/checker.go | 4 ++++ internal/checker/nodebuilder.go | 3 +++ 2 files changed, 7 insertions(+) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 244a106eed..e617fda51c 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -22,6 +22,7 @@ import ( "github.com/microsoft/typescript-go/internal/jsnum" "github.com/microsoft/typescript-go/internal/module" "github.com/microsoft/typescript-go/internal/modulespecifiers" + "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/scanner" "github.com/microsoft/typescript-go/internal/stringutil" "github.com/microsoft/typescript-go/internal/tsoptions" @@ -846,6 +847,7 @@ type Checker struct { markNodeAssignments func(*ast.Node) bool emitResolver *emitResolver emitResolverOnce sync.Once + nodeBuilderDuringCheckSourceFile *NodeBuilder _jsxNamespace string _jsxFactoryEntity *ast.Node skipDirectInferenceNodes collections.Set[*ast.Node] @@ -2107,6 +2109,7 @@ func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFil links := c.sourceFileLinks.Get(sourceFile) if !links.typeChecked { c.ctx = ctx + c.nodeBuilderDuringCheckSourceFile = NewNodeBuilder(c, printer.NewEmitContext()) // Grammar checking c.checkGrammarSourceFile(sourceFile) c.renamedBindingElementsInTypes = nil @@ -2129,6 +2132,7 @@ func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFil c.wasCanceled = true } c.ctx = nil + c.nodeBuilderDuringCheckSourceFile = nil links.typeChecked = true } } diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 13c8a5e497..25d50d918f 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -171,5 +171,8 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { } func (c *Checker) NewNodeBuilder() *NodeBuilder { + if c.nodeBuilderDuringCheckSourceFile != nil { + return c.nodeBuilderDuringCheckSourceFile + } return NewNodeBuilder(c, printer.NewEmitContext()) } From 6c8bcf871056cd6b2ec6bc4ab34454268e4cee5c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:04:03 -0700 Subject: [PATCH 6/9] Avoid too much recreation --- internal/checker/checker.go | 5 +++-- internal/checker/nodebuilder.go | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index e617fda51c..55a260992a 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -22,7 +22,6 @@ import ( "github.com/microsoft/typescript-go/internal/jsnum" "github.com/microsoft/typescript-go/internal/module" "github.com/microsoft/typescript-go/internal/modulespecifiers" - "github.com/microsoft/typescript-go/internal/printer" "github.com/microsoft/typescript-go/internal/scanner" "github.com/microsoft/typescript-go/internal/stringutil" "github.com/microsoft/typescript-go/internal/tsoptions" @@ -847,6 +846,7 @@ type Checker struct { markNodeAssignments func(*ast.Node) bool emitResolver *emitResolver emitResolverOnce sync.Once + inCheckSourceFile bool nodeBuilderDuringCheckSourceFile *NodeBuilder _jsxNamespace string _jsxFactoryEntity *ast.Node @@ -2109,7 +2109,7 @@ func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFil links := c.sourceFileLinks.Get(sourceFile) if !links.typeChecked { c.ctx = ctx - c.nodeBuilderDuringCheckSourceFile = NewNodeBuilder(c, printer.NewEmitContext()) + c.inCheckSourceFile = true // Grammar checking c.checkGrammarSourceFile(sourceFile) c.renamedBindingElementsInTypes = nil @@ -2132,6 +2132,7 @@ func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFil c.wasCanceled = true } c.ctx = nil + c.inCheckSourceFile = false c.nodeBuilderDuringCheckSourceFile = nil links.typeChecked = true } diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 25d50d918f..87112c4db2 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -171,7 +171,10 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { } func (c *Checker) NewNodeBuilder() *NodeBuilder { - if c.nodeBuilderDuringCheckSourceFile != nil { + if c.inCheckSourceFile { + if c.nodeBuilderDuringCheckSourceFile == nil { + c.nodeBuilderDuringCheckSourceFile = NewNodeBuilder(c, printer.NewEmitContext()) + } return c.nodeBuilderDuringCheckSourceFile } return NewNodeBuilder(c, printer.NewEmitContext()) From 78c8a46db718ce3d832481a055e2e53ace6c2d2f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:04:39 -0700 Subject: [PATCH 7/9] rename --- internal/checker/nodebuilder.go | 2 +- internal/checker/printer.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 87112c4db2..8db58d4328 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -170,7 +170,7 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { return &NodeBuilder{impl: impl, ctxStack: make([]*NodeBuilderContext, 0, 1), host: ch.program} } -func (c *Checker) NewNodeBuilder() *NodeBuilder { +func (c *Checker) GetNodeBuilder() *NodeBuilder { if c.inCheckSourceFile { if c.nodeBuilderDuringCheckSourceFile == nil { c.nodeBuilderDuringCheckSourceFile = NewNodeBuilder(c, printer.NewEmitContext()) diff --git a/internal/checker/printer.go b/internal/checker/printer.go index 58b5c86d72..3fb4cead0b 100644 --- a/internal/checker/printer.go +++ b/internal/checker/printer.go @@ -182,7 +182,7 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags if noTruncation { combinedFlags = combinedFlags | nodebuilder.FlagsNoTruncation } - nodeBuilder := c.NewNodeBuilder() + nodeBuilder := c.GetNodeBuilder() typeNode := nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) if typeNode == nil { panic("should always get typenode") @@ -246,7 +246,7 @@ func (c *Checker) symbolToStringEx(symbol *ast.Symbol, enclosingDeclaration *ast internalNodeFlags |= nodebuilder.InternalFlagsWriteComputedProps } - nodeBuilder := c.NewNodeBuilder() + nodeBuilder := c.GetNodeBuilder() var sourceFile *ast.SourceFile if enclosingDeclaration != nil { sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration) @@ -296,7 +296,7 @@ func (c *Checker) signatureToStringEx(signature *Signature, enclosingDeclaration writer, putWriter := printer.GetSingleLineStringWriter() defer putWriter() - nodeBuilder := c.NewNodeBuilder() + nodeBuilder := c.GetNodeBuilder() combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName sig := nodeBuilder.SignatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) printer_ := createPrinterWithRemoveCommentsOmitTrailingSemicolon(nodeBuilder.EmitContext()) @@ -315,7 +315,7 @@ func (c *Checker) typePredicateToString(typePredicate *TypePredicate) string { func (c *Checker) typePredicateToStringEx(typePredicate *TypePredicate, enclosingDeclaration *ast.Node, flags TypeFormatFlags) string { writer, putWriter := printer.GetSingleLineStringWriter() defer putWriter() - nodeBuilder := c.NewNodeBuilder() + nodeBuilder := c.GetNodeBuilder() combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName predicate := nodeBuilder.TypePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) // TODO: GH#18217 printer_ := createPrinterWithRemoveComments(nodeBuilder.EmitContext()) From 04cec18dc79292e3970b189b8eb074892b530579 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:04:59 -0700 Subject: [PATCH 8/9] internal --- internal/checker/nodebuilder.go | 2 +- internal/checker/printer.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 8db58d4328..41c4b22235 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -170,7 +170,7 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { return &NodeBuilder{impl: impl, ctxStack: make([]*NodeBuilderContext, 0, 1), host: ch.program} } -func (c *Checker) GetNodeBuilder() *NodeBuilder { +func (c *Checker) getNodeBuilder() *NodeBuilder { if c.inCheckSourceFile { if c.nodeBuilderDuringCheckSourceFile == nil { c.nodeBuilderDuringCheckSourceFile = NewNodeBuilder(c, printer.NewEmitContext()) diff --git a/internal/checker/printer.go b/internal/checker/printer.go index 3fb4cead0b..fe0affceda 100644 --- a/internal/checker/printer.go +++ b/internal/checker/printer.go @@ -182,7 +182,7 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags if noTruncation { combinedFlags = combinedFlags | nodebuilder.FlagsNoTruncation } - nodeBuilder := c.GetNodeBuilder() + nodeBuilder := c.getNodeBuilder() typeNode := nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) if typeNode == nil { panic("should always get typenode") @@ -246,7 +246,7 @@ func (c *Checker) symbolToStringEx(symbol *ast.Symbol, enclosingDeclaration *ast internalNodeFlags |= nodebuilder.InternalFlagsWriteComputedProps } - nodeBuilder := c.GetNodeBuilder() + nodeBuilder := c.getNodeBuilder() var sourceFile *ast.SourceFile if enclosingDeclaration != nil { sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration) @@ -296,7 +296,7 @@ func (c *Checker) signatureToStringEx(signature *Signature, enclosingDeclaration writer, putWriter := printer.GetSingleLineStringWriter() defer putWriter() - nodeBuilder := c.GetNodeBuilder() + nodeBuilder := c.getNodeBuilder() combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName sig := nodeBuilder.SignatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) printer_ := createPrinterWithRemoveCommentsOmitTrailingSemicolon(nodeBuilder.EmitContext()) @@ -315,7 +315,7 @@ func (c *Checker) typePredicateToString(typePredicate *TypePredicate) string { func (c *Checker) typePredicateToStringEx(typePredicate *TypePredicate, enclosingDeclaration *ast.Node, flags TypeFormatFlags) string { writer, putWriter := printer.GetSingleLineStringWriter() defer putWriter() - nodeBuilder := c.GetNodeBuilder() + nodeBuilder := c.getNodeBuilder() combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName predicate := nodeBuilder.TypePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) // TODO: GH#18217 printer_ := createPrinterWithRemoveComments(nodeBuilder.EmitContext()) From bee631ed33b2b1370c9e079167675c7993f132fc Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:40:43 -0700 Subject: [PATCH 9/9] Undo reuse change, sad --- internal/checker/checker.go | 5 ----- internal/checker/nodebuilder.go | 6 ------ 2 files changed, 11 deletions(-) diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 3962b04717..6edc56adf4 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -848,8 +848,6 @@ type Checker struct { markNodeAssignments func(*ast.Node) bool emitResolver *emitResolver emitResolverOnce sync.Once - inCheckSourceFile bool - nodeBuilderDuringCheckSourceFile *NodeBuilder _jsxNamespace string _jsxFactoryEntity *ast.Node skipDirectInferenceNodes collections.Set[*ast.Node] @@ -2112,7 +2110,6 @@ func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFil links := c.sourceFileLinks.Get(sourceFile) if !links.typeChecked { c.ctx = ctx - c.inCheckSourceFile = true // Grammar checking c.checkGrammarSourceFile(sourceFile) c.renamedBindingElementsInTypes = nil @@ -2135,8 +2132,6 @@ func (c *Checker) checkSourceFile(ctx context.Context, sourceFile *ast.SourceFil c.wasCanceled = true } c.ctx = nil - c.inCheckSourceFile = false - c.nodeBuilderDuringCheckSourceFile = nil links.typeChecked = true } } diff --git a/internal/checker/nodebuilder.go b/internal/checker/nodebuilder.go index 41c4b22235..b6be4efda6 100644 --- a/internal/checker/nodebuilder.go +++ b/internal/checker/nodebuilder.go @@ -171,11 +171,5 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder { } func (c *Checker) getNodeBuilder() *NodeBuilder { - if c.inCheckSourceFile { - if c.nodeBuilderDuringCheckSourceFile == nil { - c.nodeBuilderDuringCheckSourceFile = NewNodeBuilder(c, printer.NewEmitContext()) - } - return c.nodeBuilderDuringCheckSourceFile - } return NewNodeBuilder(c, printer.NewEmitContext()) }