aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Freeman <mark@golang.org>2026-02-17 16:11:00 -0500
committerDavid Chase <drchase@google.com>2026-02-25 11:17:13 -0800
commit6fb3df88d48b27c384fc3bb11de6a6ebfdc4b9e4 (patch)
tree7606df324842204e1c92df77a3f2fbe4604421aa
parent85050c90ee22ef662dcf455a52ab050e8a4d8409 (diff)
downloadgo-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.mod2
-rw-r--r--src/cmd/go.sum4
-rw-r--r--src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go2
-rw-r--r--src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go26
-rw-r--r--src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go3
-rw-r--r--src/cmd/vendor/modules.txt2
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