| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package workspace |
| |
| import ( |
| "testing" |
| |
| . "golang.org/x/tools/gopls/internal/lsp/regtest" |
| "golang.org/x/tools/internal/testenv" |
| ) |
| |
| // Test that setting go.work via environment variables or settings works. |
| func TestUseGoWorkOutsideTheWorkspace(t *testing.T) { |
| testenv.NeedsGo1Point(t, 18) |
| const files = ` |
| -- work/a/go.mod -- |
| module a.com |
| |
| go 1.12 |
| -- work/a/a.go -- |
| package a |
| -- work/b/go.mod -- |
| module b.com |
| |
| go 1.12 |
| -- work/b/b.go -- |
| package b |
| |
| func _() { |
| x := 1 // unused |
| } |
| -- other/c/go.mod -- |
| module c.com |
| |
| go 1.18 |
| -- other/c/c.go -- |
| package c |
| -- config/go.work -- |
| go 1.18 |
| |
| use ( |
| $SANDBOX_WORKDIR/work/a |
| $SANDBOX_WORKDIR/work/b |
| $SANDBOX_WORKDIR/other/c |
| ) |
| ` |
| |
| WithOptions( |
| WorkspaceFolders("work"), // use a nested workspace dir, so that GOWORK is outside the workspace |
| EnvVars{"GOWORK": "$SANDBOX_WORKDIR/config/go.work"}, |
| ).Run(t, files, func(t *testing.T, env *Env) { |
| // When we have an explicit GOWORK set, we should get a file watch request. |
| env.OnceMet( |
| InitialWorkspaceLoad, |
| FileWatchMatching(`other`), |
| FileWatchMatching(`config.go\.work`), |
| ) |
| env.Await(FileWatchMatching(`config.go\.work`)) |
| // Even though work/b is not open, we should get its diagnostics as it is |
| // included in the workspace. |
| env.OpenFile("work/a/a.go") |
| env.AfterChange( |
| Diagnostics(env.AtRegexp("work/b/b.go", "x := 1"), WithMessage("not used")), |
| ) |
| }) |
| } |