LXR Cross Referencer
LXR Cross Referencer, plus connu sous le nom de LXR, est un utilitaire général d'indexation de code source et de références croisées qui permet la navigation au sein du code source en utilisant une technologie web avec des liens vers la définition et les usages des identificateurs.
Première version | circa 1994[1] |
---|---|
Dernière version | 2.2.1 () |
DĂ©pĂ´t | sourceforge.net/projects/lxr |
Écrit en | Perl |
Environnement | Multiplate-forme |
Langues | Anglais |
Type | Indexeur et références croisées |
Licence | GNU GPL |
Site web | http://lxr.sourceforge.net http://sourceforge.net/projects/lxr |
Historique
LXR est né du besoin d'un outil permettant une vue synthétique sur le noyau Linux au cours de son développement. Un tel outil est d'autant plus nécessaire que la documentation est absente et que le nombre de contributeurs est élevé.
Deux étudiants norvégiens, intéressés par l'architecture de Linux, ont entrepris l'écriture d'un petit utilitaire affichant les fichiers le composant dans un navigateur web et présentant les usages des variables après un simple clic sur le nom. Conscients de l'intérêt de ce logiciel, ils l'ont déposé très tôt (dès 1994?)[1] sur SourceForge.net.
Au cours du temps, des passionnés ont intégré l'équipe de développement pour donner plus de maturité au code, sans que leur nombre dépasse à aucun moment quelques unités[2]. De ce point de vue, LXR est typique de la majorité des projets hébergés sur SourceForge.net mais présente une longévité exceptionnelle parmi les petits projets.
Un des deux créateurs de LXR a exploré de nouvelles techniques, aboutissant à LXRng. Ce développement expérimental n'offre pas toutes les fonctions de la version traditionnelle et s'écarte notablement des principes initiaux de LXR.
Bien qu'aucune communication n'ai été faite autour de l'outil, LXR a fini par être cité dans des articles de journaux informatiques, par exemple Linux Journal[3]. Néanmoins, une recherche sur Internet montre l'ambiguïté existant entre l'outil et son usage pour afficher d'autres logiciels.
Technologie
LXR est minimaliste et suit le principe du moindre effort.
Le parti pris de minimalisme évite le recours à trop de techniques différentes. Ce faisant, le nombre de dépendances est limité et le logiciel peut fonctionner sous des configurations diverses sans adaptation spéciale.
- Parmi les choix de conception, on peut citer le refus de langage interprété côté client (tel que Java ou JavaScript) ou la conformité stricte à HTML 4.01.
L'application du principe de moindre effort interdit de programmer un outil s'il existe déjà (du moins en tant que logiciel libre).
- Ceci a conduit à employer un navigateur web pour l'affichage (HTML et CSS permettent toutes les fantaisies de mise en page), une base de données relationnelle pour le stockage des définitions et des références croisées et l'utilitaire Exuberant ctags (en) pour l'analyse lexico-syntaxique des fichiers-source.
LXR est écrit en Perl, choix pratique pour des scripts CGI, cependant pas forcément adapté à une analyse lexico-syntaxique[4].
LXR tente d'ĂŞtre le moins contraignant possible :
- plusieurs choix de bases de données : MySQL, PostgreSQL, SQLite ou Oracle,
- choix pour la recherche en plein texte entre Glimpse (en) et SWISH-E (en),
- choix libre du serveur HTTP du moment qu'il peut exécuter des scripts CGI (des instructions sont données pour Apache, Cherokee, lighttpd, Nginx et thttpd,
- stockage des fichiers-source dans un répertoire réel ou dans un dépôt de système de gestion de version (choix[5] entre CVS, Git[6], Mercurial et Subversion).
Utilisation
Après installation du logiciel, tâche qui, sans être triviale, ne réclame pas d'expertise informatique, le code source doit être préparé et LXR configuré pour l'afficher.
- Les différentes versions du code source se présentent comme des sous-répertoires.
- L'autre possibilité est de stocker le code source dans un logiciel de gestion de version.
La seconde phase consiste en l'indexation de ce code (reconnaissance des identificateurs et entrée de leurs emplacements dans une base de données). La réindexation n'est nécessaire que lorsque le code source est modifié ou qu'une nouvelle version est ajoutée.
Il suffit ensuite de lancer un navigateur web avec un URL correspondant au code source pour l'afficher et profiter des hyperliens associés aux identificateurs.
Possibilités et limites
Le code source peut ĂŞtre Ă©crit dans n'importe quel langage reconnu par Exuberant ctags, mais les analyseurs n'offrent pas tous le mĂŞme niveau de finesse.
Deux versions d'un même fichier peuvent être comparées côte à côte avec mise en évidence visuelle des différences (grâce à la commande diff émise par LXR).
En sus des hyperliens sous les variables, un formulaire autorise la recherche d'un identificateur saisi par l'utilisateur.
Enfin, pour contourner les insuffisances de la phase d'indexation, il est possible de rechercher une séquence quelconque de caractères (en plein texte) au prix du parcours intégral des fichiers source.
Les limites de LXR sont celles des outils sur lesquels il s'appuie, principalement Exuberant ctags. Mais la première source de difficulté provient essentiellement d'une attribution incorrecte des droits d'accès aux fichiers.
Une autre limite provient du choix de conception de ne pratiquer qu'une analyse statique du code alors que outils pratiquent une analyse sémantique.
Un utilisateur averti peut modifier la présentation de LXR en adaptant les modèles de page (écrits en HTML) et le rendu en retouchant la feuille de style CSS.
Collections LXR
- LXR lui-mĂŞme
- Navigation dans le noyau Linux
- Site missinglinkelectronics (utilisant la bifurcation expérimentale LXRng créée par lxr.linux.no)
- Site free-electrons (utilisant une version très ancienne de LXR)
- « Glibc 2.3.2 »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?)
- « D'autres LXRs du même site »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?)
- Mozilla Cross Reference, pour plusieurs projets de Mozilla.org
- « LXR pour Apache HTTPD »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?)
- KDE Cross Reference
- « GNOME Cross Reference »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?)
- « AbiWord Cross Reference »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?)
- Les liens brisés ci-dessus ont été détectés en .
Voir aussi
- OpenGrok
Notes et références
- Selon les dates du dépôt CVS sur SourceForge
- Voir les statistiques du projet LXR sur
- (en) Read Source Code the HTML Way, June 01, 2007 by Kamran Soomro
- Un automate fini explore généralement un texte (ou programme-source) de gauche à droite sans retour arrière. L'utilisation des expressions régulières en Perl entraîne le risque d'explorations multiples du texte avec des remplacements intempestifs sur des portions déjà traitées.
- Il y avait aussi la possibilité d'utiliser BitKeeper, mais le suivi en a été arrêté (vers 2005) quand sa licence est devenue propriétaire.
- Le fonctionnement sous Git a été corrigé à partir de la version 1.0.
Liens externes
- (en) Le site du projet LXR sur SF.net
- (fr+en) Le site de documentation et de démonstration LXR sur SF.net
- (en) Le projet expérimental LXRng