diff options
author | Michael Muré <batolettre@gmail.com> | 2019-04-10 01:48:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-10 01:48:53 +0200 |
commit | 9722d7c9eca28b1710e50ac9075fd11d0db0606a (patch) | |
tree | e46d372dcd1e68fb067101778eb0a5f13f745ad0 /vendor/github.com/99designs/gqlgen/internal/code/imports.go | |
parent | 30efc99f4493f3a09e94bf322cbf8ef844beea13 (diff) | |
parent | 4d14cadde45ac807afcbfd37200e86c4de6bf8db (diff) | |
download | git-bug-9722d7c9eca28b1710e50ac9075fd11d0db0606a.tar.gz |
Merge pull request #123 from A-Hilaly/graphql
Upgrade gqlgen version to 0.8.3
Diffstat (limited to 'vendor/github.com/99designs/gqlgen/internal/code/imports.go')
-rw-r--r-- | vendor/github.com/99designs/gqlgen/internal/code/imports.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/github.com/99designs/gqlgen/internal/code/imports.go b/vendor/github.com/99designs/gqlgen/internal/code/imports.go new file mode 100644 index 00000000..2384e87d --- /dev/null +++ b/vendor/github.com/99designs/gqlgen/internal/code/imports.go @@ -0,0 +1,60 @@ +package code + +import ( + "errors" + "path/filepath" + "sync" + + "golang.org/x/tools/go/packages" +) + +var pathForDirCache = sync.Map{} + +// ImportPathFromDir takes an *absolute* path and returns a golang import path for the package, and returns an error if it isn't on the gopath +func ImportPathForDir(dir string) string { + if v, ok := pathForDirCache.Load(dir); ok { + return v.(string) + } + + p, _ := packages.Load(&packages.Config{ + Dir: dir, + }, ".") + + // If the dir dosent exist yet, keep walking up the directory tree trying to find a match + if len(p) != 1 { + parent, err := filepath.Abs(filepath.Join(dir, "..")) + if err != nil { + panic(err) + } + // Walked all the way to the root and didnt find anything :'( + if parent == dir { + return "" + } + return ImportPathForDir(parent) + "/" + filepath.Base(dir) + } + + pathForDirCache.Store(dir, p[0].PkgPath) + + return p[0].PkgPath +} + +var nameForPackageCache = sync.Map{} + +func NameForPackage(importPath string) string { + if importPath == "" { + panic(errors.New("import path can not be empty")) + } + if v, ok := nameForPackageCache.Load(importPath); ok { + return v.(string) + } + importPath = QualifyPackagePath(importPath) + p, _ := packages.Load(nil, importPath) + + if len(p) != 1 || p[0].Name == "" { + return SanitizePackageName(filepath.Base(importPath)) + } + + nameForPackageCache.Store(importPath, p[0].Name) + + return p[0].Name +} |