Skip to content

Commit 37177c8

Browse files
committed
Add code to detect incorrect position information
1 parent 12a5751 commit 37177c8

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

internal/printer/printer.go

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,7 +2328,15 @@ func (p *Printer) emitBindingElement(node *ast.BindingElement) {
23282328
// Old parser used `OmittedExpression` as a substitute for `Elision`. New parser uses a `BindingElement` with nil members
23292329
if name := node.Name(); name != nil {
23302330
p.emitBindingName(name)
2331-
p.emitInitializer(node.Initializer, node.Name().End(), node.AsNode())
2331+
// Check if name is from the current source file to avoid cross-file position issues
2332+
var equalTokenPos int
2333+
if p.currentSourceFile != nil && ast.GetSourceFileOfNode(name) == p.currentSourceFile {
2334+
equalTokenPos = name.End()
2335+
} else {
2336+
// Use contextNode's end position as fallback when name is from a different source file
2337+
equalTokenPos = node.AsNode().End()
2338+
}
2339+
p.emitInitializer(node.Initializer, equalTokenPos, node.AsNode())
23322340
}
23332341
p.exitNode(node.AsNode(), state)
23342342
}
@@ -3757,7 +3765,15 @@ func (p *Printer) emitCommonJSExport(node *ast.CommonJSExport) {
37573765
} else {
37583766
p.emitBindingName(node.Name())
37593767
}
3760-
p.emitInitializer(node.Initializer, node.Name().End(), node.AsNode())
3768+
// Check if name is from the current source file to avoid cross-file position issues
3769+
var equalTokenPos int
3770+
if p.currentSourceFile != nil && ast.GetSourceFileOfNode(node.Name()) == p.currentSourceFile {
3771+
equalTokenPos = node.Name().End()
3772+
} else {
3773+
// Use contextNode's end position as fallback when name is from a different source file
3774+
equalTokenPos = node.AsNode().End()
3775+
}
3776+
p.emitInitializer(node.Initializer, equalTokenPos, node.AsNode())
37613777
p.writeTrailingSemicolon()
37623778
p.exitNode(node.AsNode(), state)
37633779
}
@@ -4308,7 +4324,15 @@ func (p *Printer) emitSpreadAssignment(node *ast.SpreadAssignment) {
43084324
func (p *Printer) emitEnumMember(node *ast.EnumMember) {
43094325
state := p.enterNode(node.AsNode())
43104326
p.emitPropertyName(node.Name())
4311-
p.emitInitializer(node.Initializer, node.Name().End(), node.AsNode())
4327+
// Check if name is from the current source file to avoid cross-file position issues
4328+
var equalTokenPos int
4329+
if p.currentSourceFile != nil && ast.GetSourceFileOfNode(node.Name()) == p.currentSourceFile {
4330+
equalTokenPos = node.Name().End()
4331+
} else {
4332+
// Use contextNode's end position as fallback when name is from a different source file
4333+
equalTokenPos = node.AsNode().End()
4334+
}
4335+
p.emitInitializer(node.Initializer, equalTokenPos, node.AsNode())
43124336
p.exitNode(node.AsNode(), state)
43134337
}
43144338

0 commit comments

Comments
 (0)