2010-12-28 16 views
6

Me encanta la utilidad de búsqueda de código ack. Es lo suficientemente inteligente como para buscar a través de Makefiles, pero no conoce los archivos SConstruct y SConscript que usa scons. ¿Cómo agrego esos a los archivos que buscará?Agregar archivos SCONS a las búsquedas de Ack

Respuesta

2

Esto no se puede hacer utilizando los conjuntos de tipos de ack. Makefiles and Rakefiles are hard-coded en la fuente. Pensé que podría agregar un tipo de scon modificando $HOME/.ackrc y agregando --type-set=scons=SConstruct,SConscript, pero eso buscará un archivo que termine en ".SConstruct" o ".SConscript".

La solución más sencilla es añadir la -a (todos los tipos de archivos) a la bandera ACK.

Si simplemente desea buscar y poder filtrar el SConstruct de alguna manera, entonces puede agregar #!/usr/bin/python como la primera línea del archivo SConstruct. Ack tratará el archivo como código fuente de Python y puede filtrar con --python.

+0

Parece que solo funciona para archivos .scons, no SConstruct o SConscript. – jblocksom

+0

Gah, tienes razón. Acabo de comprobar el origen: "archivo de creación" y "archivo de seguimiento" son excepciones codificadas. – richq

+0

Gracias por buscar eso. Pude modificar mi versión local para agregar SConstruct y SConscript de la misma manera que los archivos make están ahí, tal vez envíe un parche. Debo decir que no estoy loco por la decisión del diseño de scons de usar archivos sin extensiones, aunque he visto otros sistemas de compilación que hacen lo mismo. – jblocksom

3

Aquí es un parche que trata los archivos SCons gusta hacer que los archivos:

--- ~/bin/ack-old 2011-06-01 15:43:51.000000000 -0600 
+++ ~/bin/ack  2011-06-01 15:42:09.000000000 -0600 
@@ -1583,6 +1583,8 @@ 

    return 'skipped' unless is_searchable($basename); 

+ return ('python',TEXT)  if $basename eq 'SConstruct' || $basename eq 'SConscript'; 
+ 
    my $lc_basename = lc $basename; 
    return ('make',TEXT)  if $lc_basename eq 'makefile' || $lc_basename eq 'gnumakefile'; 
    return ('rake','ruby',TEXT) if $lc_basename eq 'rakefile'; 
+0

estoy ejecutando el paquete deb de la versión 1.92 ACK en Ubuntu 10.04, y el mismo parche se puede aplicar manualmente a /usr/share/perl5/App/Ack.pm en torno a la línea 476. –

1

Un nuevo ack2 está en desarrollo que permitirá a juego exacto del archivo en el archivo .ackrc. Eso permitirá un soporte más fácil para Scons y Jam.

+0

Ver http: // stackoverflow. com/questions/9508431/ack-binding-an-real-file-name-to-a-filetype para obtener más información al respecto. –

Cuestiones relacionadas