GCI, a tool that control golang package import order and make it always deterministic.
It handles empty lines more smartly than goimport does.
$ go get github.com/daixiang0/gci$ gci -h
usage: gci [flags] [path ...]
-d display diffs instead of rewriting files
-local string
put imports beginning with this string after 3rd-party packages, only support one string
-w write result to (source) file instead of stdoutRun gci -w -local github.com/daixiang0/gci main.go and you will handle following cases.
package main
import (
"golang.org/x/tools"
"fmt"
"github.com/daixiang0/gci"
)to
package main
import (
"fmt"
"golang.org/x/tools"
"github.com/daixiang0/gci"
)package main
import (
"fmt"
go "github.com/golang"
"github.com/daixiang0"
)to
package main
import (
"fmt"
go "github.com/golang"
"github.com/daixiang0/gci"
)package main
import (
"fmt"
_ "github.com/golang" // golang
"github.com/daixiang0"
)to
package main
import (
"fmt"
// golang
_ "github.com/golang"
"github.com/daixiang0/gci"
)package main
import (
"fmt"
// golang
_ "github.com/golang"
"github.com/daixiang0"
)to
package main
import (
"fmt"
// golang
_ "github.com/golang"
"github.com/daixiang0/gci"
)- Support multi-3rd-party packages
- Support multiple lines of comment in import block
- Add testcases