diff --git a/go/internal/packagesdriver/sizes.go b/go/internal/packagesdriver/sizes.go index ebde896d..eecf07fe 100644 --- a/go/internal/packagesdriver/sizes.go +++ b/go/internal/packagesdriver/sizes.go @@ -1,3 +1,8 @@ +// Copyright 2018 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 packagesdriver fetches type sizes for go/packages and go/analysis. package packagesdriver import ( @@ -25,18 +30,20 @@ func GetSizes(ctx context.Context, buildFlags, env []string, dir string, usesExp tool = val } } - if tool != "" && tool == "off" { - return GetSizesGolist(ctx, buildFlags, env, dir, usesExportData) - } if tool == "" { var err error tool, err = exec.LookPath("gopackagesdriver") if err != nil { - return nil, nil + // We did not find the driver, so use "go list". + tool = "off" } } + if tool == "off" { + return GetSizesGolist(ctx, buildFlags, env, dir, usesExportData) + } + req, err := json.Marshal(struct { Command string `json:"command"` Env []string `json:"env"` diff --git a/go/packages/external.go b/go/packages/external.go index a5963253..860c3ec1 100644 --- a/go/packages/external.go +++ b/go/packages/external.go @@ -26,7 +26,7 @@ type driverRequest struct { Overlay map[string][]byte `json:"overlay"` } -// findExternalTool returns the file path of a tool that supplies +// findExternalDriver returns the file path of a tool that supplies // the build system package structure, or "" if not found." // If GOPACKAGESDRIVER is set in the environment findExternalTool returns its // value, otherwise it searches for a binary named gopackagesdriver on the PATH. diff --git a/go/packages/golist.go b/go/packages/golist.go index 75eb1b23..e5551905 100644 --- a/go/packages/golist.go +++ b/go/packages/golist.go @@ -20,6 +20,7 @@ import ( "sync" "time" + "golang.org/x/tools/go/internal/packagesdriver" "golang.org/x/tools/internal/gopathwalk" "golang.org/x/tools/internal/semver" ) @@ -390,15 +391,7 @@ func runNamedQueries(cfg *Config, driver driver, addPkg func(*Package), queries } func getSizes(cfg *Config) (types.Sizes, error) { - stdout, err := invokeGo(cfg, "env", "GOARCH") - if err != nil { - return nil, err - } - - goarch := strings.TrimSpace(stdout.String()) - // Assume "gc" because SizesFor doesn't respond to other compilers. - // TODO(matloob): add support for gccgo as needed. - return types.SizesFor("gc", goarch), nil + return packagesdriver.GetSizesGolist(cfg.Context, cfg.BuildFlags, cfg.Env, cfg.Dir, usesExportData(cfg)) } // roots selects the appropriate paths to walk based on the passed-in configuration,