49 lines
985 B
Go
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
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|