wami

wami ("What Are My Imports?") is a tool for Go projects that analyzes
imports and their aliases. It offers a wide range of options, filters, and
output formats, making it easy to integrate with other tools.
Table of Contents
Install
go install github.com/ravsii/wami/cmd/wami@latest
Usage
NAME:
wami - What are my imports? (wami) is a cli for import analisys for go apps.
USAGE:
wami [global options] [arguments...]
GLOBAL OPTIONS:
--aliases-only, -a only output imports that have aliases. Note: all imports will be parsed anyways, for a total amount of usages
--format string, -f string output format (text, text-colored, json, csv) (default: "text-colored")
--ignore regexp regexp to ignore import paths
--ignore-alias regexp regexp to ignore import aliases
--ignore-blank ignore blank imports (e.g., '_ fmt')
--ignore-dot ignore dot imports (e.g., '. fmt')
--ignore-same ignore imports using the same alias as the original package (e.g., 'fmt fmt')
--include regexp regexp to include import paths
--include-alias regexp regexp to include import aliases
--max uint maximum amount of usages to appear in the output (inclusive) (default: 0)
--min uint minimal amount of usages to appear in the output (inclusive) (default: 0)
--recursive, -r enables recursive walking for ALL paths. If disabled, only paths ending with '...' are treated as recursive
--help, -h show help
Outputs
Here’s an example output in multiple formats, generated from the
kubernetes repository - one of the
largest Go projects:
> wami <path> --min 300 --max 350
Text output
Show example
k8s.io/client-go/kubernetes/scheme: 349 total usages
├ 210 usages as scheme
├ 13 usages as clientscheme
├ 6 usages as clientsetscheme
├ 3 usages as k8sscheme
├ 2 usages as clientgoscheme
├ 1 usages as cgoscheme
├ 1 usages as clientgokubescheme
├ 1 usages as kubernetesscheme
└ 1 usages as typedscheme
syscall: 345 total usages
regexp: 342 total usages
└ 1 usages as re
k8s.io/apimachinery/pkg/api/equality: 320 total usages
├ 215 usages as apiequality
└ 62 usages as equality
github.com/onsi/gomega: 317 total usages
├ 8 usages as .
└ 2 usages as o
JSON output
Show example
[
{
"path": "k8s.io/client-go/kubernetes/scheme",
"count": 349,
"aliases": [
{
"count": 210,
"name": "scheme"
},
{
"count": 13,
"name": "clientscheme"
},
{
"count": 6,
"name": "clientsetscheme"
},
{
"count": 3,
"name": "k8sscheme"
},
{
"count": 2,
"name": "clientgoscheme"
},
{
"count": 1,
"name": "cgoscheme"
},
{
"count": 1,
"name": "clientgokubescheme"
},
{
"count": 1,
"name": "kubernetesscheme"
},
{
"count": 1,
"name": "typedscheme"
}
]
},
{
"path": "syscall",
"count": 345
},
{
"path": "regexp",
"count": 342,
"aliases": [
{
"count": 1,
"name": "re"
}
]
},
{
"path": "k8s.io/apimachinery/pkg/api/equality",
"count": 320,
"aliases": [
{
"count": 215,
"name": "apiequality"
},
{
"count": 62,
"name": "equality"
}
]
},
{
"path": "github.com/onsi/gomega",
"count": 317,
"aliases": [
{
"count": 8,
"name": "."
},
{
"count": 2,
"name": "o"
}
]
}
]
CSV output
Alias column has the following format:
"<count1>,<alias1>;<count2>,<alias2>;..."
Show example
import,count,aliases
k8s.io/client-go/kubernetes/scheme,349,"210,scheme;13,clientscheme;6,clientsetscheme;3,k8sscheme;2,clientgoscheme;1,cgoscheme;1,clientgokubescheme;1,kubernetesscheme;1,typedscheme"
syscall,345,
regexp,342,"1,re"
k8s.io/apimachinery/pkg/api/equality,320,"215,apiequality;62,equality"
github.com/onsi/gomega,317,"8,.;2,o"