Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / imports / forward.go
1 // Package imports implements a Go pretty-printer (like package "go/format")
2 // that also adds or removes import statements as necessary.
3 package imports // import "golang.org/x/tools/imports"
4
5 import (
6         "io/ioutil"
7         "log"
8
9         "golang.org/x/tools/internal/gocommand"
10         intimp "golang.org/x/tools/internal/imports"
11 )
12
13 // Options specifies options for processing files.
14 type Options struct {
15         Fragment  bool // Accept fragment of a source file (no package statement)
16         AllErrors bool // Report all errors (not just the first 10 on different lines)
17
18         Comments  bool // Print comments (true if nil *Options provided)
19         TabIndent bool // Use tabs for indent (true if nil *Options provided)
20         TabWidth  int  // Tab width (8 if nil *Options provided)
21
22         FormatOnly bool // Disable the insertion and deletion of imports
23 }
24
25 // Debug controls verbose logging.
26 var Debug = false
27
28 // LocalPrefix is a comma-separated string of import path prefixes, which, if
29 // set, instructs Process to sort the import paths with the given prefixes
30 // into another group after 3rd-party packages.
31 var LocalPrefix string
32
33 // Process formats and adjusts imports for the provided file.
34 // If opt is nil the defaults are used, and if src is nil the source
35 // is read from the filesystem.
36 //
37 // Note that filename's directory influences which imports can be chosen,
38 // so it is important that filename be accurate.
39 // To process data ``as if'' it were in filename, pass the data as a non-nil src.
40 func Process(filename string, src []byte, opt *Options) ([]byte, error) {
41         var err error
42         if src == nil {
43                 src, err = ioutil.ReadFile(filename)
44                 if err != nil {
45                         return nil, err
46                 }
47         }
48         if opt == nil {
49                 opt = &Options{Comments: true, TabIndent: true, TabWidth: 8}
50         }
51         intopt := &intimp.Options{
52                 Env: &intimp.ProcessEnv{
53                         GocmdRunner: &gocommand.Runner{},
54                 },
55                 LocalPrefix: LocalPrefix,
56                 AllErrors:   opt.AllErrors,
57                 Comments:    opt.Comments,
58                 FormatOnly:  opt.FormatOnly,
59                 Fragment:    opt.Fragment,
60                 TabIndent:   opt.TabIndent,
61                 TabWidth:    opt.TabWidth,
62         }
63         if Debug {
64                 intopt.Env.Logf = log.Printf
65         }
66         return intimp.Process(filename, src, intopt)
67 }
68
69 // VendorlessPath returns the devendorized version of the import path ipath.
70 // For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b".
71 func VendorlessPath(ipath string) string {
72         return intimp.VendorlessPath(ipath)
73 }