Je souhaite indexer des fichiers de clojure, en utilisant eTags afin que je puisse utiliser la fonctionnalité des balises d'Emacs. Mais Etags ne reconnaît pas les fonctions de clojure. Est-il possible d'étendre les eTags à inclure les définitions de clojure? P>
4 Réponses :
regarder la source, il semble que vous fassiez simplement exécuter Si cela ne fonctionne pas, vous devrez modifier etags code> à l'aide du - langue = lisp code> drapeau, puisque le reconnaissement LISP recherche la chaîne " Def '. eTags code> afin qu'il puisse reconnaître le clojure et produire un fichier de balises pour cela. Voici la source de Etags code> au formulaire htmlized a >. On ne semble pas que ce soit aussi difficile ou long un travail à faire. Voici les règles de reconnaissance de Python comme exemple: P> /*
* Lisp tag functions
* look for (def or (DEF, quote or QUOTE
*/
static void L_getit __P((void));
static void
L_getit ()
{
if (*dbp == '\'') /* Skip prefix quote */
dbp++;
else if (*dbp == '(')
{
dbp++;
/* Try to skip "(quote " */
if (!LOOKING_AT (dbp, "quote") && !LOOKING_AT (dbp, "QUOTE"))
/* Ok, then skip "(" before name in (defstruct (foo)) */
dbp = skip_spaces (dbp);
}
get_tag (dbp, NULL);
}
static void
Lisp_functions (inf)
FILE *inf;
{
LOOP_ON_INPUT_LINES (inf, lb, dbp)
{
if (dbp[0] != '(')
continue;
if (strneq (dbp+1, "def", 3) || strneq (dbp+1, "DEF", 3))
{
dbp = skip_non_spaces (dbp);
dbp = skip_spaces (dbp);
L_getit ();
}
else
{
/* Check for (foo::defmumble name-defined ... */
do
dbp++;
while (!notinname (*dbp) && *dbp != ':');
if (*dbp == ':')
{
do
dbp++;
while (*dbp == ':');
if (strneq (dbp, "def", 3) || strneq (dbp, "DEF", 3))
{
dbp = skip_non_spaces (dbp);
dbp = skip_spaces (dbp);
L_getit ();
}
}
}
}
}
basé sur http://nakkaya.com/2009/12/ 13 / GET-Etags-to-Index-Clojure-Files / P>
La commande suivante est tout sur une ligne p>
trouver. \! -Name '. *' -Name '* .clj' | xargs etags --regex = '/ [\ t \ (] * def [AZ] * \ ([AZ -!] + \) / \ 1 /' - [\ t \ (] * ns \ ([AZ.] + \) / \ 1 / ' code> p>
Améliorer la réponse de Miner49:
J'ai ceci dans mon fichier .emacs (notez léger changement de regex, CTAGs hurlait à propos de
Ayant "-" au milieu de la regex lorsqu'il n'est pas utilisé pour spécifier une plage) p> Un autre obstacle était que sur ma boîte à borbitures remplace M-. Pour utiliser sa propre fonction de recherche plutôt que la touche Recherche, et cette fonction n'a pas fonctionné correctement. e Il s'agit de la propre fonction de recherche plutôt que la touche Recherche et cette fonction n'a pas fonctionné correctement. Vous pouvez appeler Tag Speratley
Pour trouver des balises dans le fichier de tag, mais la fonction intégrée passe à la source de fonctions intégrées lorsqu'elle est connectée à un serveur Slime / Swank, qui est assez propre.
Mes compétences ELISP n'ont pas réussi à consolider les deux. SLIME s'attend à ce que la balise de recherche ne puisse retourner nil si elle échoue, ce qui semble ne pas se produire, le suivant P> ramène les recherches basées sur des étiquettes, mais détruit les recherches Swank-Server. p> p>
La réponse de @ Miller49R wan vraiment sympa. Je l'ai modifié un peu pour reconnaître les métadonnées et certains chalaractes de symboles de clojure plus acceptables: