diff --git a/parser/parser.go b/parser/parser.go index 1c0b94ca..d92b7723 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -89,3 +89,12 @@ func (p *Parser) Parse(fname string, isDir bool) error { } return nil } + +// fixes vendored paths +func fixPkgPathVendoring(pkgPath string) string { + const vendor = "/vendor/" + if i := strings.LastIndex(pkgPath, vendor); i != -1 { + return pkgPath[i+len(vendor):] + } + return pkgPath +} diff --git a/parser/parser_unix.go b/parser/parser_unix.go index a1b9d84d..01f3e431 100644 --- a/parser/parser_unix.go +++ b/parser/parser_unix.go @@ -22,9 +22,9 @@ func getPkgPath(fname string, isDir bool) (string, error) { prefix := path.Join(p, "src") + "/" if rel := strings.TrimPrefix(fname, prefix); rel != fname { if !isDir { - return path.Dir(rel), nil + return fixPkgPathVendoring(path.Dir(rel)), nil } else { - return path.Clean(rel), nil + return fixPkgPathVendoring(path.Clean(rel)), nil } } } diff --git a/parser/parser_windows.go b/parser/parser_windows.go index 64974aa9..47c9356c 100644 --- a/parser/parser_windows.go +++ b/parser/parser_windows.go @@ -1,37 +1,37 @@ -package parser - -import ( - "fmt" - "os" - "path" - "strings" -) - -func normalizePath(path string) string { - return strings.Replace(path, "\\", "/", -1) -} - -func getPkgPath(fname string, isDir bool) (string, error) { - if !path.IsAbs(fname) { - pwd, err := os.Getwd() - if err != nil { - return "", err - } - fname = path.Join(pwd, fname) - } - - fname = normalizePath(fname) - - for _, p := range strings.Split(os.Getenv("GOPATH"), ";") { - prefix := path.Join(normalizePath(p), "src") + "/" - if rel := strings.TrimPrefix(fname, prefix); rel != fname { - if !isDir { - return path.Dir(rel), nil - } else { - return path.Clean(rel), nil - } - } - } - - return "", fmt.Errorf("file '%v' is not in GOPATH", fname) -} +package parser + +import ( + "fmt" + "os" + "path" + "strings" +) + +func normalizePath(path string) string { + return strings.Replace(path, "\\", "/", -1) +} + +func getPkgPath(fname string, isDir bool) (string, error) { + if !path.IsAbs(fname) { + pwd, err := os.Getwd() + if err != nil { + return "", err + } + fname = path.Join(pwd, fname) + } + + fname = normalizePath(fname) + + for _, p := range strings.Split(os.Getenv("GOPATH"), ";") { + prefix := path.Join(normalizePath(p), "src") + "/" + if rel := strings.TrimPrefix(fname, prefix); rel != fname { + if !isDir { + return fixPkgPathVendoring(path.Dir(rel)), nil + } else { + return fixPkgPathVendoring(path.Clean(rel)), nil + } + } + } + + return "", fmt.Errorf("file '%v' is not in GOPATH", fname) +}