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")