]> Cypherpunks repositories - gostls13.git/commitdiff
go/{ast,doc}: update BasicLit.ValueEnd as well as ValuePos
authorAlan Donovan <adonovan@google.com>
Fri, 21 Nov 2025 16:05:05 +0000 (11:05 -0500)
committerAlan Donovan <adonovan@google.com>
Wed, 3 Dec 2025 14:50:50 +0000 (06:50 -0800)
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>

src/go/ast/import.go
src/go/doc/example.go

index 3e53f10677c9ab8efbaa86e822380be746bc333c..84d00fef995b6f8166ea7796cc44f8e8d69d3c6d 100644 (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
+       }
+}
index 5c03c6612f981a4e6270693f0efc3eef676370f2..228bdf58f81949ae9ae2f624690fa45047d42ea1 100644 (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
+       }
+}