Rechercher dans du code source est une des activités principales du développeur.
Dans les logiciels aux architectures incertaines et maintenant avec la "méthode" Agile, il est souvent diffcile de savoir rapidement ou est gérée telle ou telle fonctionnalité dans le code.
Pendant longtemps, rechecher dans le code ressemblait à ça:
find . -name "*.java" -exec grep HashMap {} \; -print
Certains me diront:
Bahhhhh, Qu'est-ce que c'est compliqué ?
Où encore l'excuse qui n'en est pas une:
Mais moi je suis sous Windows ...
Heureusement, il existe maintenant des outils plus rapides à l'usage que les
commandes find
et grep
combinées.
J'ai découvert il y a quelques années la commande ack-grep
ou
ack
qui est précisément faites pour notre besoin: chercher des
motifs dans une base de code.
Je vous passe ici l'installation d'ack: ack
est un script Perl qui s'installe
très simplement ; évitez le package de votre distribution afin d'avoir la
version la plus récente.
Maintenant, notre commande précédente s'écrit comme suit:
ack --java HashMap
C'est quand même plus court !
J'ai précisé à la commande que je voulais chercher dans des sources Java.
Dans types de fichiers sont prédéfinis dans ack
:
ack --help-types Usage: ack [OPTION]... PATTERN [FILES OR DIRECTORIES] The following is the list of filetypes supported by ack. You can specify a file type with the --type=TYPE format, or the --TYPE format. For example, both --type=perl and --perl work. Note that some extensions may appear in multiple types. For example, .pod files are both Perl and Parrot. --[no]actionscript .as .mxml --[no]ada .ada .adb .ads --[no]asm .asm .s --[no]asp .asp --[no]aspx .master .ascx .asmx .aspx .svc --[no]batch .bat .cmd --[no]cc .c .h .xs --[no]cfmx .cfc .cfm .cfml --[no]clojure .clj --[no]cmake CMakeLists.txt; .cmake
Si vous utilisez un type de fichier non connu d'ack
, vous
pouvez le définir.
Ensuite, de nombreuses options de la commandes ack
sont
reprises de celles de grep
:
-i, --ignore-case Ignore case distinctions in PATTERN
-v, --invert-match Invert match: select non-matching lines
ou les classiques:
-l, --files-with-matches Only print the filenames of matching files, instead of the matching text. -L, --files-without-matches Only print the filenames of files that do NOT match.
ack
permet comme grep
d'afficher les lignes de
contexte autour du motif trouvé:
-A NUM, --after-context=NUM Print NUM lines of trailing context after matching lines. -B NUM, --before-context=NUM Print NUM lines of leading context before matching lines.
ce qui facilite la lisibilité de la sortie.
Par défaut, ack
va parcourir tous les sous-répertoires du
répertoire courant. Ce comportement peut-être changé par:
-r, -R, --recurse Recurse into sub-directories. This is the default and just here for compatibility with grep. You can also use it for turning --no-recurse off.
Enfin, ack
peut utiliser un fichier de configuration
~/.ackrc
.
Pour créer celui utilisant les options par défaut:
ack --create-ackrc > ~/.ackrc