github.com/golangci/gofmt@v0.0.0-20231018234816-f50ced29576e/goimports/golangci.go (about)

     1  package goimports
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os"
     7  
     8  	"golang.org/x/tools/imports"
     9  )
    10  
    11  // Run runs goimports.
    12  // The local prefixes (comma separated) must be defined through the global variable imports.LocalPrefix.
    13  func Run(filename string) ([]byte, error) {
    14  	src, err := os.ReadFile(filename)
    15  	if err != nil {
    16  		return nil, err
    17  	}
    18  
    19  	res, err := imports.Process(filename, src, nil)
    20  	if err != nil {
    21  		return nil, err
    22  	}
    23  
    24  	if bytes.Equal(src, res) {
    25  		return nil, nil
    26  	}
    27  
    28  	// formatting has changed
    29  	data, err := diff(src, res, filename)
    30  	if err != nil {
    31  		return nil, fmt.Errorf("error computing diff: %s", err)
    32  	}
    33  
    34  	return data, nil
    35  }