type Options … // Process implements golang.org/x/tools/imports.Process with explicit context in opt.Env. func Process(filename string, src []byte, opt *Options) (formatted []byte, err error) { … } // FixImports returns a list of fixes to the imports that, when applied, // will leave the imports in the same state as Process. src and opt must // be specified. // // Note that filename's directory influences which imports can be chosen, // so it is important that filename be accurate. func FixImports(ctx context.Context, filename string, src []byte, goroot string, logf func(string, ...any), source Source) (fixes []*ImportFix, err error) { … } // ApplyFixes applies all of the fixes to the file and formats it. extraMode // is added in when parsing the file. src and opts must be specified, but no // env is needed. func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, extraMode parser.Mode) (formatted []byte, err error) { … } // formatFile formats the file syntax tree. // It may mutate the token.FileSet and the ast.File. // // If an adjust function is provided, it is called after formatting // with the original source (formatFile's src parameter) and the // formatted file, and returns the postpocessed result. func formatFile(fset *token.FileSet, file *ast.File, src []byte, adjust func(orig []byte, src []byte) []byte, opt *Options) ([]byte, error) { … } // parse parses src, which was read from filename, // as a Go source file or statement list. func parse(fset *token.FileSet, filename string, src []byte, parserMode parser.Mode, fragment bool) (*ast.File, func(orig, src []byte) []byte, error) { … } // containsMainFunc checks if a file contains a function declaration with the // function signature 'func main()' func containsMainFunc(file *ast.File) bool { … } func cutSpace(b []byte) (before, middle, after []byte) { … } // matchSpace reformats src to use the same space context as orig. // 1. If orig begins with blank lines, matchSpace inserts them at the beginning of src. // 2. matchSpace copies the indentation of the first non-blank line in orig // to every non-blank line in src. // 3. matchSpace copies the trailing space from orig and uses it in place // of src's trailing space. func matchSpace(orig []byte, src []byte) []byte { … } var impLine … func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { … }