Test of warning diagnostics from various analyzers:
copylocks, printf, slog, tests, timeformat, and nilness.

-- go.mod --
module example.com
go 1.12

-- flags --
-min_go=go1.21

-- bad_test.go --
package analyzer

import (
	"fmt"
	"sync"
	"testing"
	"time"
)

// copylocks
func _() {
	var x sync.Mutex
	_ = x //@diag("x", re"assignment copies lock value to _: sync.Mutex")
}

// printf
func _() {
	printfWrapper("%s") //@diag(re`printfWrapper\(.*\)`, re"example.com.printfWrapper format %s reads arg #1, but call has 0 args")
}

func printfWrapper(format string, args ...interface{}) {
	fmt.Printf(format, args...)
}

// tests
func Testbad(t *testing.T) { //@diag("", re"Testbad has malformed name: first letter after 'Test' must not be lowercase")
}

// timeformat
func _() {
	now := time.Now()
	fmt.Println(now.Format("2006-02-01")) //@diag("2006-02-01", re"2006-02-01 should be 2006-01-02")
}

// nilness
func _(ptr *int) {
	if ptr == nil {
		_ = *ptr //@diag("*ptr", re"nil dereference in load")
	}
}

// unusedwrite
func _(s struct{x int}) {
	s.x = 1  //@diag("x", re"unused write to field x")
}

-- bad_test_go121.go --
//go:build go1.21

package analyzer

import "log/slog"

// slog
func _() {
	slog.Info("msg", 1) //@diag("1", re`slog.Info arg "1" should be a string or a slog.Attr`)
}
