2010-12-28 8 views
6

Ich liebe die Code-Suche-Dienstprogramm ack. Es ist schlau genug, um Makefiles zu durchsuchen, aber es weiß nichts über die SConstruct- und SConscript-Dateien, die Scons verwendet. Wie füge ich diese zu den Dateien hinzu, nach denen ack sucht?Hinzufügen von SCONS-Dateien zu Ack-Suchen

Antwort

2

Dies kann nicht mit ack's type sets durchgeführt werden. Makefiles and Rakefiles are hard-coded in der Quelle. Ich dachte, du könntest einen Scons-Typ hinzufügen, indem du $HOME/.ackrc änderst und --type-set=scons=SConstruct,SConscript hinzufügst, aber das wird nach einer Datei suchen, die auf ".Construct" oder ".SConscript" endet.

Die einfachste Problemumgehung ist das Hinzufügen des Flags -a (alle Dateitypen) zu ack.

Wenn Sie nur ack suchen möchten und in der Lage sein, die SConstruct irgendwie zu filtern, dann könnte man #!/usr/bin/python als die erste Zeile der SConstruct Datei hinzufügen. Ack behandelt die Datei dann als Python-Quellcode und Sie können mit --python filtern.

+0

Das scheint nur für .scons-Dateien zu funktionieren, nicht SConstruct oder SConscript. – jblocksom

+0

Gah, du hast Recht. Überprüfen Sie die Quelle - "Makefile" und "Rakefile" sind fest codierte Ausnahmen. – richq

+0

Danke, dass Sie nachsehen. Ich war in der Lage, meine lokale Version zu ändern, um SConstruct und SConscript auf die gleiche Weise wie Makefiles hinzuzufügen, vielleicht werde ich einen Patch einreichen. Ich muss sagen, ich bin nicht verrückt nach der Entscheidung von scons, Dateien ohne Erweiterungen zu verwenden, obwohl ich andere Build-Systeme gesehen habe, die das Gleiche tun. – jblocksom

3

Hier ist ein Patch, die SCons Dateien behandelt wie Dateien machen:

--- ~/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

Ich führe das Deb-Paket von ack Version 1.92 auf Ubuntu 10.04, und der gleiche Patch kann manuell auf/usr/share/perl5/app/ack.pm um Linie 476 angewendet werden. –

1

Ein neues ack2 in der Entwicklung ist, die genaue Dateianpassung in der .ackrc Datei ermöglicht. Dies wird eine einfachere Unterstützung für Scons und Jam ermöglichen.

+0

Siehe http: // stackoverflow. com/questions/9508431/ack-bindenden-ein-tatsächlicher-Dateiname-zu-einem Dateityp für mehr dazu. –