diff options
| author | Taras Madan <tarasmadan@google.com> | 2022-09-05 14:27:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-05 12:27:54 +0000 |
| commit | b2f2446b46bf02821d90ebedadae2bf7ae0e880e (patch) | |
| tree | 923cf42842918d6bebca1d6bbdc08abed54d274d /vendor/github.com/OpenPeeDeeP | |
| parent | e6654faff4bcca4be92e9a8596fd4b77f747c39e (diff) | |
go.mod, vendor: update (#3358)
* go.mod, vendor: remove unnecessary dependencies
Commands:
1. go mod tidy
2. go mod vendor
* go.mod, vendor: update cloud.google.com/go
Commands:
1. go get -u cloud.google.com/go
2. go mod tidy
3. go mod vendor
* go.mod, vendor: update cloud.google.com/*
Commands:
1. go get -u cloud.google.com/storage cloud.google.com/logging
2. go mod tidy
3. go mod vendor
* go.mod, .golangci.yml, vendor: update *lint*
Commands:
1. go get -u golang.org/x/tools github.com/golangci/golangci-lint@v1.47.0
2. go mod tidy
3. go mod vendor
4. edit .golangci.yml to suppress new errors (resolved in the same PR later)
* all: fix lint errors
hash.go: copy() recommended by gosimple
parse.go: ent is never nil
verifier.go: signal.Notify() with unbuffered channel is bad. Have no idea why.
* .golangci.yml: adjust godot rules
check-all is deprecated, but still work
if you're hesitating too - I'll remove this commit
Diffstat (limited to 'vendor/github.com/OpenPeeDeeP')
| -rw-r--r-- | vendor/github.com/OpenPeeDeeP/depguard/README.md | 46 | ||||
| -rw-r--r-- | vendor/github.com/OpenPeeDeeP/depguard/depguard.go | 80 | ||||
| -rw-r--r-- | vendor/github.com/OpenPeeDeeP/depguard/go.mod | 1 | ||||
| -rw-r--r-- | vendor/github.com/OpenPeeDeeP/depguard/go.sum | 10 |
4 files changed, 121 insertions, 16 deletions
diff --git a/vendor/github.com/OpenPeeDeeP/depguard/README.md b/vendor/github.com/OpenPeeDeeP/depguard/README.md index d704ce6ad..b9422757d 100644 --- a/vendor/github.com/OpenPeeDeeP/depguard/README.md +++ b/vendor/github.com/OpenPeeDeeP/depguard/README.md @@ -1,7 +1,7 @@ # 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. +can also deny a list of packages 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. @@ -24,7 +24,7 @@ The following is an example configuration file. ```json { - "type": "whitelist", + "type": "allowlist", "packages": ["github.com/OpenPeeDeeP/depguard"], "packageErrorMessages": { "github.com/OpenPeeDeeP/depguards": "Please use \"github.com/OpenPeeDeeP/depguard\"," @@ -34,14 +34,48 @@ The following is an example configuration file. } ``` -- `type` can be either `whitelist` or `blacklist`. This check is case insensitive. - If not specified the default is `blacklist`. +- `type` can be either `allowlist` or `denylist`. This check is case insensitive. + If not specified the default is `denylist`. The values `whitelist` and `blacklist` + are also accepted for backwards compatibility. - `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. +- Set `includeGoStdLib` (`includeGoRoot` for backwards compatibility) to true if you want to check the list against standard lib. If not specified the default is false. +### Ignore File Rules + +The configuration also allows us to specify rules to ignore certain files considered by the linter. This means that we need not apply package import checks across our entire code base. + +For example, consider the following configuration to block a test package: +```json +{ + "type": "denylist", + "packages": ["github.com/stretchr/testify"], + "inTests": ["github.com/stretchr/testify"] +} +``` + +We can use a `ignoreFileRules` field to write a configuration that only considers test files: +```json +{ + "type": "denylist", + "packages": ["github.com/stretchr/testify"], + "ignoreFileRules": ["!**/*_test.go"] +} +``` + +Or if we wanted to consider only non-test files: +```json +{ + "type": "denylist", + "packages": ["github.com/stretchr/testify"], + "ignoreFileRules": ["**/*_test.go"] +} +``` + +Like the `packages` field, the `ignoreFileRules` field can accept both string prefixes and string glob patterns. Note in the first example above, the use of the `!` character in front of the rule. This is a special character which signals that the linter should negate the rule. This allows for more precise control, but it is only available for glob patterns. + ## Gometalinter The binary installation of this linter can be used with @@ -73,5 +107,5 @@ gometalinter --linter='depguard:depguard -c path/to/config.json:PATH:LINE:COL:ME ## Golangci-lint This linter was built with -[Golangci-lint](https://github.com/golangci/golangci-lint) in mind. It is compatable +[Golangci-lint](https://github.com/golangci/golangci-lint) in mind. It is compatible and read their docs to see how to implement all their linters, including this one. diff --git a/vendor/github.com/OpenPeeDeeP/depguard/depguard.go b/vendor/github.com/OpenPeeDeeP/depguard/depguard.go index 1dbffb7d6..b72754913 100644 --- a/vendor/github.com/OpenPeeDeeP/depguard/depguard.go +++ b/vendor/github.com/OpenPeeDeeP/depguard/depguard.go @@ -25,6 +25,8 @@ const ( // StringToListType makes it easier to turn a string into a ListType. // It assumes that the string representation is lower case. var StringToListType = map[string]ListType{ + "allowlist": LTWhitelist, + "denylist": LTBlacklist, "whitelist": LTWhitelist, "blacklist": LTBlacklist, } @@ -35,6 +37,12 @@ type Issue struct { Position token.Position } +// Wrapper for glob patterns that allows for custom negation +type negatableGlob struct { + g glob.Glob + negate bool +} + // Depguard checks imports to make sure they follow the given list and constraints. type Depguard struct { ListType ListType @@ -48,6 +56,10 @@ type Depguard struct { prefixTestPackages []string globTestPackages []glob.Glob + IgnoreFileRules []string + prefixIgnoreFileRules []string + globIgnoreFileRules []negatableGlob + prefixRoot []string } @@ -69,6 +81,9 @@ func (dg *Depguard) Run(config *loader.Config, prog *loader.Program) ([]*Issue, var issues []*Issue for pkg, positions := range directImports { for _, pos := range positions { + if ignoreFile(pos.Filename, dg.prefixIgnoreFileRules, dg.globIgnoreFileRules) { + continue + } prefixList, globList := dg.prefixPackages, dg.globPackages if len(dg.TestPackages) > 0 && strings.Index(pos.Filename, "_test.go") != -1 { @@ -119,6 +134,32 @@ func (dg *Depguard) initialize(config *loader.Config, prog *loader.Program) erro // Sort the test packages so we can have a faster search in the array sort.Strings(dg.prefixTestPackages) + // parse ignore file rules + for _, rule := range dg.IgnoreFileRules { + if strings.ContainsAny(rule, "!?*[]{}") { + ng := negatableGlob{} + if strings.HasPrefix(rule, "!") { + ng.negate = true + rule = rule[1:] // Strip out the leading '!' + } else { + ng.negate = false + } + + g, err := glob.Compile(rule, '/') + if err != nil { + return err + } + ng.g = g + + dg.globIgnoreFileRules = append(dg.globIgnoreFileRules, ng) + } else { + dg.prefixIgnoreFileRules = append(dg.prefixIgnoreFileRules, rule) + } + } + + // Sort the rules so we can have a faster search in the array + sort.Strings(dg.prefixIgnoreFileRules) + if !dg.IncludeGoRoot { var err error dg.prefixRoot, err = listRootPrefixs(config.Build) @@ -158,30 +199,49 @@ func (dg *Depguard) createImportMap(prog *loader.Program) (map[string][]token.Po return importMap, nil } +func ignoreFile(filename string, prefixList []string, negatableGlobList []negatableGlob) bool { + if strInPrefixList(filename, prefixList) { + return true + } + return strInNegatableGlobList(filename, negatableGlobList) +} + func pkgInList(pkg string, prefixList []string, globList []glob.Glob) bool { - if pkgInPrefixList(pkg, prefixList) { + if strInPrefixList(pkg, prefixList) { return true } - return pkgInGlobList(pkg, globList) + return strInGlobList(pkg, globList) } -func pkgInPrefixList(pkg string, prefixList []string) bool { - // Idx represents where in the package slice the passed in package would go +func strInPrefixList(str string, prefixList []string) bool { + // Idx represents where in the prefix slice the passed in string would go // when sorted. -1 Just means that it would be at the very front of the slice. idx := sort.Search(len(prefixList), func(i int) bool { - return prefixList[i] > pkg + return prefixList[i] > str }) - 1 - // This means that the package passed in has no way to be prefixed by anything - // in the package list as it is already smaller then everything + // This means that the string passed in has no way to be prefixed by anything + // in the prefix list as it is already smaller then everything if idx == -1 { return false } - return strings.HasPrefix(pkg, prefixList[idx]) + return strings.HasPrefix(str, prefixList[idx]) } -func pkgInGlobList(pkg string, globList []glob.Glob) bool { +func strInGlobList(str string, globList []glob.Glob) bool { for _, g := range globList { - if g.Match(pkg) { + if g.Match(str) { + return true + } + } + return false +} + +func strInNegatableGlobList(str string, negatableGlobList []negatableGlob) bool { + for _, ng := range negatableGlobList { + // Return true when: + // - Match is true and negate is off + // - Match is false and negate is on + if ng.g.Match(str) != ng.negate { return true } } diff --git a/vendor/github.com/OpenPeeDeeP/depguard/go.mod b/vendor/github.com/OpenPeeDeeP/depguard/go.mod index 5ad37edb8..68daf00d7 100644 --- a/vendor/github.com/OpenPeeDeeP/depguard/go.mod +++ b/vendor/github.com/OpenPeeDeeP/depguard/go.mod @@ -5,5 +5,6 @@ go 1.13 require ( github.com/gobwas/glob v0.2.3 github.com/kisielk/gotool v1.0.0 + github.com/stretchr/testify v1.7.0 // indirect golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b ) diff --git a/vendor/github.com/OpenPeeDeeP/depguard/go.sum b/vendor/github.com/OpenPeeDeeP/depguard/go.sum index 24693c36d..11a8c1c4a 100644 --- a/vendor/github.com/OpenPeeDeeP/depguard/go.sum +++ b/vendor/github.com/OpenPeeDeeP/depguard/go.sum @@ -1,6 +1,16 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b h1:7tibmaEqrQYA+q6ri7NQjuxqSwechjtDHKq6/e85S38= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |
