Upgrade depguard to fix performance issue with go modules (#698)
* Upgrade depguard to fix performance issue with go modules * Fix linting error of unused function
This commit is contained in:
parent
fc8d614b2b
commit
9161de5b7d
@ -48,6 +48,7 @@ linters:
|
|||||||
enable:
|
enable:
|
||||||
- bodyclose
|
- bodyclose
|
||||||
- deadcode
|
- deadcode
|
||||||
|
- depguard
|
||||||
- dupl
|
- dupl
|
||||||
- errcheck
|
- errcheck
|
||||||
# - funlen - TODO: enable it when golangci.com will support it.
|
# - funlen - TODO: enable it when golangci.com will support it.
|
||||||
@ -79,7 +80,6 @@ linters:
|
|||||||
# - whitespace - TODO: enable it when golangci.com will support it.
|
# - whitespace - TODO: enable it when golangci.com will support it.
|
||||||
|
|
||||||
# don't enable:
|
# don't enable:
|
||||||
# - depguard - until https://github.com/OpenPeeDeeP/depguard/issues/7 gets fixed
|
|
||||||
# - maligned,prealloc
|
# - maligned,prealloc
|
||||||
# - gochecknoglobals
|
# - gochecknoglobals
|
||||||
|
|
||||||
|
4
Makefile
4
Makefile
@ -14,9 +14,7 @@ clean:
|
|||||||
.PHONY: fast_build build build_race clean
|
.PHONY: fast_build build build_race clean
|
||||||
|
|
||||||
# Test
|
# Test
|
||||||
|
test: export GO111MODULE = on
|
||||||
# until https://github.com/OpenPeeDeeP/depguard/issues/7 fixed
|
|
||||||
test: export GO111MODULE = off
|
|
||||||
test: export GOLANGCI_LINT_INSTALLED = true
|
test: export GOLANGCI_LINT_INSTALLED = true
|
||||||
|
|
||||||
test: build
|
test: build
|
||||||
|
@ -907,6 +907,7 @@ linters:
|
|||||||
enable:
|
enable:
|
||||||
- bodyclose
|
- bodyclose
|
||||||
- deadcode
|
- deadcode
|
||||||
|
- depguard
|
||||||
- dupl
|
- dupl
|
||||||
- errcheck
|
- errcheck
|
||||||
# - funlen - TODO: enable it when golangci.com will support it.
|
# - funlen - TODO: enable it when golangci.com will support it.
|
||||||
@ -938,7 +939,6 @@ linters:
|
|||||||
# - whitespace - TODO: enable it when golangci.com will support it.
|
# - whitespace - TODO: enable it when golangci.com will support it.
|
||||||
|
|
||||||
# don't enable:
|
# don't enable:
|
||||||
# - depguard - until https://github.com/OpenPeeDeeP/depguard/issues/7 gets fixed
|
|
||||||
# - maligned,prealloc
|
# - maligned,prealloc
|
||||||
# - gochecknoglobals
|
# - gochecknoglobals
|
||||||
|
|
||||||
|
3
go.mod
3
go.mod
@ -3,13 +3,12 @@ module github.com/golangci/golangci-lint
|
|||||||
go 1.11
|
go 1.11
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/OpenPeeDeeP/depguard v1.0.0
|
github.com/OpenPeeDeeP/depguard v1.0.1
|
||||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
||||||
github.com/fatih/color v1.7.0
|
github.com/fatih/color v1.7.0
|
||||||
github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db
|
github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db
|
||||||
github.com/go-lintpack/lintpack v0.5.2
|
github.com/go-lintpack/lintpack v0.5.2
|
||||||
github.com/go-ole/go-ole v1.2.4 // indirect
|
github.com/go-ole/go-ole v1.2.4 // indirect
|
||||||
github.com/gobwas/glob v0.2.3 // indirect
|
|
||||||
github.com/golang/mock v1.3.1
|
github.com/golang/mock v1.3.1
|
||||||
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2
|
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2
|
||||||
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a
|
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a
|
||||||
|
4
go.sum
4
go.sum
@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
|||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/OpenPeeDeeP/depguard v1.0.0 h1:k9QF73nrHT3nPLz3lu6G5s+3Hi8Je36ODr1F5gjAXXM=
|
github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us=
|
||||||
github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o=
|
github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM=
|
||||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
|
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
|
||||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
|
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
|
@ -92,8 +92,6 @@ func NewRunner(astCache *astcache.Cache, cfg *config.Config, log logutils.Log, g
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func someUnusedFunc() {}
|
|
||||||
|
|
||||||
type lintRes struct {
|
type lintRes struct {
|
||||||
linter *linter.Config
|
linter *linter.Config
|
||||||
err error
|
err error
|
||||||
|
2
vendor/github.com/OpenPeeDeeP/depguard/.gitignore
generated
vendored
2
vendor/github.com/OpenPeeDeeP/depguard/.gitignore
generated
vendored
@ -10,3 +10,5 @@
|
|||||||
|
|
||||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
*.out
|
*.out
|
||||||
|
|
||||||
|
.idea
|
||||||
|
43
vendor/github.com/OpenPeeDeeP/depguard/Gopkg.lock
generated
vendored
43
vendor/github.com/OpenPeeDeeP/depguard/Gopkg.lock
generated
vendored
@ -1,43 +0,0 @@
|
|||||||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
|
||||||
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/gobwas/glob"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"compiler",
|
|
||||||
"match",
|
|
||||||
"syntax",
|
|
||||||
"syntax/ast",
|
|
||||||
"syntax/lexer",
|
|
||||||
"util/runes",
|
|
||||||
"util/strings"
|
|
||||||
]
|
|
||||||
revision = "5ccd90ef52e1e632236f7326478d4faa74f99438"
|
|
||||||
version = "v0.2.3"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
name = "github.com/kisielk/gotool"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"internal/load"
|
|
||||||
]
|
|
||||||
revision = "80517062f582ea3340cd4baf70e86d539ae7d84d"
|
|
||||||
version = "v1.0.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "golang.org/x/tools"
|
|
||||||
packages = [
|
|
||||||
"go/ast/astutil",
|
|
||||||
"go/buildutil",
|
|
||||||
"go/loader"
|
|
||||||
]
|
|
||||||
revision = "a5b4c53f6e8bdcafa95a94671bf2d1203365858b"
|
|
||||||
|
|
||||||
[solve-meta]
|
|
||||||
analyzer-name = "dep"
|
|
||||||
analyzer-version = 1
|
|
||||||
inputs-digest = "7dd6ca0cba46360ae2d416534019ea1431850a15a69336f47a1098633d08e7b4"
|
|
||||||
solver-name = "gps-cdcl"
|
|
||||||
solver-version = 1
|
|
43
vendor/github.com/OpenPeeDeeP/depguard/Gopkg.toml
generated
vendored
43
vendor/github.com/OpenPeeDeeP/depguard/Gopkg.toml
generated
vendored
@ -1,43 +0,0 @@
|
|||||||
# Gopkg.toml example
|
|
||||||
#
|
|
||||||
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
|
|
||||||
# for detailed Gopkg.toml documentation.
|
|
||||||
#
|
|
||||||
# required = ["github.com/user/thing/cmd/thing"]
|
|
||||||
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
|
||||||
#
|
|
||||||
# [[constraint]]
|
|
||||||
# name = "github.com/user/project"
|
|
||||||
# version = "1.0.0"
|
|
||||||
#
|
|
||||||
# [[constraint]]
|
|
||||||
# name = "github.com/user/project2"
|
|
||||||
# branch = "dev"
|
|
||||||
# source = "github.com/myfork/project2"
|
|
||||||
#
|
|
||||||
# [[override]]
|
|
||||||
# name = "github.com/x/y"
|
|
||||||
# version = "2.4.0"
|
|
||||||
#
|
|
||||||
# [prune]
|
|
||||||
# non-go = false
|
|
||||||
# go-tests = true
|
|
||||||
# unused-packages = true
|
|
||||||
|
|
||||||
ignored = ["github.com/davecgh/go-spew/spew"]
|
|
||||||
|
|
||||||
[prune]
|
|
||||||
go-tests = true
|
|
||||||
unused-packages = true
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/kisielk/gotool"
|
|
||||||
version = "1.0.0"
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
branch = "master"
|
|
||||||
name = "golang.org/x/tools"
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/gobwas/glob"
|
|
||||||
version = "0.2.3"
|
|
16
vendor/github.com/OpenPeeDeeP/depguard/README.md
generated
vendored
16
vendor/github.com/OpenPeeDeeP/depguard/README.md
generated
vendored
@ -25,21 +25,21 @@ The following is an example configuration file.
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"type": "whitelist",
|
"type": "whitelist",
|
||||||
"packages": [
|
"packages": ["github.com/OpenPeeDeeP/depguard"],
|
||||||
"github.com/OpenPeeDeeP/depguard"
|
"packageErrorMessages": {
|
||||||
],
|
"github.com/OpenPeeDeeP/depguards": "Please use \"github.com/OpenPeeDeeP/depguard\","
|
||||||
"inTests": [
|
},
|
||||||
"github.com/stretchr/testify"
|
"inTests": ["github.com/stretchr/testify"],
|
||||||
],
|
"includeGoStdLib": true
|
||||||
"includeGoRoot": true
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- `type` can be either `whitelist` or `blacklist`. This check is case insensitive.
|
- `type` can be either `whitelist` or `blacklist`. This check is case insensitive.
|
||||||
If not specified the default is `blacklist`.
|
If not specified the default is `blacklist`.
|
||||||
- `packages` is a list of packages for the list type specified.
|
- `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.
|
- `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.
|
- 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.
|
If not specified the default is false.
|
||||||
|
|
||||||
## Gometalinter
|
## Gometalinter
|
||||||
|
88
vendor/github.com/OpenPeeDeeP/depguard/depguard.go
generated
vendored
88
vendor/github.com/OpenPeeDeeP/depguard/depguard.go
generated
vendored
@ -1,8 +1,10 @@
|
|||||||
package depguard
|
package depguard
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"go/build"
|
||||||
"go/token"
|
"go/token"
|
||||||
"os"
|
"io/ioutil"
|
||||||
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -46,8 +48,7 @@ type Depguard struct {
|
|||||||
prefixTestPackages []string
|
prefixTestPackages []string
|
||||||
globTestPackages []glob.Glob
|
globTestPackages []glob.Glob
|
||||||
|
|
||||||
rootChecker *RootChecker
|
prefixRoot []string
|
||||||
cwd string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run checks for dependencies given the program and validates them against
|
// Run checks for dependencies given the program and validates them against
|
||||||
@ -86,18 +87,6 @@ func (dg *Depguard) Run(config *loader.Config, prog *loader.Program) ([]*Issue,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (dg *Depguard) initialize(config *loader.Config, prog *loader.Program) error {
|
func (dg *Depguard) initialize(config *loader.Config, prog *loader.Program) error {
|
||||||
// Try and get the current working directory
|
|
||||||
dg.cwd = config.Cwd
|
|
||||||
if dg.cwd == "" {
|
|
||||||
var err error
|
|
||||||
dg.cwd, err = os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dg.rootChecker = NewRootChecker(config.Build)
|
|
||||||
|
|
||||||
// parse ordinary guarded packages
|
// parse ordinary guarded packages
|
||||||
for _, pkg := range dg.Packages {
|
for _, pkg := range dg.Packages {
|
||||||
if strings.ContainsAny(pkg, "!?*[]{}") {
|
if strings.ContainsAny(pkg, "!?*[]{}") {
|
||||||
@ -130,6 +119,14 @@ 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 the test packages so we can have a faster search in the array
|
||||||
sort.Strings(dg.prefixTestPackages)
|
sort.Strings(dg.prefixTestPackages)
|
||||||
|
|
||||||
|
if !dg.IncludeGoRoot {
|
||||||
|
var err error
|
||||||
|
dg.prefixRoot, err = listRootPrefixs(config.Build)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,15 +140,9 @@ func (dg *Depguard) createImportMap(prog *loader.Program) (map[string][]token.Po
|
|||||||
// This will filter out GoRoot depending on the Depguard.IncludeGoRoot
|
// This will filter out GoRoot depending on the Depguard.IncludeGoRoot
|
||||||
for _, fileImport := range file.Imports {
|
for _, fileImport := range file.Imports {
|
||||||
fileImportPath := cleanBasicLitString(fileImport.Path.Value)
|
fileImportPath := cleanBasicLitString(fileImport.Path.Value)
|
||||||
if !dg.IncludeGoRoot {
|
if !dg.IncludeGoRoot && dg.isRoot(fileImportPath) {
|
||||||
isRoot, err := dg.rootChecker.IsRoot(fileImportPath, dg.cwd)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if isRoot {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
position := prog.Fset.Position(fileImport.Pos())
|
position := prog.Fset.Position(fileImport.Pos())
|
||||||
positions, found := importMap[fileImportPath]
|
positions, found := importMap[fileImportPath]
|
||||||
if !found {
|
if !found {
|
||||||
@ -167,14 +158,14 @@ func (dg *Depguard) createImportMap(prog *loader.Program) (map[string][]token.Po
|
|||||||
return importMap, nil
|
return importMap, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dg *Depguard) pkgInList(pkg string, prefixList []string, globList []glob.Glob) bool {
|
func pkgInList(pkg string, prefixList []string, globList []glob.Glob) bool {
|
||||||
if dg.pkgInPrefixList(pkg, prefixList) {
|
if pkgInPrefixList(pkg, prefixList) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return dg.pkgInGlobList(pkg, globList)
|
return pkgInGlobList(pkg, globList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dg *Depguard) pkgInPrefixList(pkg string, prefixList []string) bool {
|
func pkgInPrefixList(pkg string, prefixList []string) bool {
|
||||||
// Idx represents where in the package slice the passed in package would go
|
// Idx represents where in the package slice the passed in package would go
|
||||||
// when sorted. -1 Just means that it would be at the very front of the slice.
|
// 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 {
|
idx := sort.Search(len(prefixList), func(i int) bool {
|
||||||
@ -188,7 +179,7 @@ func (dg *Depguard) pkgInPrefixList(pkg string, prefixList []string) bool {
|
|||||||
return strings.HasPrefix(pkg, prefixList[idx])
|
return strings.HasPrefix(pkg, prefixList[idx])
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dg *Depguard) pkgInGlobList(pkg string, globList []glob.Glob) bool {
|
func pkgInGlobList(pkg string, globList []glob.Glob) bool {
|
||||||
for _, g := range globList {
|
for _, g := range globList {
|
||||||
if g.Match(pkg) {
|
if g.Match(pkg) {
|
||||||
return true
|
return true
|
||||||
@ -201,9 +192,50 @@ func (dg *Depguard) pkgInGlobList(pkg string, globList []glob.Glob) bool {
|
|||||||
// y | | x
|
// y | | x
|
||||||
// n | x |
|
// n | x |
|
||||||
func (dg *Depguard) flagIt(pkg string, prefixList []string, globList []glob.Glob) bool {
|
func (dg *Depguard) flagIt(pkg string, prefixList []string, globList []glob.Glob) bool {
|
||||||
return dg.pkgInList(pkg, prefixList, globList) == (dg.ListType == LTBlacklist)
|
return pkgInList(pkg, prefixList, globList) == (dg.ListType == LTBlacklist)
|
||||||
}
|
}
|
||||||
|
|
||||||
func cleanBasicLitString(value string) string {
|
func cleanBasicLitString(value string) string {
|
||||||
return strings.Trim(value, "\"\\")
|
return strings.Trim(value, "\"\\")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We can do this as all imports that are not root are either prefixed with a domain
|
||||||
|
// or prefixed with `./` or `/` to dictate it is a local file reference
|
||||||
|
func listRootPrefixs(buildCtx *build.Context) ([]string, error) {
|
||||||
|
if buildCtx == nil {
|
||||||
|
buildCtx = &build.Default
|
||||||
|
}
|
||||||
|
root := path.Join(buildCtx.GOROOT, "src")
|
||||||
|
fs, err := ioutil.ReadDir(root)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var pkgPrefix []string
|
||||||
|
for _, f := range fs {
|
||||||
|
if !f.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
pkgPrefix = append(pkgPrefix, f.Name())
|
||||||
|
}
|
||||||
|
return pkgPrefix, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dg *Depguard) isRoot(importPath string) bool {
|
||||||
|
// Idx represents where in the package slice the passed in package would go
|
||||||
|
// when sorted. -1 Just means that it would be at the very front of the slice.
|
||||||
|
idx := sort.Search(len(dg.prefixRoot), func(i int) bool {
|
||||||
|
return dg.prefixRoot[i] > importPath
|
||||||
|
}) - 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
|
||||||
|
if idx == -1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// if it is prefixed by a root prefix we need to check if it is an exact match
|
||||||
|
// or prefix with `/` as this could return false posative if the domain was
|
||||||
|
// `archive.com` for example as `archive` is a go root package.
|
||||||
|
if strings.HasPrefix(importPath, dg.prefixRoot[idx]) {
|
||||||
|
return strings.HasPrefix(importPath, dg.prefixRoot[idx]+"/") || importPath == dg.prefixRoot[idx]
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
9
vendor/github.com/OpenPeeDeeP/depguard/go.mod
generated
vendored
Normal file
9
vendor/github.com/OpenPeeDeeP/depguard/go.mod
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
module github.com/OpenPeeDeeP/depguard
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gobwas/glob v0.2.3
|
||||||
|
github.com/kisielk/gotool v1.0.0
|
||||||
|
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b
|
||||||
|
)
|
6
vendor/github.com/OpenPeeDeeP/depguard/go.sum
generated
vendored
Normal file
6
vendor/github.com/OpenPeeDeeP/depguard/go.sum
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
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=
|
||||||
|
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=
|
52
vendor/github.com/OpenPeeDeeP/depguard/rootchecker.go
generated
vendored
52
vendor/github.com/OpenPeeDeeP/depguard/rootchecker.go
generated
vendored
@ -1,52 +0,0 @@
|
|||||||
package depguard
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go/build"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RootChecker checks if import paths point to root packages.
|
|
||||||
type RootChecker struct {
|
|
||||||
buildCtx *build.Context
|
|
||||||
cache map[string]bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRootChecker creates a new RootChecker instance using the build.Context
|
|
||||||
// given, or build.Default.
|
|
||||||
func NewRootChecker(buildCtx *build.Context) *RootChecker {
|
|
||||||
// Use the &build.Default if build.Context is not specified
|
|
||||||
ctx := buildCtx
|
|
||||||
if ctx == nil {
|
|
||||||
ctx = &build.Default
|
|
||||||
}
|
|
||||||
return &RootChecker{
|
|
||||||
buildCtx: ctx,
|
|
||||||
cache: make(map[string]bool, 0),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
func (rc *RootChecker) IsRoot(path, sourceDir string) (bool, error) {
|
|
||||||
key := path + ":::" + sourceDir
|
|
||||||
isRoot, ok := rc.cache[key]
|
|
||||||
if ok {
|
|
||||||
return isRoot, nil
|
|
||||||
}
|
|
||||||
isRoot, err := rc.calcIsRoot(path, sourceDir)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
rc.cache[key] = isRoot
|
|
||||||
return isRoot, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// calcIsRoot performs the call to the build context to check if
|
|
||||||
// the import path points to a root package.
|
|
||||||
func (rc *RootChecker) calcIsRoot(path, sourceDir string) (bool, error) {
|
|
||||||
pkg, err := rc.buildCtx.Import(path, sourceDir, build.FindOnly)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return pkg.Goroot, nil
|
|
||||||
}
|
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -1,6 +1,6 @@
|
|||||||
# github.com/BurntSushi/toml v0.3.1
|
# github.com/BurntSushi/toml v0.3.1
|
||||||
github.com/BurntSushi/toml
|
github.com/BurntSushi/toml
|
||||||
# github.com/OpenPeeDeeP/depguard v1.0.0
|
# github.com/OpenPeeDeeP/depguard v1.0.1
|
||||||
github.com/OpenPeeDeeP/depguard
|
github.com/OpenPeeDeeP/depguard
|
||||||
# github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d
|
# github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d
|
||||||
github.com/StackExchange/wmi
|
github.com/StackExchange/wmi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user