2010-12-28 4 views
6

Мне нравится утилита поиска кода ack. Он достаточно умен, чтобы просматривать Make-файлы, но не знает о файлах SConstcript и SConscript, которые используют sconscript. Как добавить их в файлы, на которые будет смотреть ack?Добавить файлы SCons в ack поиск

ответ

2

Это не может быть сделано с использованием наборов типов ack. Makefiles and Rakefiles are hard-coded в источнике. Я думал, вы можете добавить тип scons, изменив $HOME/.ackrc и добавив --type-set=scons=SConstruct,SConscript, но это будет поиск файла, который заканчивается на «.SConstruct» или «.SConscript».

Простейшим обходным путем является добавление флага -a (всех типов файлов) в ack.

Если вы хотите, чтобы ack искал и смог каким-то образом фильтровать SConstruct, вы можете добавить #!/usr/bin/python в качестве первой строки файла SConstruct. Затем Ack обрабатывает файл как исходный код python, и вы можете фильтровать его с помощью --python.

+0

Это, похоже, работает только для файлов .scons, а не для SConstruct или SConscript. – jblocksom

+0

Га, ты прав. Просто проверил источник - «makefile» и «rakefile» являются жестко закодированными исключениями. – richq

+0

Спасибо, что посмотрели. Я смог изменить свою локальную версию, чтобы добавить SConstruct и SConscript таким же образом, как и make-файлы, возможно, я отправлю патч. Я должен сказать, что я не сумасшедший о решении дизайна scons использовать файлы без расширений, хотя я видел другие системы сборки, которые делают то же самое. – jblocksom

3

Вот патч, который лечит Scons файлы, как сделать файлы:

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

Я запускаю deb-пакет ack версии 1.92 на Ubuntu 10.04, и тот же патч можно вручную применить к /usr/share/perl5/App/Ack.pm по строке 476. –

1

Новый ack2 находится в стадии разработки, которая позволит точное соответствие файла в файле .ackrc. Это позволит упростить поддержку Scons and Jam.

+0

См. Http: // stackoverflow. com/questions/9508431/ack-binding-an-actual-file-name-to-a-filetype для получения дополнительной информации об этом. –

Смежные вопросы