internal/lsp: in gc_details change command to use a temporary file.
https://go-review.googlesource.com/c/tools/+/246419/2 fixed a problem
but introduced a new one, as go build treats -o directories differently
depending on whether or not a main package is being built.
(see https://github.com/golang/go/issues/36784)
This change explicitly constructs a temporary file for go build
to use.
Change-Id: I096748e9af5014428dab8a5aad703f062fe88d50
Reviewed-on: https://go-review.googlesource.com/c/tools/+/247899
Run-TryBot: Peter Weinberger <pjw@google.com>
Reviewed-by: Pontus Leitzler <leitzler@gmail.com>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/lsp/source/gc_annotations.go b/internal/lsp/source/gc_annotations.go
index 82ad2bc..4eb4faf 100644
--- a/internal/lsp/source/gc_annotations.go
+++ b/internal/lsp/source/gc_annotations.go
@@ -23,11 +23,16 @@
if err := os.MkdirAll(outDir, 0700); err != nil {
return nil, err
}
+ tmpFile, err := ioutil.TempFile(os.TempDir(), "gopls-x")
+ if err != nil {
+ return nil, err
+ }
+ defer os.Remove(tmpFile.Name())
args := []string{fmt.Sprintf("-gcflags=-json=0,%s", outDir),
- fmt.Sprintf("-o=%s", pkgDir.Filename()),
+ fmt.Sprintf("-o=%s", tmpFile.Name()),
pkgDir.Filename(),
}
- err := snapshot.RunGoCommandDirect(ctx, "build", args)
+ err = snapshot.RunGoCommandDirect(ctx, "build", args)
if err != nil {
return nil, err
}