diff options
| author | Alan Donovan <adonovan@google.com> | 2025-11-21 11:05:05 -0500 |
|---|---|---|
| committer | Alan Donovan <adonovan@google.com> | 2025-12-03 06:50:50 -0800 |
| commit | fa30b68767fd3ad67517bc6601ae79f9d89e1b51 (patch) | |
| tree | f05df377ce42a93939ac7fc4443e2b7c1a393842 /src | |
| parent | 32a9804c7ba3f4a0e0bd26cc24b9204860a49ec8 (diff) | |
| download | go-fa30b68767fd3ad67517bc6601ae79f9d89e1b51.tar.xz | |
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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/go/ast/import.go | 13 | ||||
| -rw-r--r-- | src/go/doc/example.go | 13 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/go/ast/import.go b/src/go/ast/import.go index 3e53f10677..84d00fef99 100644 --- a/src/go/ast/import.go +++ b/src/go/ast/import.go @@ -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 + } +} diff --git a/src/go/doc/example.go b/src/go/doc/example.go index 5c03c6612f..228bdf58f8 100644 --- a/src/go/doc/example.go +++ b/src/go/doc/example.go @@ -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 + } +} |
