Skip to content

Commit 36d9e06

Browse files
authored
Avoid holding on to NodeBuilder in checker (#1289)
1 parent 7c32d84 commit 36d9e06

File tree

3 files changed

+17
-18
lines changed

3 files changed

+17
-18
lines changed

internal/checker/checker.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"github.com/microsoft/typescript-go/internal/jsnum"
2323
"github.com/microsoft/typescript-go/internal/module"
2424
"github.com/microsoft/typescript-go/internal/modulespecifiers"
25-
"github.com/microsoft/typescript-go/internal/printer"
2625
"github.com/microsoft/typescript-go/internal/scanner"
2726
"github.com/microsoft/typescript-go/internal/stringutil"
2827
"github.com/microsoft/typescript-go/internal/tsoptions"
@@ -849,8 +848,6 @@ type Checker struct {
849848
markNodeAssignments func(*ast.Node) bool
850849
emitResolver *emitResolver
851850
emitResolverOnce sync.Once
852-
diagnosticConstructionContext *printer.EmitContext
853-
nodeBuilder *NodeBuilder
854851
_jsxNamespace string
855852
_jsxFactoryEntity *ast.Node
856853
skipDirectInferenceNodes collections.Set[*ast.Node]
@@ -1070,8 +1067,6 @@ func NewChecker(program Program) *Checker {
10701067
c.getGlobalClassAccessorDecoratorTargetType = c.getGlobalTypeResolver("ClassAccessorDecoratorTarget", 2 /*arity*/, true /*reportErrors*/)
10711068
c.getGlobalClassAccessorDecoratorResultType = c.getGlobalTypeResolver("ClassAccessorDecoratorResult", 2 /*arity*/, true /*reportErrors*/)
10721069
c.getGlobalClassFieldDecoratorContextType = c.getGlobalTypeResolver("ClassFieldDecoratorContext", 2 /*arity*/, true /*reportErrors*/)
1073-
c.diagnosticConstructionContext = printer.NewEmitContext()
1074-
c.nodeBuilder = NewNodeBuilder(c, c.diagnosticConstructionContext)
10751070
c.initializeClosures()
10761071
c.initializeIterationResolvers()
10771072
c.initializeChecker()

internal/checker/nodebuilder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,6 @@ func NewNodeBuilder(ch *Checker, e *printer.EmitContext) *NodeBuilder {
170170
return &NodeBuilder{impl: impl, ctxStack: make([]*NodeBuilderContext, 0, 1), host: ch.program}
171171
}
172172

173-
func (c *Checker) GetDiagnosticNodeBuilder() *NodeBuilder {
174-
return c.nodeBuilder
173+
func (c *Checker) getNodeBuilder() *NodeBuilder {
174+
return NewNodeBuilder(c, printer.NewEmitContext())
175175
}

internal/checker/printer.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -182,17 +182,18 @@ func (c *Checker) typeToStringEx(t *Type, enclosingDeclaration *ast.Node, flags
182182
if noTruncation {
183183
combinedFlags = combinedFlags | nodebuilder.FlagsNoTruncation
184184
}
185-
typeNode := c.nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil)
185+
nodeBuilder := c.getNodeBuilder()
186+
typeNode := nodeBuilder.TypeToTypeNode(t, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil)
186187
if typeNode == nil {
187188
panic("should always get typenode")
188189
}
189190
// The unresolved type gets a synthesized comment on `any` to hint to users that it's not a plain `any`.
190191
// Otherwise, we always strip comments out.
191192
var printer *printer.Printer
192193
if t == c.unresolvedType {
193-
printer = createPrinterWithDefaults(c.diagnosticConstructionContext)
194+
printer = createPrinterWithDefaults(nodeBuilder.EmitContext())
194195
} else {
195-
printer = createPrinterWithRemoveComments(c.diagnosticConstructionContext)
196+
printer = createPrinterWithRemoveComments(nodeBuilder.EmitContext())
196197
}
197198
var sourceFile *ast.SourceFile
198199
if enclosingDeclaration != nil {
@@ -245,22 +246,23 @@ func (c *Checker) symbolToStringEx(symbol *ast.Symbol, enclosingDeclaration *ast
245246
internalNodeFlags |= nodebuilder.InternalFlagsWriteComputedProps
246247
}
247248

249+
nodeBuilder := c.getNodeBuilder()
248250
var sourceFile *ast.SourceFile
249251
if enclosingDeclaration != nil {
250252
sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration)
251253
}
252254
var printer_ *printer.Printer
253255
if enclosingDeclaration != nil && enclosingDeclaration.Kind == ast.KindSourceFile {
254-
printer_ = createPrinterWithRemoveCommentsNeverAsciiEscape(c.diagnosticConstructionContext)
256+
printer_ = createPrinterWithRemoveCommentsNeverAsciiEscape(nodeBuilder.EmitContext())
255257
} else {
256-
printer_ = createPrinterWithRemoveComments(c.diagnosticConstructionContext)
258+
printer_ = createPrinterWithRemoveComments(nodeBuilder.EmitContext())
257259
}
258260

259261
var builder func(symbol *ast.Symbol, meaning ast.SymbolFlags, enclosingDeclaration *ast.Node, flags nodebuilder.Flags, internalFlags nodebuilder.InternalFlags, tracker nodebuilder.SymbolTracker) *ast.Node
260262
if flags&SymbolFormatFlagsAllowAnyNodeKind != 0 {
261-
builder = c.nodeBuilder.SymbolToNode
263+
builder = nodeBuilder.SymbolToNode
262264
} else {
263-
builder = c.nodeBuilder.SymbolToEntityName
265+
builder = nodeBuilder.SymbolToEntityName
264266
}
265267
entity := builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags, nil) // TODO: GH#18217
266268
printer_.Write(entity /*sourceFile*/, sourceFile, getTrailingSemicolonDeferringWriter(writer), nil) // TODO: GH#18217
@@ -294,9 +296,10 @@ func (c *Checker) signatureToStringEx(signature *Signature, enclosingDeclaration
294296
writer, putWriter := printer.GetSingleLineStringWriter()
295297
defer putWriter()
296298

299+
nodeBuilder := c.getNodeBuilder()
297300
combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName
298-
sig := c.nodeBuilder.SignatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil)
299-
printer_ := createPrinterWithRemoveCommentsOmitTrailingSemicolon(c.diagnosticConstructionContext)
301+
sig := nodeBuilder.SignatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil)
302+
printer_ := createPrinterWithRemoveCommentsOmitTrailingSemicolon(nodeBuilder.EmitContext())
300303
var sourceFile *ast.SourceFile
301304
if enclosingDeclaration != nil {
302305
sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration)
@@ -312,9 +315,10 @@ func (c *Checker) typePredicateToString(typePredicate *TypePredicate) string {
312315
func (c *Checker) typePredicateToStringEx(typePredicate *TypePredicate, enclosingDeclaration *ast.Node, flags TypeFormatFlags) string {
313316
writer, putWriter := printer.GetSingleLineStringWriter()
314317
defer putWriter()
318+
nodeBuilder := c.getNodeBuilder()
315319
combinedFlags := toNodeBuilderFlags(flags) | nodebuilder.FlagsIgnoreErrors | nodebuilder.FlagsWriteTypeParametersInQualifiedName
316-
predicate := c.nodeBuilder.TypePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) // TODO: GH#18217
317-
printer_ := createPrinterWithRemoveComments(c.diagnosticConstructionContext)
320+
predicate := nodeBuilder.TypePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, combinedFlags, nodebuilder.InternalFlagsNone, nil) // TODO: GH#18217
321+
printer_ := createPrinterWithRemoveComments(nodeBuilder.EmitContext())
318322
var sourceFile *ast.SourceFile
319323
if enclosingDeclaration != nil {
320324
sourceFile = ast.GetSourceFileOfNode(enclosingDeclaration)

0 commit comments

Comments
 (0)