Test of warning diagnostics from various analyzers: copylocks, printf, slog, tests, timeformat, nilness, and cgocall. -- settings.json -- { "pullDiagnostics": true } -- go.mod -- module example.com go 1.12 -- flags -- -min_go=go1.21 -cgo -- bad_test.go -- package analyzer import ( "fmt" "log/slog" "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("Testbad", 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") } // slog func _() { slog.Info("msg", 1) //@diag("1", re`slog.Info arg "1" should be a string or a slog.Attr`) } -- cgocall/cgocall.go -- package cgocall // Note: this test must be in a separate package, as the unsafe import // silences the unusedwrite analyzer. import "unsafe" // void f(void *ptr) {} import "C" // cgocall func _(c chan bool) { C.f(unsafe.Pointer(&c)) //@ diag("unsafe", re"passing Go type with embedded pointer to C") }