Tool for Golang to sort goimports by 3-4 groups(with own linter): std, general, company(which is optional) and project dependencies.
Also, formatting for your code will be prepared(so, you don't need to use gofmt
or goimports
separately).
Use additional options -rm-unused
to remove unused imports and -set-alias
to rewrite import aliases for versioned packages or for packages with additional prefix/suffix(example: opentracing "github.com/opentracing/opentracing-go"
).
-company-prefixes
- will create group for company imports(libs inside your organization). Values should be comma-separated.
Configuration:
Cmd
goimports-reviser -rm-unused -set-alias -format ./reviser/reviser.go
You can also apply rules to a dir or recursively apply using ./... as a target:
goimports-reviser -rm-unused -set-alias -format -recursive reviser
goimports-reviser -rm-unused -set-alias -format ./...
Example, to configure it with JetBrains IDEs (via file watcher plugin):
Options:
Usage of goimports-reviser:
-company-prefixes string
Company package prefixes which will be placed after 3rd-party group(if defined). Values should be comma-separated. Optional parameters.
-file-path string
Deprecated. Put file name as an argument(last item) of command line.
-format
Option will perform additional formatting. Optional parameter.
-imports-order string
Your imports groups can be sorted in your way.
std - std import group;
general - libs for general purpose;
company - inter-org or your company libs(if you set '-company-prefixes'-option, then 4th group will be split separately. In other case, it will be the part of general purpose libs);
project - your local project dependencies.
Optional parameter. (default "std,general,company,project")
-include-generated-files
Format generated files. Optional parameter.
-list-diff
Option will list-diff files whose formatting differs from goimports-reviser. Optional parameter.
-local string
Deprecated
-output string
Can be "file", "write" or "stdout". Whether to write the formatted content back to the file or to stdout. When "write" together with "-list-diff" will list the file name and write back to the file. Optional parameter. (default "file")
-project-name string
Your project name(ex.: github.com/incu6us/goimports-reviser). Optional parameter.
-recursive
Apply rules recursively if target is a directory. In case of ./... execution will be recursively applied by default. Optional parameter.
-rm-unused
Remove unused imports. Optional parameter.
-set-alias
Set alias for versioned package names, like 'github.com/go-pg/pg/v9'. In this case import will be set as 'pg "github.com/go-pg/pg/v9"'. Optional parameter.
-set-exit-status
set the exit status to 1 if a change is needed/made. Optional parameter.
Install
With Brew
brew tap incu6us/homebrew-tap
brew install incu6us/homebrew-tap/goimports-reviser
With Snap
snap install goimports-reviser
Examples
Before usage:
package testdata
import (
"log"
"github.com/incu6us/goimports-reviser/testdata/innderpkg"
"bytes"
"github.com/pkg/errors"
)
After usage:
package testdata
import (
"bytes"
"log"
"github.com/pkg/errors"
"github.com/incu6us/goimports-reviser/testdata/innderpkg"
)
Comments(not Docs) for imports is acceptable. Example:
package testdata
import (
"fmt" // comments to the package here
)
-company-prefixes
-option
Example with Before usage:
package testdata // goimports-reviser/testdata
import (
"fmt" //fmt package
"github.com/pkg/errors" //custom package
"github.com/incu6us/goimports-reviser/pkg" // this is a company package which is not a part of the project, but is a part of your organization
"goimports-reviser/pkg"
)
After usage:
package testdata // goimports-reviser/testdata
import (
"fmt" // fmt package
"github.com/pkg/errors" // custom package
"github.com/incu6us/goimports-reviser/pkg" // this is a company package which is not a part of the project, but is a part of your organization
"goimports-reviser/pkg"
)
-format
-option
Example with Before usage:
package main
func test(){
}
func additionalTest(){
}
After usage:
package main
func test(){
}
func additionalTest(){
}
Give a Star! ⭐
If you like or are using this project, please give it a star.