Test of "too new" diagnostics from the stdversion analyzer.

This test references go1.21 symbols from std.

It uses a txtar file due to golang/go#37054.

See also gopls/internal/test/marker/testdata/diagnostics/stdversion.txt
which runs the same test within the gopls analysis driver, to ensure
coverage of per-file Go version support.

-- go.work --
use .
use ./sub

-- go.mod --
module example.com

go 1.19

-- a/a.go --
package a

import (
	"context"
	"go/types"
	"time"
)

func _() {
	time.Now() // ok: defined by go1.0

	context.Cause(nil) // want `context.Cause requires go1.20 or later \(module is go1.19\)`

	context.WithDeadlineCause(nil, time.Time{}, nil) // want `context.WithDeadlineCause requires go1.21 or later \(module is go1.19\)`

	// GoVersion is a new method of an older type.
	new(types.Package).GoVersion() // want `types.GoVersion 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 // want `ast.FileEnd requires go1.20 or later \(module is go1.19\)`
	time.Now().Compare(time.Now()) // want `time.Compare requires go1.20 or later \(module is go1.19\)`

	var log slog.Logger // want `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"
	"go/types"
	"time"
)

func _() {
	time.Now() // ok: defined by go1.0

	context.Cause(nil) // ok: go.mod requires 1.20

	context.WithDeadlineCause(nil, time.Time{}, nil) // want `context.WithDeadlineCause requires go1.21 or later \(module is go1.20\)`

	// GoVersion is a new (go1.21) method of an old (go1.0) type.
	new(types.Package).GoVersion() // want `types.GoVersion requires go1.21 or later \(module is go1.20\)`
}

invalid syntax // exercise RunDespiteErrors

-- sub/tagged.go --
//go:build go1.21

package sub

import (
	"context"
	"go/types"
	"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

	new(types.Package).GoVersion() // ok: file requires go1.21
}

