78 lines
2.4 KiB
Markdown
78 lines
2.4 KiB
Markdown
|
# Depguard
|
||
|
|
||
|
Go linter that checks package imports are in a list of acceptable packages. It
|
||
|
supports a white list and black list option and can do prefix or glob matching.
|
||
|
This allows you to allow imports from a whole organization or only
|
||
|
allow specific packages within a repository. It is recommended to use prefix
|
||
|
matching as it is faster than glob matching. The fewer glob matches the better.
|
||
|
|
||
|
> If a pattern is matched by prefix it does not try to match via glob.
|
||
|
|
||
|
## Install
|
||
|
|
||
|
```bash
|
||
|
go get -u github.com/OpenPeeDeeP/depguard
|
||
|
```
|
||
|
|
||
|
## Config
|
||
|
|
||
|
By default, Depguard looks for a file named `.depguard.json` in the current
|
||
|
current working directory. If it is somewhere else, pass in the `-c` flag with
|
||
|
the location of your configuration file.
|
||
|
|
||
|
The following is an example configuration file.
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"type": "whitelist",
|
||
|
"packages": ["github.com/OpenPeeDeeP/depguard"],
|
||
|
"packageErrorMessages": {
|
||
|
"github.com/OpenPeeDeeP/depguards": "Please use \"github.com/OpenPeeDeeP/depguard\","
|
||
|
},
|
||
|
"inTests": ["github.com/stretchr/testify"],
|
||
|
"includeGoStdLib": true
|
||
|
}
|
||
|
```
|
||
|
|
||
|
- `type` can be either `whitelist` or `blacklist`. This check is case insensitive.
|
||
|
If not specified the default is `blacklist`.
|
||
|
- `packages` is a list of packages for the list type specified.
|
||
|
- `packageErrorMessages` is a mapping from packages to the error message to display
|
||
|
- `inTests` is a list of packages allowed/disallowed only in test files.
|
||
|
- Set `includeGoStdLib` (`includeGoRoot` for backwards compatability) to true if you want to check the list against standard lib.
|
||
|
If not specified the default is false.
|
||
|
|
||
|
## Gometalinter
|
||
|
|
||
|
The binary installation of this linter can be used with
|
||
|
[Gometalinter](github.com/alecthomas/gometalinter).
|
||
|
|
||
|
If you use a configuration file for Gometalinter then the following will need to
|
||
|
be added to your configuration file.
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"linters": {
|
||
|
"depguard": {
|
||
|
"command": "depguard -c path/to/config.json",
|
||
|
"pattern": "PATH:LINE:COL:MESSAGE",
|
||
|
"installFrom": "github.com/OpenPeeDeeP/depguard",
|
||
|
"isFast": true,
|
||
|
"partitionStrategy": "packages"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
If you prefer the command line way the following will work for you as well.
|
||
|
|
||
|
```bash
|
||
|
gometalinter --linter='depguard:depguard -c path/to/config.json:PATH:LINE:COL:MESSAGE'
|
||
|
```
|
||
|
|
||
|
## Golangci-lint
|
||
|
|
||
|
This linter was built with
|
||
|
[Golangci-lint](https://github.com/golangci/golangci-lint) in mind. It is compatable
|
||
|
and read their docs to see how to implement all their linters, including this one.
|