ipld-eth-server/vendor/golang.org/x/tools/go/packages/raw.go
2018-08-07 10:51:34 -05:00

88 lines
2.7 KiB
Go

// 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 packages
import (
"context"
"fmt"
"os"
)
// This file contains the structs needed at the seam between the packages
// loader and the underlying build tool
// rawPackage is the serialized form of a package
type rawPackage struct {
// ID is a unique identifier for a package.
// This is the same as Package.ID
ID string
// Name is the package name as it appears in the package source code.
// This is the same as Package.name
Name string `json:",omitempty"`
// This is the package path as used in the export data.
// This is used to map entries in the export data back to the package they
// come from.
// This is not currently exposed in Package.
PkgPath string `json:",omitempty"`
// Imports maps import paths appearing in the package's Go source files
// to corresponding package identifiers.
// This is similar to Package.Imports, but maps to the ID rather than the
// package itself.
Imports map[string]string `json:",omitempty"`
// Export is the absolute path to a file containing the export data for the
// package.
// This is not currently exposed in Package.
Export string `json:",omitempty"`
// GoFiles lists the absolute file paths of the package's Go source files.
// This is the same as Package.GoFiles
GoFiles []string `json:",omitempty"`
// OtherFiles lists the absolute file paths of the package's non-Go source
// files.
// This is the same as Package.OtherFiles
OtherFiles []string `json:",omitempty"`
// DepOnly marks a package that is in a list because it was a dependency.
// It is used to find the roots when constructing a graph from a package list.
// This is not exposed in Package.
DepOnly bool `json:",omitempty"`
}
// rawConfig specifies details about what raw package information is needed
// and how the underlying build tool should load package data.
type rawConfig struct {
Context context.Context
Dir string
Env []string
ExtraFlags []string
Export bool
Tests bool
Deps bool
}
func newRawConfig(cfg *Config) *rawConfig {
rawCfg := &rawConfig{
Context: cfg.Context,
Dir: cfg.Dir,
Env: cfg.Env,
ExtraFlags: cfg.Flags,
Export: cfg.Mode > LoadImports && cfg.Mode < LoadAllSyntax,
Tests: cfg.Tests,
Deps: cfg.Mode >= LoadImports,
}
if rawCfg.Env == nil {
rawCfg.Env = os.Environ()
}
return rawCfg
}
func (cfg *rawConfig) Flags() []string {
return append([]string{
fmt.Sprintf("-test=%t", cfg.Tests),
fmt.Sprintf("-export=%t", cfg.Export),
fmt.Sprintf("-deps=%t", cfg.Deps),
},
cfg.ExtraFlags...,
)
}