Salut à tous, Salut Julien :-) Quoting "Julien L." <[EMAIL PROTECTED]>:
- actuellement, le développeur doit fixer le niveau de détail du message qu'il veut afficher.
Tout à fait.
J'ai l'impression que votre solution consiste à "déplacer" le niveau de détail fixé par le développeur pour qu'elle suive la logique de l'exécution (appel d'une commande à partir d'un module, ...).
Le développeur se casse donc la tête à fixe un niveau de détail pour le voir ensuite modifier. A vrai dire, cela me paraît "bizarre" comme fonctionnement.
Ce qui est important pour un développeur c'est pas tant de définir le niveau entre les modules/commandes que de le définir au sein d'une même commande/module. C'est vraiment ça qui est important. Le but est de respecter la hierarchie des messages au sein d'un même module/commande, ceci relativement au context dans lequel il est utilisé. c'est au développeur de le définir la hiearchie au sein d'une commande/module. Après c'est à print_msg et au module/commande père/mère de décider si les messages des modules/commandes filles doivent être considéré comme un niveau inférieur ou égale à ses propres messages.
- l'affichage complet du message se décompose en deux appels de fonctions. Le premier appel est celui de l'affichage du message (print_msg). En quelque sorte, cet appel de fonction "ouvre" le message. Le deuxième appel est celui de l'affichage du résultat du message (print_status). En quelque sorte, cet appel de fonction "ferme" le message.
Non, ce n'est pas toujours le cas. un print_msg n'est pas forcément suivit d'un print_status. Exemple : print_msg WARNING "Some nbuilds are not up to date. You should run Ncooker update to have the latest version" (message fictif) Donneras l'affichage suivant : Some nbuilds are not up to date. You should run Ncooker update to have the latest version print_msg INFO "Downloading foobar..." Donneras l'affichage suivant : Downloading foobar... Ensuite dans le code si tu fais: print_status INFO OK alors le message précédent sera transformé et deviendra : Downloading foobar......................... [OK] Ce que fait print_status c'est juste ajouter des .... et mettre le statut à la fin d'une ligne. Si un développeur fait par erreur : print_message ERROR "Your nbuild is corrupted" [plusieurs lignes de code] print_status OK Alors l'affichage final sera : Your nbuild is corrupted.................. [OK] Ce qui n'est pas du tout l'effet voulu
Partant de ces remarques, mon idée est la suivante. La fonction print_msg ne prend plus qu'un seul argument : le message. Le niveau de détail, trop subjectif et surtout trop relatif aux autres messages, sera calculé par le gestionnaire de messages.
Je complète ce que j'ai dit plus haut : le niveau de détail n'est pas (ou peu) subjectif. Un développeur peut résonnablement définir au sein d'une même commande ce qui est de l'info, du détail et du super détail. Par contre il ne peut pas prévoir à l'avance si la commande qu'il code sera utilisée au premier niveau ou dans un niveau de détail.
Lorsque print_msg est appelé, le message passé en argument est affiché (avec la bonne indentation) et le niveau courant est incrémenté.
Avec ton idée on perd toute notion d'ERROR et WARNING qui sont au dessus de tout cela. print_msg "Fatal error : your nbuild is hightly corrupted, it may damage your computer" doit être affiché tout le temps (sauf si verbosity = NONE) que ça intervienne au niveau 0 ou au niveau N+100. Avec ton système on perd le message si l'utilisateur fait -v INFO
Lorsque print_status est appelé, le résultat passé en argument est affiché et le niveau courant est décrémenté. C'est un peu comme le système de parenthèses. Une fonction ouvre la parenthèse. Si cette même fonction est appelée, une sous-parenthèse est ouverte. Lorsque l'autre fonction est appelée, la dernière parenthèse ouverte est fermée.
Comme dit plus haut print_msg n'est pas forcément suivit de print_status
D'autre niveau "utilisateur" pourrait être rajouté (par exemple, "MAIN" comme le suggérait Gontran).
Sur ce point je suis d'accord
Je ne sais pas si ma proposition répond bien aux problèmes posés. C'est un peu une proposition naïve. Vous pouvez la jeter si elle ne vous plaît pas.
Je pense sincèrement que ce n'est pas la meilleure solution. Je ne sais pas si elle est naïve, mais je ne vais sûremment pas la jeter à la poubelle, le débat avance et c'est l'essentiel :-) ++ Chicha
