blob: 06d8982e6e034c5ba3dd2421914eff70ae17e75f [file] [log] [blame]
Test of "too new" diagnostics from the stdversion analyzer.
This test references go1.21 symbols from std, but the analyzer itself
depends on the the go1.22 behavior of versions.FileVersion.
See also gopls/internal/analysis/stdversion/testdata/test.txtar,
which runs the same test in the analysistest framework.
-- flags --
-min_go=go1.22
-- go.mod --
module example.com
go 1.19
-- a/a.go --
package a
import (
"context"
"time"
)
func _() {
time.Now() // ok: defined by go1.0
context.Cause(nil) //@ diag("Cause", re`context.Cause requires go1.20 or later \(module is go1.19\)`)
context.WithDeadlineCause(nil, time.Time{}, nil) //@ diag("WithDeadlineCause", re`context.WithDeadlineCause requires go1.21 or later \(module is go1.19\)`)
}
-- a/selections.go --
package a
import (
"go/ast" // for File.FileEnd field (go1.20)
"time" // for Time.Compare method (go1.20)
"log/slog" // for slog.Logger and its Info method (both go1.21)
)
func _() {
_ = new(ast.File).FileEnd //@ diag("FileEnd", re`ast.FileEnd requires go1.20 or later \(module is go1.19\)`)
time.Now().Compare(time.Now()) //@ diag("Compare", re`time.Compare requires go1.20 or later \(module is go1.19\)`)
var log slog.Logger //@ diag("Logger", re`slog.Logger requires go1.21 or later \(module is go1.19\)`)
log.Info("") // no diagnostic
}
-- sub/go.mod --
module example.com/sub
go 1.20
-- sub/sub.go --
package sub
import (
"context"
"time"
)
func _() {
time.Now() // ok: defined by go1.0
context.Cause(nil) // ok: go.mod requires 1.20
context.WithDeadlineCause(nil, time.Time{}, nil) //@ diag("WithDeadlineCause", re`context.WithDeadlineCause requires go1.21 or later \(module is go1.20\)`)
}
-- sub/tagged.go --
//go:build go1.21
package sub
import (
"context"
"time"
)
func _() {
time.Now() // ok: defined by go1.0
context.Cause(nil) // ok: go.mod requires 1.20
context.WithDeadlineCause(nil, time.Time{}, nil) // ok: file requires go1.21
}