[tools] WIP: migrate all pos uage to range

3 views
Skip to first unread message

Hongxiang Jiang (Gerrit)

unread,
Dec 10, 2025, 12:52:57 AM (7 days ago) Dec 10
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Hongxiang Jiang has uploaded the change for review

Commit message

WIP: migrate all pos uage to range
Change-Id: If8f4b2bf64b000aff73174bbf0e83c72ec80fdf7

Change diff

diff --git a/gopls/internal/cmd/capabilities_test.go b/gopls/internal/cmd/capabilities_test.go
index 9809b72..a3a438f 100644
--- a/gopls/internal/cmd/capabilities_test.go
+++ b/gopls/internal/cmd/capabilities_test.go
@@ -124,9 +124,15 @@
TextDocument: protocol.TextDocumentIdentifier{
URI: uri,
},
- Position: protocol.Position{
- Line: 0,
- Character: 28,
+ Range: protocol.Range{
+ Start: protocol.Position{
+ Line: 0,
+ Character: 28,
+ },
+ End: protocol.Position{
+ Line: 0,
+ Character: 28,
+ },
},
},
})
diff --git a/gopls/internal/golang/call_hierarchy.go b/gopls/internal/golang/call_hierarchy.go
index 194935a..3ce05c2 100644
--- a/gopls/internal/golang/call_hierarchy.go
+++ b/gopls/internal/golang/call_hierarchy.go
@@ -26,7 +26,7 @@
)

// PrepareCallHierarchy returns an array of CallHierarchyItem for a file and the position within the file.
-func PrepareCallHierarchy(ctx context.Context, snapshot *cache.Snapshot, fh file.Handle, pp protocol.Position) ([]protocol.CallHierarchyItem, error) {
+func PrepareCallHierarchy(ctx context.Context, snapshot *cache.Snapshot, fh file.Handle, rng protocol.Range) ([]protocol.CallHierarchyItem, error) {
ctx, done := event.Start(ctx, "golang.PrepareCallHierarchy")
defer done()

@@ -34,12 +34,11 @@
if err != nil {
return nil, err
}
- pos, err := pgf.PositionPos(pp)
+ start, end, err := pgf.RangePos(rng)
if err != nil {
return nil, err
}
- // TODO(hxjiang): replace PrepareCallHierarchy's input position with range.
- obj, err := callHierarchyFuncAtPos(pkg.TypesInfo(), pgf, astutil.RangeOf(pos, pos))
+ obj, err := callHierarchyFuncAtPos(pkg.TypesInfo(), pgf, astutil.RangeOf(start, end))
if err != nil {
return nil, err
}
@@ -47,16 +46,18 @@
if err != nil {
return nil, err
}
- rng := declLoc.Range

+ // TODO(hxjiang): right now, the returned call hierachy item is limited to
+ // a single item where the range is. With the range support gopls can return
+ // a slice of CallHierarchyItem based on the input selected range.
return []protocol.CallHierarchyItem{{
Name: obj.Name(),
Kind: protocol.Function,
Tags: []protocol.SymbolTag{},
Detail: callHierarchyItemDetail(obj, declLoc),
URI: declLoc.URI,
- Range: rng,
- SelectionRange: rng,
+ Range: declLoc.Range,
+ SelectionRange: declLoc.Range,
}}, nil
}

diff --git a/gopls/internal/golang/signature_help.go b/gopls/internal/golang/signature_help.go
index 260bd0f..b0b388d 100644
--- a/gopls/internal/golang/signature_help.go
+++ b/gopls/internal/golang/signature_help.go
@@ -23,7 +23,7 @@

// SignatureHelp returns information about the signature of the innermost
// function call enclosing the position, or nil if there is none.
-func SignatureHelp(ctx context.Context, snapshot *cache.Snapshot, fh file.Handle, params *protocol.SignatureHelpParams) (*protocol.SignatureInformation, error) {
+func SignatureHelp(ctx context.Context, snapshot *cache.Snapshot, fh file.Handle, position protocol.Position, context *protocol.SignatureHelpContext) (*protocol.SignatureInformation, error) {
ctx, done := event.Start(ctx, "golang.SignatureHelp")
defer done()

@@ -33,7 +33,7 @@
if err != nil {
return nil, fmt.Errorf("getting file for SignatureHelp: %w", err)
}
- pos, err := pgf.PositionPos(params.Position)
+ pos, err := pgf.PositionPos(position)
if err != nil {
return nil, err
}
@@ -81,7 +81,7 @@
// golang/go#43397: don't offer signature help when the user is typing
// in a string literal unless it was manually invoked or help is already active.
if node.Kind == token.STRING &&
- (params.Context == nil || (params.Context.TriggerKind != protocol.SigInvoked && !params.Context.IsRetrigger)) {
+ (context == nil || (context.TriggerKind != protocol.SigInvoked && !context.IsRetrigger)) {
return nil, nil
}
}
diff --git a/gopls/internal/protocol/generate/output.go b/gopls/internal/protocol/generate/output.go
index f60fe78..7ff945a 100644
--- a/gopls/internal/protocol/generate/output.go
+++ b/gopls/internal/protocol/generate/output.go
@@ -120,13 +120,19 @@
p = ", &params"

// If the parameter extends the TextDocumentPositionParam, verify the
- // position is within the provided range.
+ // position is within the provided range, always set the range.
if extends(nm, "TextDocumentPositionParams") {
- out.WriteString(` if params.Range != (Range{}) {
+ out.WriteString(` if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %%v is outside the provided range %%v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
`)

}
@@ -316,6 +322,12 @@
json = fmt.Sprintf(" `json:\"%s,omitempty\"`", p.Name)
}
generateDoc(out, p.Documentation)
+ log.Printf("name = %v p.Name = %v", name, p.Name)
+ if docs := appendTypePropDocComments[name]; docs != nil {
+ if doc, ok := docs[p.Name]; ok {
+ out.WriteString(doc)
+ }
+ }
if star {
fmt.Fprintf(out, "\t%s *%s %s\n", goName(p.Name), tp, json)
} else {
diff --git a/gopls/internal/protocol/generate/tables.go b/gopls/internal/protocol/generate/tables.go
index e8b965a..1aa12d0 100644
--- a/gopls/internal/protocol/generate/tables.go
+++ b/gopls/internal/protocol/generate/tables.go
@@ -302,6 +302,14 @@
// properties (e.g. edits, commands) it's waiting for.`,
}

+// prependMethodDocComments specifies doc comments that will be prepend to
+// an LSP type's properties existing doc comments.
+var appendTypePropDocComments = map[string]map[string]string{
+ "TextDocumentPositionParams": {"position": ` //
+ // Deprecated: gopls should use [TextDocumentPositionParams.Range] instead.
+`},
+}
+
// appendTypeProp specifies block of code (typically properties with doc comment)
// that will be append to a struct.
var appendTypeProp = map[string]string{
diff --git a/gopls/internal/protocol/mapper.go b/gopls/internal/protocol/mapper.go
index 6a92a2c..d39a959 100644
--- a/gopls/internal/protocol/mapper.go
+++ b/gopls/internal/protocol/mapper.go
@@ -362,6 +362,6 @@
func LocationTextDocumentPositionParams(loc Location) TextDocumentPositionParams {
return TextDocumentPositionParams{
TextDocument: TextDocumentIdentifier{URI: loc.URI},
- Position: loc.Range.Start,
+ Range: loc.Range,
}
}
diff --git a/gopls/internal/protocol/tsprotocol.go b/gopls/internal/protocol/tsprotocol.go
index a409c01..87c5fe4 100644
--- a/gopls/internal/protocol/tsprotocol.go
+++ b/gopls/internal/protocol/tsprotocol.go
@@ -5627,6 +5627,8 @@
// The text document.
TextDocument TextDocumentIdentifier `json:"textDocument"`
// The position inside the text document.
+ //
+ // Deprecated: use [TextDocumentPositionParams.Range] instead.
Position Position `json:"position"`
// Range is an optional field representing the user's text selection in the document.
// If provided, the Position must be contained within this range.
diff --git a/gopls/internal/protocol/tsserver.go b/gopls/internal/protocol/tsserver.go
index 83841fd..207bea9 100644
--- a/gopls/internal/protocol/tsserver.go
+++ b/gopls/internal/protocol/tsserver.go
@@ -387,11 +387,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.Completion(ctx, &params)
if err != nil {
return nil, true, err
@@ -403,11 +409,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.Declaration(ctx, &params)
if err != nil {
return nil, true, err
@@ -419,11 +431,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.Definition(ctx, &params)
if err != nil {
return nil, true, err
@@ -489,11 +507,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.DocumentHighlight(ctx, &params)
if err != nil {
return nil, true, err
@@ -549,11 +573,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.Hover(ctx, &params)
if err != nil {
return nil, true, err
@@ -565,11 +595,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.Implementation(ctx, &params)
if err != nil {
return nil, true, err
@@ -592,11 +628,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.InlineCompletion(ctx, &params)
if err != nil {
return nil, true, err
@@ -619,11 +661,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.LinkedEditingRange(ctx, &params)
if err != nil {
return nil, true, err
@@ -635,11 +683,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.Moniker(ctx, &params)
if err != nil {
return nil, true, err
@@ -662,11 +716,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.PrepareCallHierarchy(ctx, &params)
if err != nil {
return nil, true, err
@@ -678,11 +738,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.PrepareRename(ctx, &params)
if err != nil {
return nil, true, err
@@ -694,11 +760,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.PrepareTypeHierarchy(ctx, &params)
if err != nil {
return nil, true, err
@@ -732,11 +804,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.References(ctx, &params)
if err != nil {
return nil, true, err
@@ -803,11 +881,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.SignatureHelp(ctx, &params)
if err != nil {
return nil, true, err
@@ -819,11 +903,17 @@
if err := UnmarshalJSON(raw, &params); err != nil {
return nil, true, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
}
- if params.Range != (Range{}) {
+ if params.Range == (Range{}) {
+ params.Range = Range{
+ Start: params.Position,
+ End: params.Position,
+ }
+ } else {
if !params.Range.Contains(params.Position) {
return nil, true, fmt.Errorf("position %v is outside the provided range %v.", params.Position, params.Range)
}
}
+ params.Position = Position{}
resp, err := server.TypeDefinition(ctx, &params)
if err != nil {
return nil, true, err
diff --git a/gopls/internal/server/call_hierarchy.go b/gopls/internal/server/call_hierarchy.go
index dc8cd4c..183ea20 100644
--- a/gopls/internal/server/call_hierarchy.go
+++ b/gopls/internal/server/call_hierarchy.go
@@ -24,7 +24,7 @@
defer release()
switch snapshot.FileKind(fh) {
case file.Go:
- return golang.PrepareCallHierarchy(ctx, snapshot, fh, params.Position)
+ return golang.PrepareCallHierarchy(ctx, snapshot, fh, params.Range)
}
return nil, nil // empty result
}
diff --git a/gopls/internal/server/definition.go b/gopls/internal/server/definition.go
index 964fa40..cdc5f95 100644
--- a/gopls/internal/server/definition.go
+++ b/gopls/internal/server/definition.go
@@ -55,22 +55,10 @@
return nil, err
}

- var rng protocol.Range
- if params.Range == (protocol.Range{}) {
- // No selection range was provided.
- // Default to an empty range at the position.
- rng = protocol.Range{
- Start: params.Position,
- End: params.Position,
- }
- } else {
- rng = params.Range
- }
-
defer release()
switch kind := snapshot.FileKind(fh); kind {
case file.Go:
- return golang.TypeDefinition(ctx, snapshot, fh, rng)
+ return golang.TypeDefinition(ctx, snapshot, fh, params.Range)
default:
return nil, fmt.Errorf("can't find type definitions for file type %s", kind)
}
diff --git a/gopls/internal/server/signature_help.go b/gopls/internal/server/signature_help.go
index c8b6cb6..58c40d0 100644
--- a/gopls/internal/server/signature_help.go
+++ b/gopls/internal/server/signature_help.go
@@ -6,6 +6,7 @@

import (
"context"
+ "fmt"

"golang.org/x/tools/gopls/internal/file"
"golang.org/x/tools/gopls/internal/golang"
@@ -28,14 +29,19 @@
return nil, nil // empty result
}

- info, err := golang.SignatureHelp(ctx, snapshot, fh, params)
+ if params.Range.Start != params.Range.End {
+ return nil, fmt.Errorf("signature help request only applicable for position")
+ }
+ pos := params.Range.Start
+
+ info, err := golang.SignatureHelp(ctx, snapshot, fh, pos, params.Context)
if err != nil {
// TODO(rfindley): is this correct? Apparently, returning an error from
// signatureHelp is distracting in some editors, though I haven't confirmed
// that recently.
//
// It's unclear whether we still need to avoid returning this error result.
- event.Error(ctx, "signature help failed", err, label.Position.Of(params.Position))
+ event.Error(ctx, "signature help failed", err, label.Position.Of(pos))
return nil, nil
}
if info == nil {

Change information

Files:
  • M gopls/internal/cmd/capabilities_test.go
  • M gopls/internal/golang/call_hierarchy.go
  • M gopls/internal/golang/signature_help.go
  • M gopls/internal/protocol/generate/output.go
  • M gopls/internal/protocol/generate/tables.go
  • M gopls/internal/protocol/mapper.go
  • M gopls/internal/protocol/tsprotocol.go
  • M gopls/internal/protocol/tsserver.go
  • M gopls/internal/server/call_hierarchy.go
  • M gopls/internal/server/definition.go
  • M gopls/internal/server/signature_help.go
Change size: M
Delta: 11 files changed, 160 insertions(+), 47 deletions(-)
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newchange
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: If8f4b2bf64b000aff73174bbf0e83c72ec80fdf7
Gerrit-Change-Number: 728881
Gerrit-PatchSet: 1
Gerrit-Owner: Hongxiang Jiang <hxj...@golang.org>
unsatisfied_requirement
satisfied_requirement
open
diffy

Hongxiang Jiang (Gerrit)

unread,
Dec 14, 2025, 10:24:52 PM (2 days ago) Dec 14
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Hongxiang Jiang uploaded new patchset

Hongxiang Jiang uploaded patch set #2 to this change.
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: If8f4b2bf64b000aff73174bbf0e83c72ec80fdf7
Gerrit-Change-Number: 728881
Gerrit-PatchSet: 2
Gerrit-Owner: Hongxiang Jiang <hxj...@golang.org>
unsatisfied_requirement
satisfied_requirement
open
diffy

Hongxiang Jiang (Gerrit)

unread,
Dec 14, 2025, 10:33:49 PM (2 days ago) Dec 14
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Hongxiang Jiang uploaded new patchset

Hongxiang Jiang uploaded patch set #4 to this change.
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: If8f4b2bf64b000aff73174bbf0e83c72ec80fdf7
Gerrit-Change-Number: 728881
Gerrit-PatchSet: 4
Gerrit-Owner: Hongxiang Jiang <hxj...@golang.org>
unsatisfied_requirement
satisfied_requirement
open
diffy

Hongxiang Jiang (Gerrit)

unread,
Dec 16, 2025, 7:43:37 PM (7 hours ago) Dec 16
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Hongxiang Jiang uploaded new patchset

Hongxiang Jiang uploaded patch set #6 to this change.
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: If8f4b2bf64b000aff73174bbf0e83c72ec80fdf7
Gerrit-Change-Number: 728881
Gerrit-PatchSet: 6
Gerrit-Owner: Hongxiang Jiang <hxj...@golang.org>
unsatisfied_requirement
satisfied_requirement
open
diffy

Hongxiang Jiang (Gerrit)

unread,
Dec 16, 2025, 7:51:06 PM (6 hours ago) Dec 16
to goph...@pubsubhelper.golang.org, golang-co...@googlegroups.com

Hongxiang Jiang uploaded new patchset

Hongxiang Jiang uploaded patch set #7 to this change.
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Review
  • requirement satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
  • requirement is not satisfiedTryBots-Pass
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newpatchset
Gerrit-Project: tools
Gerrit-Branch: master
Gerrit-Change-Id: If8f4b2bf64b000aff73174bbf0e83c72ec80fdf7
Gerrit-Change-Number: 728881
Gerrit-PatchSet: 7
Gerrit-Owner: Hongxiang Jiang <hxj...@golang.org>
unsatisfied_requirement
satisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages