Bonjour,
Je vais essayer de faire cours :
Dans un gros programmes Perl, j'exécute des règles de manipulation.
Ces règles (des sous-routines) se compte par millier.
Ces règles sont classées dans des Package différents.
En fonction de paramétrage (des fichiers JSON), les modules/package embarquants les règles souhaitées, sont chargés dynamiquement par le programme lui même.
Cette méthode me permet une vraie souplesse, même si ça met un peut de temps à démarrer.
Toutefois, la documentation me fait défaut (tien c'est bizarre, je suis le seul...)
Cette documentation n'a pas pour objectif de décrire l'arbre de développement, mais plutôt un recueil des actions de chaque règle et des attributs d'objets manipulés, à destination d'utilisateurs.
J'ai tenté plusieurs solutions y compris doxygen, mais sans réel succès.
Le POD ne me convient pas, je le trouve polluant en nombre de ligne, pour finalement très peut d'intérêt et pas du tout sexy.
J'ai donc commencé à mettre la documentation relative à chaque règle (sous-routine), dans des variables locales à chacune de ces fonctions.
Le but est de garder la documentation très proche de la fonction, donc à l'intérieur (comme un header en somme).
Les variables on toujours le même nom, pour simplifié la maintenance, ceci m'évite de mettre le nom de la fonction dans la variable.
J'ai bien entendu tenté aussi de mettre toute la documentation dans un Hash, avec les noms de fonctions, mais j'ai trouvé cela très lourd, lors des maintenances et changement de nom de fonction (les noms sont plus proche d'un rôle fonctionnel, que d'une appellation technique).
Si j'oubliais de changer le nom d'une clé de Hash, la documentation devenais fausse (c'est pire que tout )
Le texte de documentation, "quoté" (q{ }), est lui même en Markdown.
Pour documenter une fonction, j'ai besoin de trois ou quatre variables représentant :
- La synthèse
- Le descriptif détaillé
- Les attributs manipulés
- Les messages associés
- Le complément d'information
Bien entendu je me charge de faire les liens avec les différentes références.
Je cherche donc un module, à positionner dans une seule étape, qui me permettrait de balayer tous les pointeurs de fonctions chargées et avec Padwalker (encore merci à cmcmc pour ça), accéder à leurs variables "my" (peek_my).
Puis, pour terminer, un module qui reprendrai le texte Markdown (je pense à Text::Markdown), pour le mettre dans des portions de HTML (ou XHTML) pour faire une vraie documentation sexy.
La version PDF de la documentation me paraît aussi une bonne solution.
Dans ce cas faire alors du HTML to PDF ou Mardown to PDF ?!
Pour information, j'ai bien trouvé un endroit ou positionner PadWalker avant l'exécution d'une fonction, mais je ne passe pas toujours dans ce code et surtout il peut être appelé des millions de fois. Ce qui n'est pas très performant...
Je vous remercie d'avance de vos idées ou solutions.
Note : J'utilise aussi Moose, pour des centaines de catégories d'objets et 3 à 10 niveaux d'héritage. Mais paradoxalement, j'ai moins de problèmes, car Moose à des modules d'accès aux propriétés et attributs des objets.
Ainsi je récupère bien la documentation de chaque attribut.
Chaque propriété d'objet est documenté, mais pas encore en Mardown (mais ça vient).
Désolé d'être verbeux, mais il me semblais nécessaire d'être précis.
C'est peut être devant mon nez, ou alors je suis neuneu, mais je ne trouve rien...
Encore merci d'avance
DCA
Partager