go/{ast,doc}: update BasicLit.ValueEnd as well as ValuePos

For #76395

Change-Id: Ie2ad715a05cb298b08667cfe8a8394f1dfa3936c
Reviewed-on: https://go-review.googlesource.com/c/go/+/722880
Reviewed-by: Robert Findley <rfindley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Alan Donovan 2025-11-21 11:05:05 -05:00
parent 32a9804c7b
commit fa30b68767
2 changed files with 24 additions and 2 deletions

View file

@ -222,7 +222,7 @@ func sortSpecs(fset *token.FileSet, f *File, d *GenDecl, specs []Spec) []Spec {
if s.Name != nil {
s.Name.NamePos = pos[i].Start
}
s.Path.ValuePos = pos[i].Start
updateBasicLitPos(s.Path, pos[i].Start)
s.EndPos = pos[i].End
for _, g := range importComments[s] {
for _, c := range g.cg.List {
@ -245,3 +245,14 @@ func sortSpecs(fset *token.FileSet, f *File, d *GenDecl, specs []Spec) []Spec {
return specs
}
// updateBasicLitPos updates lit.Pos,
// ensuring that lit.End is displaced by the same amount.
// (See https://go.dev/issue/76395.)
func updateBasicLitPos(lit *BasicLit, pos token.Pos) {
len := lit.End() - lit.Pos()
lit.ValuePos = pos
if lit.ValueEnd.IsValid() {
lit.ValueEnd = pos + len
}
}

View file

@ -238,7 +238,7 @@ func playExample(file *ast.File, f *ast.FuncDecl) *ast.File {
spec := *s
path := *s.Path
spec.Path = &path
spec.Path.ValuePos = groupStart(&spec)
updateBasicLitPos(spec.Path, groupStart(&spec))
namedImports = append(namedImports, &spec)
delete(unresolved, n)
}
@ -720,3 +720,14 @@ func isExampleSuffix(s string) bool {
r, size := utf8.DecodeRuneInString(s)
return size > 0 && unicode.IsLower(r)
}
// updateBasicLitPos updates lit.Pos,
// ensuring that lit.End is displaced by the same amount.
// (See https://go.dev/issue/76395.)
func updateBasicLitPos(lit *ast.BasicLit, pos token.Pos) {
len := lit.End() - lit.Pos()
lit.ValuePos = pos
if lit.ValueEnd.IsValid() {
lit.ValueEnd = pos + len
}
}