Go Parser Not Detecting Doc Comments on Struct Type
In Go, identifying the associated Doc comments for a struct type can be achieved through the parser and ast packages. Here's an investigation into why these comments may not be detected:
The Issue
Source code provided in the question demonstrates an attempt to retrieve Doc comments for a struct type using Go's parser package. However, the Doc comments for the struct types FirstType and SecondType are missing in the output.
The Solution
To resolve this, we need to consider how Go handles documentation in its abstract syntax tree (AST). The go/doc package suggests that when there is no documentation attached to a TypeSpec, the documentation of the parent GenDecl should be used instead.
Inspecting GenDecls
Adapting the code from the question to include the case for *ast.GenDecl:
for _, f := range d { ast.Inspect(f, func(n ast.Node) bool { switch x := n.(type) { case *ast.FuncDecl: fmt.Printf("%s:\tFuncDecl %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc) case *ast.TypeSpec: fmt.Printf("%s:\tTypeSpec %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc) case *ast.Field: fmt.Printf("%s:\tField %s\t%s\n", fset.Position(n.Pos()), x.Names, x.Doc) case *ast.GenDecl: fmt.Printf("%s:\tGenDecl %s\n", fset.Position(n.Pos()), x.Doc) } return true }) }
Running this code yields the missing Doc comments for FirstType and SecondType.
Unexpected Behavior
While this method uncovers the missing Doc comments, it also reveals that the documentation for the GenDecl is unintentionally included. This is because the AST sees struct type definitions as contractions of the parenthesized version of type definitions, handling all definitions similarly regardless of grouping.
Conclusion
To effectively retrieve Doc comments for struct types using pure AST, it is crucial to acknowledge this behavior. However, employing the go/doc package remains the preferred approach as it circumvents these complexities and provides a comprehensive solution for documentation parsing in Go.
The above is the detailed content of Why is My Go Parser Not Detecting Doc Comments on Struct Types?. For more information, please follow other related articles on the PHP Chinese website!