]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.26] go/analysis/passes/modernize: add vendored code
authorMark Freeman <mark@golang.org>
Tue, 17 Feb 2026 21:11:00 +0000 (16:11 -0500)
committerDavid Chase <drchase@google.com>
Wed, 25 Feb 2026 19:17:13 +0000 (11:17 -0800)
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>
src/cmd/go.mod
src/cmd/go.sum
src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/newexpr.go
src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringsbuilder.go
src/cmd/vendor/golang.org/x/tools/go/analysis/passes/modernize/stringscut.go
src/cmd/vendor/modules.txt

index 85e8c4cb5fb305166491f7933daf882523783662..a85acc825a1c465880e8833b527ee10d9a4b765b 100644 (file)
@@ -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 (
index 61c88e5253094079013bc322da6730aebe822e01..d13c8dcc240553e1003cdf0e2c0b89f28df94fc0 100644 (file)
@@ -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=
index 6cb75f247c15941a82131c396be33d73f243d628..cd924ec85e7db2df63e82f9e569dc2429d1b0da6 100644 (file)
@@ -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{}},
index 56c5d0e3b32adc3e349fe1e57790e9b2bcb291e7..98c8287a13dde25be9070c8d9ffd0dda45bcbab3 100644 (file)
@@ -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(),
index 954997ad6f1c89ad1b7db5a5953e8054c99a90fc..62088f0e9164dd35ade35ac9048e474a1a1480d9 100644 (file)
@@ -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]
index 9c179c4bcd4c306ec13629225b75221c3c2f5db1..7bd6bf86ce00575a3fc03bf46faa7da46b85da32 100644 (file)
@@ -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