Salut les barbus!

Vous qui programmez (et je sais qu'il y en a, pas la peine vous cacher!), peut-être utilisez-vous l'éditeur Atom?

C'est ce que j'utilise, en tout cas pour développer en C++ sur mes différents joujoux (choux, cailloux, genoux, hiboux, joujoux, poux... oui c'est bien un x... Mais c'est bizarre à lire quand même), Arduino, ESP8266 et Teensy.

Et s'il y a bien une chose qui me fatigue, c'est de devoir toujours taper la même chose à chaque fois que je crée une nouvelle classe:

maclassequitue.h:

#ifndef MACLASSEQUITUE_H
#define MACLASSEQUITUE_H

class MaClasseQuiTue {
private: //private members

public: //public members
  //MaClasseQuiTue constructor
  MaClasseQuiTue();
};

#endif //MACLASSEQUITUE_H

maclassequitue.cpp:

#include "maclassequitue.h"

/**
* Constructor
*/
MaClasseQuiTue::MaClasseQuiTue(){

}

Ce n'est pas grand chose, mais c'est monstre rébarbatif de devoir se taper ça à chaque fois.

J'ai trouvé un plugin Atom permettant de créer des templates pour générer ce qu'on veut en deux coups de cuillère à pot. Il s'appelle Atom Smart Templates.

Une fois installé, voici comment j'ai créé ma template pour générer les deux fichiers à partir d'un nom de classe:

  • Menu Packages/Smart Templates/Open templates folder
  • Dupliquer le répertoire de la template de base (BaseTemplate), et l'appeler cpp (nom totalement arbitraire)
  • Virer tout sauf le fichier index.js (qui contient la configuration de notre template)
  • Créer deux fichiers: header.template et implementation.template (noms tout aussi arbitraires)

Le plus gros est fait :)

Voici le contenu de mon index.js:

module.exports = {

    name: "C++ class",

    directory: false,

    params: ["ClassName"],

    rules: function(config) {
      return({
        items: [
          { destinationFile: config["ClassName"].toLowerCase() + ".h", sourceTemplateFile: "header.template"},
          { destinationFile: config["ClassName"].toLowerCase() + ".cpp", sourceTemplateFile: "implementation.template"},
        ]
      });
    }
}

La variable params contient la liste des paramètres à demander à l'utilisateur pour pouvoir générer les fichiers.

Chaque item généré dans la fonction rules prend en source nos deux fichiers .template, et construit leurs noms finaux en fonction du paramètre ClassName qui a été saisi.

Ensuite, nous devons créer notre fichier header.template:

#ifndef <%= ClassName.toUpperCase() %>_H
#define <%= ClassName.toUpperCase() %>_H

class <%= ClassName %> {
private: //private members

public: //public members
  //<%= ClassName %> constructor
  <%= ClassName %>();
};

#endif //<%= ClassName.toUpperCase() %>_H

Et le fichier implementation.template:

#include "<%= ClassName.toLowerCase() %>.h"

/**
* Constructor
*/
<%= ClassName %>::<%= ClassName %>(){

}

Facile, non? Et surtout maintenant, quand je veux créer une nouvelle classe, je n'ai qu'à faire un clic droit dans le répertoire concerné, Create files from template, clic sur C++ class, je rentre le nom de ma classe et paf!

Article précédent Article suivant