diff options
| author | Mark Freeman <mark@golang.org> | 2026-02-17 16:11:00 -0500 |
|---|---|---|
| committer | David Chase <drchase@google.com> | 2026-02-25 11:17:13 -0800 |
| commit | 6fb3df88d48b27c384fc3bb11de6a6ebfdc4b9e4 (patch) | |
| tree | 7606df324842204e1c92df77a3f2fbe4604421aa | |
| parent | 85050c90ee22ef662dcf455a52ab050e8a4d8409 (diff) | |
| download | go-6fb3df88d48b27c384fc3bb11de6a6ebfdc4b9e4.tar.xz | |
[release-branch.go1.26] go/analysis/passes/modernize: add vendored code
Note this is a sum of CLs 731340, 733180, and 736715.
Fixes #77529
Fixes #77624
Change-Id: I0c8119877184d2e6506d0b34895a746bafed3829
Reviewed-on: https://go-review.googlesource.com/c/go/+/746360
Reviewed-by: Madeline Kalil <mkalil@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
| -rw-r--r-- | src/cmd/go.mod | 2 | ||||
| -rw-r--r-- | src/cmd/go.sum | 4 | ||||
| -rw-r--r-- | src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go | 2 | ||||
| -rw-r--r-- | src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go | 26 | ||||
| -rw-r--r-- | src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go | 3 | ||||
| -rw-r--r-- | src/cmd/vendor/modules.txt | 2 |
6 files changed, 32 insertions, 7 deletions
diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 85e8c4cb5f..a85acc825a 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/sys v0.39.0 golang.org/x/telemetry v0.0.0-20251128220624-abf20d0e57ec golang.org/x/term v0.38.0 - golang.org/x/tools v0.39.1-0.20251230210517-d44be789a05c + golang.org/x/tools v0.39.1-0.20260217205208-88886dd9587b ) require ( diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 61c88e5253..d13c8dcc24 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -22,7 +22,7 @@ golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -golang.org/x/tools v0.39.1-0.20251230210517-d44be789a05c h1:0pZej6BQOooNbOfjJEu4v5qx9hdwFX8HnvHCcNXcs2w= -golang.org/x/tools v0.39.1-0.20251230210517-d44be789a05c/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/tools v0.39.1-0.20260217205208-88886dd9587b h1:eAvGtZBetn9/vYF11p6xXS7Wug5moPBH4j+kgEIZWig= +golang.org/x/tools v0.39.1-0.20260217205208-88886dd9587b/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef h1:mqLYrXCXYEZOop9/Dbo6RPX11539nwiCNBb1icVPmw8= rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef/go.mod h1:8xcPgWmwlZONN1D9bjxtHEjrUtSEa3fakVF8iaewYKQ= diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go index 6cb75f247c..cd924ec85e 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go @@ -25,7 +25,7 @@ import ( var NewExprAnalyzer = &analysis.Analyzer{ Name: "newexpr", Doc: analyzerutil.MustExtractDoc(doc, "newexpr"), - URL: "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize#newexpr", + URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/modernize#newexpr", Requires: []*analysis.Analyzer{inspect.Analyzer}, Run: run, FactTypes: []analysis.Fact{&newLike{}}, diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go index 56c5d0e3b3..98c8287a13 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go @@ -5,11 +5,14 @@ package modernize import ( + "cmp" "fmt" "go/ast" "go/constant" "go/token" "go/types" + "maps" + "slices" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/inspect" @@ -61,9 +64,18 @@ func stringsbuilder(pass *analysis.Pass) (any, error) { } } + lexicalOrder := func(x, y *types.Var) int { return cmp.Compare(x.Pos(), y.Pos()) } + + // File and Pos of last fix edit, + // for overlapping fix span detection. + var ( + lastEditFile *ast.File + lastEditEnd token.Pos + ) + // Now check each candidate variable's decl and uses. nextcand: - for v := range candidates { + for _, v := range slices.SortedFunc(maps.Keys(candidates), lexicalOrder) { var edits []analysis.TextEdit // Check declaration of s: @@ -79,6 +91,15 @@ nextcand: if !ok { continue } + + // To avoid semantic conflicts, do not offer a fix if its edit + // range (ignoring import edits) overlaps a previous fix. + // This fixes #76983 and is an ad-hoc mitigation of #76476. + file := astutil.EnclosingFile(def) + if file == lastEditFile && v.Pos() < lastEditEnd { + continue + } + ek, _ := def.ParentEdge() if ek == edge.AssignStmt_Lhs && len(def.Parent().Node().(*ast.AssignStmt).Lhs) == 1 { @@ -303,6 +324,9 @@ nextcand: continue nextcand // no += in a loop; reject } + lastEditFile = file + lastEditEnd = edits[len(edits)-1].End + pass.Report(analysis.Diagnostic{ Pos: loopAssign.Pos(), End: loopAssign.End(), diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go index 954997ad6f..62088f0e91 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go @@ -36,7 +36,7 @@ var stringscutAnalyzer = &analysis.Analyzer{ typeindexanalyzer.Analyzer, }, Run: stringscut, - URL: "https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize#stringscut", + URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/modernize#stringscut", } func init() { @@ -345,6 +345,7 @@ func indexArgValid(info *types.Info, index *typeindex.Index, expr ast.Expr, afte switch expr := expr.(type) { case *ast.CallExpr: return types.Identical(tv.Type, byteSliceType) && + info.Types[expr.Fun].IsType() && // make sure this isn't a function that returns a byte slice indexArgValid(info, index, expr.Args[0], afterPos) // check s in []byte(s) case *ast.Ident: sObj := info.Uses[expr] diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 9c179c4bcd..7bd6bf86ce 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -73,7 +73,7 @@ golang.org/x/text/internal/tag golang.org/x/text/language golang.org/x/text/transform golang.org/x/text/unicode/norm -# golang.org/x/tools v0.39.1-0.20251230210517-d44be789a05c +# golang.org/x/tools v0.39.1-0.20260217205208-88886dd9587b ## explicit; go 1.24.0 golang.org/x/tools/cmd/bisect golang.org/x/tools/cover |
