mirror of
https://github.com/golang/go
synced 2024-11-18 15:24:41 -07:00
757ca719ca
For various reasons we need an internal-facing imports API. Move imports to internal/imports, leaving behind a small wrapper package. The wrapper package captures the globals at time of call into the options struct. Also converts the last goimports tests to use the test helpers, and fixes go/packages in module mode to work with empty modules, which was necessary to get those last tests converted. Change-Id: Ib1212c67908741a1800b992ef1935d563c6ade32 Reviewed-on: https://go-review.googlesource.com/c/tools/+/175437 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Cottrell <iancottrell@google.com>
60 lines
2.0 KiB
Go
60 lines
2.0 KiB
Go
// Package imports implements a Go pretty-printer (like package "go/format")
|
|
// that also adds or removes import statements as necessary.
|
|
package imports // import "golang.org/x/tools/imports"
|
|
|
|
import (
|
|
"go/build"
|
|
|
|
intimp "golang.org/x/tools/internal/imports"
|
|
)
|
|
|
|
// Options specifies options for processing files.
|
|
type Options struct {
|
|
Fragment bool // Accept fragment of a source file (no package statement)
|
|
AllErrors bool // Report all errors (not just the first 10 on different lines)
|
|
|
|
Comments bool // Print comments (true if nil *Options provided)
|
|
TabIndent bool // Use tabs for indent (true if nil *Options provided)
|
|
TabWidth int // Tab width (8 if nil *Options provided)
|
|
|
|
FormatOnly bool // Disable the insertion and deletion of imports
|
|
}
|
|
|
|
// Debug controls verbose logging.
|
|
var Debug = false
|
|
|
|
// LocalPrefix is a comma-separated string of import path prefixes, which, if
|
|
// set, instructs Process to sort the import paths with the given prefixes
|
|
// into another group after 3rd-party packages.
|
|
var LocalPrefix string
|
|
|
|
// Process formats and adjusts imports for the provided file.
|
|
// If opt is nil the defaults are used.
|
|
//
|
|
// Note that filename's directory influences which imports can be chosen,
|
|
// so it is important that filename be accurate.
|
|
// To process data ``as if'' it were in filename, pass the data as a non-nil src.
|
|
func Process(filename string, src []byte, opt *Options) ([]byte, error) {
|
|
intopt := &intimp.Options{
|
|
Env: &intimp.ProcessEnv{
|
|
GOPATH: build.Default.GOPATH,
|
|
GOROOT: build.Default.GOROOT,
|
|
Debug: Debug,
|
|
LocalPrefix: LocalPrefix,
|
|
},
|
|
AllErrors: opt.AllErrors,
|
|
Comments: opt.Comments,
|
|
FormatOnly: opt.FormatOnly,
|
|
Fragment: opt.Fragment,
|
|
TabIndent: opt.TabIndent,
|
|
TabWidth: opt.TabWidth,
|
|
}
|
|
return intimp.Process(filename, src, intopt)
|
|
}
|
|
|
|
// VendorlessPath returns the devendorized version of the import path ipath.
|
|
// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b".
|
|
func VendorlessPath(ipath string) string {
|
|
return intimp.VendorlessPath(ipath)
|
|
}
|