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.20251205000126-062ef7b6ced2
+ golang.org/x/tools v0.39.1-0.20251230210517-d44be789a05c
)
require (
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.20251205000126-062ef7b6ced2 h1:2Qqv605Nus9iUp3ErvEU/q92Q3HAzeROztzl9pzAno8=
-golang.org/x/tools v0.39.1-0.20251205000126-062ef7b6ced2/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
+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=
rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef h1:mqLYrXCXYEZOop9/Dbo6RPX11539nwiCNBb1icVPmw8=
rsc.io/markdown v0.0.0-20240306144322-0bf8f97ee8ef/go.mod h1:8xcPgWmwlZONN1D9bjxtHEjrUtSEa3fakVF8iaewYKQ=
Caveats: The b.Loop() method is designed to prevent the compiler from
optimizing away the benchmark loop, which can occasionally result in
slower execution due to increased allocations in some specific cases.
+Since its fix may change the performance of nanosecond-scale benchmarks,
+bloop is disabled by default in the `go fix` analyzer suite; see golang/go#74967.
# Analyzer any
// Have: for k, v := range x { lhs = rhs }
assign := rng.Body.List[0].(*ast.AssignStmt)
+
+ // usesKV reports whether e references vars k or v.
+ usesKV := func(e ast.Expr) bool {
+ k := info.Defs[rng.Key.(*ast.Ident)]
+ v := info.Defs[rng.Value.(*ast.Ident)]
+ for n := range ast.Preorder(e) {
+ if id, ok := n.(*ast.Ident); ok {
+ obj := info.Uses[id]
+ if obj != nil && // don't rely on k, v being non-nil
+ (obj == k || obj == v) {
+ return true
+ }
+ }
+ }
+ return false
+ }
+
if index, ok := assign.Lhs[0].(*ast.IndexExpr); ok &&
+ len(assign.Lhs) == 1 &&
astutil.EqualSyntax(rng.Key, index.Index) &&
- astutil.EqualSyntax(rng.Value, assign.Rhs[0]) {
+ astutil.EqualSyntax(rng.Value, assign.Rhs[0]) &&
+ !usesKV(index.X) { // reject (e.g.) f(k, v)[k] = v
if tmap, ok := typeparams.CoreType(info.TypeOf(index.X)).(*types.Map); ok &&
types.Identical(info.TypeOf(index), info.TypeOf(rng.Value)) && // m[k], v
types.Identical(tmap.Key(), info.TypeOf(rng.Key)) {
var Suite = []*analysis.Analyzer{
AnyAnalyzer,
// AppendClippedAnalyzer, // not nil-preserving!
- BLoopAnalyzer,
+ // BLoopAnalyzer, // may skew benchmark results, see golang/go#74967
FmtAppendfAnalyzer,
ForVarAnalyzer,
MapsLoopAnalyzer,
golang.org/x/text/language
golang.org/x/text/transform
golang.org/x/text/unicode/norm
-# golang.org/x/tools v0.39.1-0.20251205000126-062ef7b6ced2
+# golang.org/x/tools v0.39.1-0.20251230210517-d44be789a05c
## explicit; go 1.24.0
golang.org/x/tools/cmd/bisect
golang.org/x/tools/cover