A goimports
client as well as a parser that parses the diff between an original file and formatted one. You can use it as a wrapper for golang.org/x/tools/imports.
goimports not only fixes imports, but also formats your code in the same style as gofmt, so fmtdiff
means importsdiff
substantially.
go get github.com/nakabonne/fmtdiff
package main
import "github.com/nakabonne/fmtdiff"
func main() {
fileDiff, _ := fmtdiff.Process("/path/to/foo.go", &fmtdiff.Options{
LocalPrefixes: []string{"example.com/foo/bar"},
IgnoreComments: true,
FormatOnly: true,
})
}
Combined with nakabonne/modpath, and then you can detect the local prefix from the go.mod
.
import (
"github.com/nakabonne/modpath"
"github.com/nakabonne/fmtdiff"
)
func main() {
prefix, _ := modpath.Run("/path/to/foo/bar")
fileDiff, _ := fmtdiff.Process("/path/to/foo.go", &fmtdiff.Options{
LocalPrefixes: []string{prefix},
})
}
Thanks to sourcegraph/go-diff for cool diff parser.