Maison  >  Article  >  développement back-end  >  Pourquoi My Go Parser ne détecte-t-il pas les commentaires de documents sur les types de structure ?

Pourquoi My Go Parser ne détecte-t-il pas les commentaires de documents sur les types de structure ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-07 19:32:02972parcourir

Why is My Go Parser Not Detecting Doc Comments on Struct Types?

Go Parser ne détecte pas les commentaires de document sur le type de structure

Dans Go, l'identification des commentaires de document associés à un type de structure peut être obtenue via le paquets analyseur et ast. Voici une enquête sur les raisons pour lesquelles ces commentaires peuvent ne pas être détectés :

Le problème

Le code source fourni dans la question démontre une tentative de récupération des commentaires Doc pour un type de structure à l'aide Le package d'analyseur de Go. Cependant, les commentaires Doc pour les types de structure FirstType et SecondType sont manquants dans la sortie.

La solution

Pour résoudre ce problème, nous devons réfléchir à la façon dont Go gère la documentation dans son arbre de syntaxe abstraite (AST). Le package go/doc suggère que lorsqu'il n'y a pas de documentation attachée à un TypeSpec, la documentation du GenDecl parent doit être utilisée à la place.

Inspecter les GenDecls

Adapter le code de la question pour inclure la casse pour *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
    })
}

L'exécution de ce code génère les commentaires Doc manquants pour FirstType et SecondType.

Comportement inattendu

Bien que cette méthode découvre les commentaires Doc manquants, elle révèle également que la documentation du GenDecl est involontairement incluse. En effet, l'AST considère les définitions de type struct comme des contractions de la version entre parenthèses des définitions de type, traitant toutes les définitions de la même manière, quel que soit le regroupement.

Conclusion

Pour récupérer efficacement Doc commentaires pour les types de structure utilisant de l'AST pur, il est crucial de reconnaître ce comportement. Cependant, l'utilisation du package go/doc reste l'approche privilégiée car elle évite ces complexités et fournit une solution complète pour l'analyse de la documentation dans Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn