2018-11-07 09:11:08 +03:00

49 lines
985 B
Go

package astwalk
import (
"go/ast"
)
type docCommentWalker struct {
visitor DocCommentVisitor
}
func (w *docCommentWalker) WalkFile(f *ast.File) {
for _, decl := range f.Decls {
switch decl := decl.(type) {
case *ast.FuncDecl:
if decl.Doc != nil {
w.visitor.VisitDocComment(decl.Doc)
}
case *ast.GenDecl:
if decl.Doc != nil {
w.visitor.VisitDocComment(decl.Doc)
}
for _, spec := range decl.Specs {
switch spec := spec.(type) {
case *ast.ImportSpec:
if spec.Doc != nil {
w.visitor.VisitDocComment(spec.Doc)
}
case *ast.ValueSpec:
if spec.Doc != nil {
w.visitor.VisitDocComment(spec.Doc)
}
case *ast.TypeSpec:
if spec.Doc != nil {
w.visitor.VisitDocComment(spec.Doc)
}
ast.Inspect(spec.Type, func(n ast.Node) bool {
if n, ok := n.(*ast.Field); ok {
if n.Doc != nil {
w.visitor.VisitDocComment(n.Doc)
}
}
return true
})
}
}
}
}
}