func (w *PkgWalker) LookupImport(pkg *types.Package, pkgInfo *types.Info, cursor *FileCursor, is *ast.ImportSpec) []*Doc { fpath, err := strconv.Unquote(is.Path.Value) if err != nil { return []*Doc{} } ret := []*Doc{} if w.findDef { fpos := w.fset.Position(is.Pos()) ret = append(ret, &Doc{ Pkg: pkg.Name(), Src: "", Name: is.Name.Name, Kind: "package", Fn: fpos.Filename, Row: fpos.Line - 1, Col: fpos.Column - 1, }) fmt.Println(fpos) } fbase := fpath pos := strings.LastIndexAny(fpath, "./-\\") if pos != -1 { fbase = fpath[pos+1:] } var fname string if is.Name != nil { fname = is.Name.Name } else { fname = fbase } if w.findInfo { if fname == fpath { fmt.Printf("package %s\n", fname) } else { fmt.Printf("package %s (\"%s\")\n", fname, fpath) } } if !w.findUse { return ret } fid := pkg.Path() + "." + fname var usages []int for id, obj := range pkgInfo.Uses { if obj != nil && obj.Id() == fid { //!= nil && cursorObj.Pos() == obj.Pos() { usages = append(usages, int(id.Pos())) } } (sort.IntSlice(usages)).Sort() for _, pos := range usages { fpos := w.fset.Position(token.Pos(pos)) ret = append(ret, &Doc{ Pkg: pkg.Name(), Src: "", Name: fname, Kind: "package", Fn: fpos.Filename, Row: fpos.Line - 1, Col: fpos.Column - 1, }) if typeVerbose { log.Println(fpos) } } return ret }