Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "go/ast"
- "go/parser"
- "go/token"
- "os"
- )
- func main() {
- fileset := token.NewFileSet()
- files, err := parser.ParseDir(fileset, "./testfiles", filterNothing, 0)
- if err != nil {
- panic(err)
- }
- for filename, astPackage := range files {
- fmt.Printf("directory: %+v\n", filename)
- fmt.Printf("package: %+v\n", astPackage.Name)
- for filename, file := range astPackage.Files {
- fmt.Printf("file: %s\n", filename)
- for _, dec := range file.Decls {
- parseDec(dec)
- }
- }
- }
- }
- func parseDec(dec ast.Decl) {
- switch decType := dec.(type) {
- case *ast.GenDecl:
- parseGenDecl(dec)
- case *ast.FuncDecl:
- parseFuncDecl(dec)
- default:
- panic(fmt.Sprintf("unsupported decType %s", decType))
- }
- }
- func parseFuncDecl(dec ast.Decl) {
- funcDec := dec.(*ast.FuncDecl)
- fmt.Printf("function definition for %s\n", funcDec.Name)
- }
- func parseGenDecl(dec ast.Decl) {
- typeDec := dec.(*ast.GenDecl)
- fmt.Printf("Token: %s\n", typeDec.Tok)
- switch typeDec.Tok {
- case token.TYPE:
- fmt.Println("typedef")
- for _, spec := range typeDec.Specs {
- typeSpec := spec.(*ast.TypeSpec)
- fmt.Printf("%+v", typeSpec)
- }
- case token.VAR:
- fmt.Println("variable")
- case token.CONST:
- fmt.Println("constant")
- default:
- panic("unsupported type " + typeDec.Tok.String())
- }
- }
- func filterNothing(info os.FileInfo) bool {
- return true
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement