GitHub - alexkohler/unimport: unimport is a Go static analysis tool to find unne...
source link: https://github.com/alexkohler/unimport
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
unimport
unimport is a Go static analysis tool to find unnecessary import aliases.
Installation
go get -u github.com/alexkohler/unimport
Usage
Similar to other Go static anaylsis tools (such as golint, go vet) , unimport can be invoked with one or more filenames, directories, or packages named by its import path. Unimport also supports the ...
wildcard.
unimport files/directories/packages
Currently, no flag are supported. A -w
flag may be added in the future to automatically remove aliases where possible (Similar to gofmt's -w flag).
Purpose
As noted in Go's Code Review comments:
Avoid renaming imports except to avoid a name collision; good package names should not require renaming. In the event of collision, prefer to rename the most local or project-specific import.
This tool will check if any import aliases are truly needed (by ensuring there is a name collision that would exist without the import alias). This tool will ignore import paths containing dashes and dots, as these are generally useful aliases while importing a specific revision. For example, in gometalinter, there are some imports like kingpin "gopkg.in/alecthomas/kingpin.v3-unstable"
. This is a reasonable import alias and will not be flagged.
Example
Running unimports
on the Go source:
$ unimport $GOROOT/src/...
cmd/go/pkg.go:18 unnecessary import alias pathpkg
go/build/build.go:19 unnecessary import alias pathpkg
go/internal/gcimporter/gcimporter.go:23 unnecessary import alias exact
os/pipe_test.go:14 unnecessary import alias osexec
os/os_windows_test.go:10 unnecessary import alias osexec
Below are some of the arguably unneeded import aliases it found:
// go/internal/gcimporter/gcimporter.go
import (
"bufio"
"errors"
"fmt"
"go/build"
"go/token"
"io"
"io/ioutil"
"os"
"path/filepath"
"sort"
"strconv"
"strings"
"text/scanner"
exact "go/constant"
"go/types"
)
// os/pipe_test.go.go
import (
"fmt"
"internal/testenv"
"os"
osexec "os/exec"
"os/signal"
"syscall"
"testing"
)
- Unit tests
- Flagging of packages that contain an uppercase letter or underscore
- -w flag to write changes to file where/if possible
- Globbing support (e.g. unimport *.go)
Contributing
Pull requests welcome!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK