Что такое хорошая система поиска исходного кода?

Кодовая база, над которой я работаю, огромна, и поиск занимает около 20 минут. Я ищу хорошую поисковую систему с исходным кодом в Интернете... что-то вроде интранет-версии koders.com.

Единственное, что я нашел, это Krugle Enterprise Edition, которая не публикует цены... и если вам нужно спросить, вы не можете себе этого позволить.

Я бы действительно предпочел простой старый поисковик, без множества других наворотов.

Источник в основном ASP.NET/C# и Javascript.

11 ответов

Я рекомендую OpenGrok. Есть несколько других движков, вот краткий обзор их.

20 минут возмутительно! В настоящее время я работаю с базой из более чем миллиона строк исходного кода, и grepping занимает максимум несколько секунд (я использую ack). Наши домашние каталоги хранятся на файловом сервере и монтируются через NFS, и для ускорения поиска мы делаем это при входе на файловый сервер. Я не уверен, как долго это займет NFS, но это определенно дольше.

Мы также выполняем операции контроля версий при входе на файловый сервер по тем же причинам производительности.

В Linux я использую утилиты GNU ID. Эти функции аналогичны grep, но работают с индексом, поэтому они невероятно быстрые. Вы запускаете mkid для создания индекса, а затем одну из других утилит, таких как "gid", которая является версией grep для ID Tools, чтобы выполнить поиск по всему индексу. У меня есть работа cron, которая иногда запускает mkid.

Инструменты ID также работают в Windows, либо с Cygwin, либо в качестве стандартной программы Windows.

Lxr отлично работает на больших базах кода, что доказано ядром Linux. Я думаю, что это только для C (вы не указали используемые языки).

Я использовал OpenGrok раньше и был очень доволен этим. Другая альтернатива:

Гонзуи http://gonzui.sourceforge.net/screenshots.html

http://gonzui.sourceforge.net/screenshots/printf-2-mini.png

Если у вас так много исходного кода, вам может потребоваться немного времени для настройки поисковой системы для его индексации. Я бы порекомендовал Lucene - он бесплатный, быстрый, довольно легко настроить мощный индекс для любого контента для всех, кто имеет опыт программирования.

http://lucene.apache.org/

Поскольку вы говорите "опрометчиво", я думаю, вы не заинтересованы в решениях командной строки.

Такой инструмент, как ctags, будет индексировать и искать кодовые базы C# и JavaScript (среди многих других).

Что очень удобно в ctags, так это то, что он может быть объединен с vim либо с плагином taglist для просмотра исходного кода, либо с vim omnicomplete для включения автозавершения кода.

Некоторое время я использовал cs2project, это поисковая система с открытым кодом на C#, основанная на Lucene.NET. К сожалению, он больше не разрабатывается.

Посмотрите нашу систему поиска исходного кода SD. Язык знает и обрабатывает многие языки (C, C++, C#, Java, ObjectiveC, PHP, VB.net, VB6, Ada, Fortran, COBOL, ...). Поиск в Linux Kernal занимает 2,8 секунды (7,3 миллиона строк, 18000+ файлов).

Поскольку он поддерживает язык, он может игнорировать элементы языка, не относящиеся к вашему поиску (например, игнорировать комментарии, форматирование и пробелы, если вас интересует только идентификатор или выражение). Он может искать внутри идентификаторов, строк и комментариев. У него есть опция поиска по полному регулярному выражению, если вы действительно хотите это сделать.

Он использовался для систем с десятками миллионов строк кода и, в одном случае, о которых мы знаем, для системы, содержащей более миллиона файлов.

У меня была похожая проблема. Я работаю в софтверной компании, где проект включает в себя сценарии C#, C++, asp.net, db и даже исходный код vb6 (да, это головная боль, компилирующая несколько проектов vb6, когда нет концепции решения, как в более поздней версии Visual Studio...)

Я использовал Visual Studio 2010, но мне пришлось использовать сторонний текстовый редактор для поиска в сценариях БД и исходного кода vb6.

Я провел некоторое исследование и нашел KodeEx (http://kodeex.com) и был счастлив с ним. Это инструмент поиска исходного кода на основе индекса. Вам не нужно ничего строить (как другие люди предложили вам сделать с Lucene. Кстати, Lucene - хороший проект с открытым исходным кодом =)). Просто установите его и дайте индексировать ваши проекты. После этого он обычно возвращает результат в течение нескольких секунд.

Возможно, вам следует потратить некоторое время и / или деньги на редактор или IDE, которые поддерживают маркировку символов. Вам нужно всего лишь сделать один проход по всему исходному дереву, чтобы пометить его, и после этого редактор использует поиск по индексу или поиск по карте, чтобы найти определение символа или ссылки.

Некоторыми примерами редакторов или IDE, поддерживающих тегирование, являются Eclipse, Visual Studio, SlickEdit. Некоторые IDE могут вызывать функцию Symbol Browser или что-то подобное.

Другие вопросы по тегам