| // 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" |
| "log" |
| "os" |
| |
| 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) { |
| if opt == nil { |
| opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} |
| } |
| intopt := &intimp.Options{ |
| Env: &intimp.ProcessEnv{ |
| GOPATH: build.Default.GOPATH, |
| GOROOT: build.Default.GOROOT, |
| GOFLAGS: os.Getenv("GOFLAGS"), |
| GO111MODULE: os.Getenv("GO111MODULE"), |
| GOPROXY: os.Getenv("GOPROXY"), |
| GOSUMDB: os.Getenv("GOSUMDB"), |
| LocalPrefix: LocalPrefix, |
| }, |
| AllErrors: opt.AllErrors, |
| Comments: opt.Comments, |
| FormatOnly: opt.FormatOnly, |
| Fragment: opt.Fragment, |
| TabIndent: opt.TabIndent, |
| TabWidth: opt.TabWidth, |
| } |
| if Debug { |
| intopt.Env.Logf = log.Printf |
| } |
| 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) |
| } |