This test checks that the zero-config algorithm selects Views to cover first
class ports.

In this test, package a imports b, and b imports c. Package a contains files
constrained by go:build directives, package b contains files constrained by the
GOOS matching their file name, and package c is unconstrained. Various
assertions check that diagnostics and navigation work as expected.

-- go.mod --
module golang.org/lsptests

-- a/a.go --
package a

import "golang.org/lsptests/b"

var _ = b.F //@loc(F, "F")

-- a/linux64.go --
//go:build (linux && amd64)

package a

import "golang.org/lsptests/b"

var _ int = 1<<32 -1 // OK on 64 bit platforms. Compare linux32.go below.

var (
	_ = b.LinuxOnly   //@def("LinuxOnly", LinuxOnly)
	_ = b.DarwinOnly  //@diag("DarwinOnly", re"(undefined|declared)")
	_ = b.WindowsOnly //@diag("WindowsOnly", re"(undefined|declared)")
)

-- a/linux32.go --
//go:build (linux && 386)

package a

import "golang.org/lsptests/b"

var _ int = 1<<32 -1 //@diag("1<<32", re"overflows")

var (
	_ = b.LinuxOnly   //@def("LinuxOnly", LinuxOnly)
	_ = b.DarwinOnly  //@diag("DarwinOnly", re"(undefined|declared)")
	_ = b.WindowsOnly //@diag("WindowsOnly", re"(undefined|declared)")
)

-- a/darwin64.go --
//go:build (darwin && amd64)

package a

import "golang.org/lsptests/b"

var (
	_ = b.LinuxOnly   //@diag("LinuxOnly", re"(undefined|declared)")
	_ = b.DarwinOnly  //@def("DarwinOnly", DarwinOnly)
	_ = b.WindowsOnly //@diag("WindowsOnly", re"(undefined|declared)")
)

-- a/windows64.go --
//go:build (windows && amd64)

package a

import "golang.org/lsptests/b"

var (
	_ = b.LinuxOnly   //@diag("LinuxOnly", re"(undefined|declared)")
	_ = b.DarwinOnly  //@diag("DarwinOnly", re"(undefined|declared)")
	_ = b.WindowsOnly //@def("WindowsOnly", WindowsOnly)
)

-- b/b_other.go --
//go:build !linux && !darwin && !windows
package b

func F() {}

-- b/b_linux.go --
package b

import "golang.org/lsptests/c"

func F() { //@refs("F", "F", F)
	x := c.Common //@diag("x", re"not used"),def("Common", Common)
}

const LinuxOnly = "darwin" //@loc(LinuxOnly, "LinuxOnly")

-- b/b_darwin.go --
package b

import "golang.org/lsptests/c"

func F() { //@refs("F", "F", F)
	x := c.Common //@diag("x", re"not used"),def("Common", Common)
}

const DarwinOnly = "darwin" //@loc(DarwinOnly, "DarwinOnly")

-- b/b_windows.go --
package b

import "golang.org/lsptests/c"

func F() { //@refs("F", "F", F)
	x := c.Common //@diag("x", re"not used"),def("Common", Common)
}

const WindowsOnly = "windows" //@loc(WindowsOnly, "WindowsOnly")

-- c/c.go --
package c

const Common = 0 //@loc(Common, "Common")

