depguard

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 26, 2019 License: GPL-3.0 Imports: 7 Imported by: 0

README

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

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.

{
  "type": "whitelist",
  "packages": [
    "github.com/OpenPeeDeeP/depguard"
  ],
  "inTests": [
    "github.com/stretchr/testify"
  ],
  "includeGoRoot": 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.
  • inTests is a list of packages allowed/disallowed only in test files.
  • Set includeGoRoot 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.

If you use a configuration file for Gometalinter then the following will need to be added to your configuration file.

{
  "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.

gometalinter --linter='depguard:depguard -c path/to/config.json:PATH:LINE:COL:MESSAGE'

Golangci-lint

This linter was built with Golangci-lint in mind. It is compatable and read their docs to see how to implement all their linters, including this one.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var StringToListType = map[string]ListType{
	"whitelist": LTWhitelist,
	"blacklist": LTBlacklist,
}

StringToListType makes it easier to turn a string into a ListType. It assumes that the string representation is lower case.

Functions

This section is empty.

Types

type Depguard

type Depguard struct {
	ListType      ListType
	IncludeGoRoot bool

	Packages []string

	TestPackages []string
	// contains filtered or unexported fields
}

Depguard checks imports to make sure they follow the given list and constraints.

func (*Depguard) Run

func (dg *Depguard) Run(config *loader.Config, prog *loader.Program) ([]*Issue, error)

Run checks for dependencies given the program and validates them against Packages.

type Issue

type Issue struct {
	PackageName string
	Position    token.Position
}

Issue with the package with PackageName at the Position.

type ListType

type ListType int

ListType states what kind of list is passed in.

const (
	// LTBlacklist states the list given is a blacklist. (default)
	LTBlacklist ListType = iota
	// LTWhitelist states the list given is a whitelist.
	LTWhitelist
)

type RootChecker

type RootChecker struct {
	// contains filtered or unexported fields
}

RootChecker checks if import paths point to root packages.

func NewRootChecker

func NewRootChecker(buildCtx *build.Context) *RootChecker

NewRootChecker creates a new RootChecker instance using the build.Context given, or build.Default.

func (*RootChecker) IsRoot

func (rc *RootChecker) IsRoot(path, sourceDir string) (bool, error)

IsRoot checks if the given import path (imported from sourceDir) points to a a root package. Subsequent calls with the same arguments are cached. This is not thread-safe.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL