func (p *PackageView) PrintVars(w io.Writer, vars []*doc.Value, level int, tag string, tag_folder string) { if len(tag_folder) > 0 && len(vars) > 0 { if tag_folder == tag_value_folder { fmt.Fprintf(w, "%d,%s,Variables\n", level, tag_folder) } else if tag_folder == tag_const_folder { fmt.Fprintf(w, "%d,%s,Constants\n", level, tag_folder) } level++ } for _, v := range vars { if v.Decl == nil { continue } for _, s := range v.Decl.Specs { if m, ok := s.(*ast.ValueSpec); ok { pos := p.fset.Position(m.Pos()) for i := 0; i < len(m.Names); i++ { if p.expr && m.Type != nil { fmt.Fprintf(w, "%d,%s,%s,%s@%s\n", level, tag, m.Names[i], p.posText(pos), types.ExprString(m.Type)) } else { fmt.Fprintf(w, "%d,%s,%s,%s\n", level, tag, m.Names[i], p.posText(pos)) } } } } } }
func (p *PackageView) printFuncsHelper(w io.Writer, funcs []*doc.Func, level int, tag string, tag_folder string) { for _, f := range funcs { pos := p.fset.Position(f.Decl.Pos()) if p.expr { fmt.Fprintf(w, "%d,%s,%s,%s@%s\n", level, tag, f.Name, p.posText(pos), types.ExprString(f.Decl.Type)) } else { fmt.Fprintf(w, "%d,%s,%s,%s\n", level, tag, f.Name, p.posText(pos)) } } }
func (p *PackageView) PrintTypeFields(w io.Writer, decl *ast.GenDecl, level int) { spec, ok := decl.Specs[0].(*ast.TypeSpec) if ok == false { return } switch d := spec.Type.(type) { case *ast.StructType: for _, list := range d.Fields.List { if list.Names == nil { continue } for _, m := range list.Names { pos := p.fset.Position(m.Pos()) if list.Type != nil { fmt.Fprintf(w, "%d,%s,%s,%s@%s\n", level, tag_type_value, m.Name, p.posText(pos), types.ExprString(list.Type)) } else { fmt.Fprintf(w, "%d,%s,%s,%s\n", level, tag_type_value, m.Name, p.posText(pos)) } } } case *ast.InterfaceType: for _, list := range d.Methods.List { if list.Names == nil { continue } for _, m := range list.Names { pos := p.fset.Position(m.Pos()) fmt.Fprintf(w, "%d,%s,%s,%s\n", level, tag_type_method, m.Name, p.posText(pos)) } } } }