Ce document décrit les conventions de codage utilisées pour le projet Bluefish. Merci de nous communiquer les améliorations ou suppléments.
Ceci n'est pas fait pour vous empêcher de programmer, mais pour structurer un peu le programme. Bluefish n'est pas très bien structuré pour le moment mais j'essaie d'améliorer ça un peu.
Bonne programmation !
Olivier Sessink
http://bluefish.openoffice.nl/
Pour faire une backtrace utile, si vous n'avez aucune idée de l'endroit où le programme se plante, aller dans le répertoire où se trouve le source de Bluefish et exécuter la commande suivante :
make distclean
./configure --with-debugging-output
make
gdb src/bluefish
Cela va démarrer le debugger avec le nouveau binaire fraîchement compilé. Si vous avez une idée, ouvrir ce fichier et ajouter #define DEBUG
au début, et exécuter
make distclean
./configure
make
gdb src/bluefish
Une fois le debugger démarré, tapez r<enter>
, si le debugger s'arrête en disant qu'il n'est pas autorisé à lire la mémoire, taper c<enter>
. Exécuter le programme jusqu'à ce qu'il se plante, exécuter alors bt<enter>
. Envoyer la sortie (disons les 50 dernières lignes) à la mailing list de développement. Cela nous donne des informations de débogage et nous dit où est localisé exactement le plantage dans le programme.
Sois juste paresseux et utilise :
cd src
indent -kr -ts4 *.c *.h
C'est le style de codage de Kernighan & Ritchie, avec une indentation de 4.
Ne pas utiliser de commentaires à la C++ mais des commentaires de type C, /* et */. gcc fait les choses bien, mais d'autres compilateurs pourraient se plaindre de ça.
Utiliser void name_cb() pour un appel qui peut être global, comme l'appel pour ouvrir un dialogue (cela peut être autre chose qu'un void)
Utiliser static void name_lcb() pour appel local, comme le clic sur OK dans une boîte de dialogue. (cela aussi peut être autre chose qu'un void)
Essayer d'avoir des noms qui expliquent ce que fait la fonction, par exemple doc_do_replace() devrait faire un remplacer dans un document spécifique,etc.
Dans document.c nous avons réellement un standard maintenant. Toutes les fonctions commencant par doc_...() prennent un Tdocument comme argument. Toutes les fonctions sans, sont soit vieilles (et doivent être renommées) ou sont des fonctions qui travaillent sur le main_v->current_document (un pointeur sur le document visible courant)
Pour fournir une interface homogène nous devons être sûr qu'elle est un peu organisée:
Toujours déclarer static les fonctions qui n'ont pas besoin d´être visible en dehors du fichier courant static. Raison: Eviter de polluer l'espace de dénomination global. Les fonctions statiques seront liées uniquement à l'intérieur du même fichier. Toutes les procédures utilisées dans d'autres fichiers (public) doivent être déclarées dans le fichier .h declaré.
Toutes les variables qui sont utilisées dans d'autres fichiers (public) doivent être dans le .h avec un extern devant elles. Mais essayez d'éviter les variables globales. La plupart du temps vous pouvez les éviter en créant une structure typedef.
Ne mettez aucun extern bla() au début d'un fichier .c, utilisez #include otherfile.h à l'intérieur à la place. Ainsi si vous modifiez une fonction vous avez seulement à modifier le fichier .h. En résumé : Déclarez les fonctions globales dans le fichier .h et nulle part ailleurs.
Si vous incluez des fichiers d'en-tête comme #include <string.h>
ajoutez s'il vous plait un commentaire qui explique pourquoi ce fichier est nécessaire, comme #include <string.h> /* strlen() */
Si vous écrivez un nouveau fichier .c, écrivez aussi un fichier .h pour lui et incluez le fichier .h dans le fichier .c. Utilisez des directives d'inclusion conditionnelle dans tous les fichiers .h comme dans bluefish.h
#ifdef __BLUEFISH_H #define __BLUEFISH_H ... all the declarations here ... #endif
Raison: permettre au compilateur de vérifier la cohérence entre le .c et le .h
Par ordre alphabétique:
Antti-Juhani Kaijanaho a écrit:
Olivier a écrit:
En utilisant bash (remplacer par votre propre nom d'utilisateur):
CVSROOT=:pserver:USERNAME@cvs1.openave.net:/home/cvsroot/bluefish1 export CVSROOT cvs login cvs checkout bluefishCela doit télécharger la version de développement courante de Bluefish. Si vous l'avez déjà fait vous pouvez utiliser :
cvs update -dPpour mettre à jour vos fichiers locaux avec les nouelles modifications. Pour envoyer des fichiers :
cvs commit
doit envoyer vos modifications sur le CVS. S'il vous plaît faites toujours un update immédiatement avant de faire un commit, pour vérifier s'il y a d'autres personnes qui travaillent sur le même source!
D'autres commandes qui pourraient s'avérer utiles :
Antti-Juhani à écrit:
cvs checkout
cvs checkout -r name_of_branch
Ce plan de sortie en trois étapes, inspiré du cycle de sortie de Debian, permet des développements instables avec en parallèle la sortie de version.
Pour créer une branche:
cvs tag -b name_of_branchNotez que l'arbre sur lequel vous faites le tag cvs est toujours le tronc, pas la branche. Vous avez alors besoin d'obtenir une nouvelle copie à partir de la branche:
cd somewhere_else cvs checkout -r name_of_branchLes commits sur cette nouvelle copie sont répercutés sur la branche, et le tronc reste inchangé. Les autres personnes peuvent accéder à la branche en faisant le même
cvs checkout -r.Quand vous voulez répercutez vos changements sur le tronc, faites
cvs update -j name_of_branch
dans l'ancien arbre (le tronc). Corrigez tous les conflits et faites un commit.
Roland Steinbach (roland@ratisbona.com) a écrit :
si vous voulez commencer par exemple la traduction en grec (gr) vous aurez à :
Les choses à faire avant le lancement d'une nouvelle version:
... Je dois finir ça