Show correct line numbers for errors in an $(eval)

Bug: 264488559
Test: go test
Change-Id: I95ce0345912a2af351be0ecc4595bdc4a2047c0c
This commit is contained in:
Cole Faust
2023-01-05 11:07:47 -08:00
parent 49dd3d583e
commit 7366042870
2 changed files with 17 additions and 0 deletions

View File

@@ -1872,6 +1872,18 @@ func (p *evalNodeParser) parse(ctx *parseContext, node mkparser.Node, args *mkpa
if len(nodes) == 0 {
return []starlarkNode{}
} else if len(nodes) == 1 {
// Replace the nodeLocator with one that just returns the location of
// the $(eval) node. Otherwise, statements inside an $(eval) will show as
// being on line 1 of the file, because they're on line 1 of
// strings.NewReader(args.Dump())
oldNodeLocator := ctx.script.nodeLocator
ctx.script.nodeLocator = func(pos mkparser.Pos) int {
return oldNodeLocator(node.Pos())
}
defer func() {
ctx.script.nodeLocator = oldNodeLocator
}()
switch n := nodes[0].(type) {
case *mkparser.Assignment:
if n.Name.Const() {