Test of fixing redundant calls to maps.Keys and maps.Values
(both stdlib "maps" and "golang.org/x/exp/maps") for Go 1.21,
before range over int made suggesting a fix for a rare case easier.

-- go.mod --
module maprange

require golang.org/x/exp v0.0.0

replace golang.org/x/exp => ./exp

go 1.21

-- old.go --
package old

import "golang.org/x/exp/maps"

func _() {
	m := make(map[int]int)

	for i := range maps.Keys(m) { // want `likely incorrect use of golang.org/x/exp/maps.Keys \(returns a slice\)`
		_ = i
	}
}

-- old.go.golden --
package old

import "golang.org/x/exp/maps"

func _() {
	m := make(map[int]int)

	for i := range maps.Keys(m) { // want `likely incorrect use of golang.org/x/exp/maps.Keys \(returns a slice\)`
		_ = i
	}
}

-- exp/go.mod --
module golang.org/x/exp

go 1.21

-- exp/maps/maps.go --
package maps

func Keys[M ~map[K]V, K comparable, V any](m M) []K {
	r := make([]K, 0, len(m))
	for k := range m {
		r = append(r, k)
	}
	return r
}

func Values[M ~map[K]V, K comparable, V any](m M) []V {
	r := make([]V, 0, len(m))
	for _, v := range m {
		r = append(r, v)
	}
	return r
}