Go-Parser erkennt keine Dokumentkommentare zum Strukturtyp
In Go kann die Identifizierung der zugehörigen Dokumentkommentare für einen Strukturtyp über erreicht werden Parser- und Ast-Pakete. Hier ist eine Untersuchung, warum diese Kommentare möglicherweise nicht erkannt werden:
Das Problem
Der in der Frage bereitgestellte Quellcode zeigt einen Versuch, Doc-Kommentare für einen Strukturtyp abzurufen Das Parser-Paket von Go. Allerdings fehlen in der Ausgabe die Doc-Kommentare für die Strukturtypen FirstType und SecondType.
Die Lösung
Um dieses Problem zu lösen, müssen wir überlegen, wie Go mit der Dokumentation umgeht in seinem abstrakten Syntaxbaum (AST). Das Paket go/doc schlägt vor, dass, wenn einer TypeSpec keine Dokumentation beigefügt ist, stattdessen die Dokumentation des übergeordneten GenDecl verwendet werden sollte.
Inspizieren von GenDecls
Anpassen des Code aus der Frage, um den Fall für *ast.GenDecl einzuschließen:
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 }) }
Das Ausführen dieses Codes führt zu den fehlenden Doc-Kommentaren für FirstType und SecondType.
Unerwartetes Verhalten
Während diese Methode die fehlenden Doc-Kommentare aufdeckt, zeigt sie auch, dass die Dokumentation für GenDecl unbeabsichtigt enthalten ist. Dies liegt daran, dass der AST Strukturtypdefinitionen als Kontraktionen der in Klammern gesetzten Version von Typdefinitionen betrachtet und alle Definitionen unabhängig von der Gruppierung auf ähnliche Weise behandelt.
Schlussfolgerung
Um Doc effektiv abzurufen Bei Kommentaren für Strukturtypen mit reinem AST ist es wichtig, dieses Verhalten zu berücksichtigen. Die Verwendung des Pakets go/doc bleibt jedoch der bevorzugte Ansatz, da es diese Komplexität umgeht und eine umfassende Lösung für die Dokumentationsanalyse in Go bietet.
Das obige ist der detaillierte Inhalt vonWarum erkennt mein Go-Parser keine Dokumentkommentare zu Strukturtypen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!