Программное обеспечение для поиска в ваших собственных библиотеках исходного кода?

Я пишу/модифицирую код в нескольких форматах файлов, таких как Python, MySQL, Perl, HTML, CSS, PHP, JavaScript, AutoHotkey и т. д.

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

Иногда я ищу существующий код с помощью Copernic , но, к сожалению, он может искать только слова и автоматически игнорирует любой программный синтаксис. В нем также отсутствует цветовая кодировка синтаксиса языка программирования.

Мой вопрос: как вы ищете в своих собственных библиотеках исходного кода? Какой софт для этого подходит? Коперник несовершенен, но все же лучший инструмент, который я когда-либо нашел для этой цели.

Grep и решения, подобные grep, хороши, но меня больше всего интересуют программы с пользовательским интерфейсом, доступные в Windows.

Я использую Total Commander (вы также можете использовать бесплатный Double Commander) и нажимаю ALT+ F7для поиска. Конечно, я получаю намного больше возможностей, чем просто поиск из TC, и никогда не пользуюсь проводником Windows.
Вы также можете попробовать Search Monkey , хотя он более полнофункционален для Linux, чем для Windows.

Ответы (6)

Механизм поиска исходного кода (SCSE) Semantic Designs использует сканеры для конкретных языков, чтобы разбить каждый исходный файл на составляющие его лексемы, индексирует все, а затем обеспечивает поиск на основе графического интерфейса по кодовой базе с точки зрения языковых элементов.

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

Напротив, решение, подобное grep, использующее чрезвычайно быстрый FSA, будет открывать и читать каждый файл в каком-либо корневом каталоге. Заставить grep игнорировать все файлы, которые не являются текстовыми, может быть сложно, если есть много расширений или нет расширений. Открытие десятков тысяч файлов и их чтение с помощью grep занимает много времени (десятки секунд). Вы получаете много ложных срабатываний, потому что он сканирует программный код, а также комментарии. Вы не можете легко игнорировать пробелы (разрывы строк или комментарии) в регулярном выражении, поэтому их сложно писать.

Короче говоря, SCSE выполняет поиск быстрее, чем grep, используя более простые в написании запросы с меньшим количеством ложноположительных результатов.

  • Индексирует файлы в соответствии с языковыми лексемами.
  • Запросы могут быть указаны в смеси общих для языка («идентификатор») или специфичных для языка сущностей («строка изображения» в COBOL).
  • Запросы пропускают пробелы и комментарии
  • Меньше ложных срабатываний, гораздо более быстрый поиск, чем grep
  • Возможность ведения журнала позволяет записывать матчи
  • Нажмите на совпадения, чтобы увидеть найденный текст в исходном файле
  • Можно настроить запуск редактора для найденных файлов в найденных местах.
  • Индексатор работает в Windows; результаты могут быть разделены между несколькими пользователями
  • Графический интерфейс на основе Java работает в Windows и Linux.

Скриншот поиска по кодовой базе Linux

Полное раскрытие: я директор Semantic Designs.

Я использую грэп . Поскольку я храню весь свой код по одному и тому же пути в своей файловой системе, я открываю свою оболочку Linux (но это будет работать и через cygwin в Windows) и cd в каталог.

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

Вас =~будут искать так:

grep -r "=~" .

В то время как .ссылки на текущий каталог -rделают поиск рекурсивным. Итак, если ваши программы сгруппированы по языку, вы можете перейти в каталог perl и искать только там.

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

Еще один минус — сложность. Чтобы стать хорошим с этим подходом, вам нужно будет провести с ними некоторое время.

grep становится все более и более полезным, чем больше команд linux/unix вы знаете. Вы могли бы, например find, найти все файлы, которые вы хотите (например, все файлы perl), а затем использовать grep, чтобы узнать, есть ли там что-то. Мне (как разработчику Java) иногда нужно искать файл класса внутри банки, но вокруг лежат тысячи банок, и я не знаю, где он находится. Итак, у меня есть командная строка, которая находит банки, перечисляет их содержимое и выводит только те, в которых есть требуемый файл. Я мог бы использовать ту же технику для поиска по содержимому файлов и т. д.

Итак, для этой конкретной проблемы: grep. Но в целом я рекомендую всю цепочку инструментов, которая идет с вашим unix.

Обычно я использую для этого агента Ранзака .

  • Свободно
  • Microsoft Windows XP (SP3)/2003/Vista/2008/7/2012/8/8.1
  • Поддерживает регулярные выражения для имени файла и текста запроса
  • Предварительный просмотр соответствующей строки из файлов в окне поиска
  • Параметры для экспорта результатов и сохранения критериев поиска

Скриншот

Скриншот окна Agent Ransack

Вы можете попробовать CodeSearch, поскольку он создан специально для этой цели. Особенности включают в себя:

  • Кроссплатформенность
  • Открытый исходный код
  • Индексирует файлы исходного кода для более быстрого поиска
  • Поддерживает регулярные выражения
  • Поддерживает поиск синтаксиса кода
  • Имеет пакет Emacs, поэтому вы можете запустить его из своего редактора.

Вот несколько полезных инструментов:

  • ack — инструмент, похожий на grep, оптимизированный для программистов.
  • rak — замена grep в чистом Ruby,
  • grin может помочь в поиске в каталогах, полных исходного кода (на основе Python),
  • Silver Searcher — это инструмент для поиска кода (клон Ack, но наборы функций с тех пор немного разошлись).
Возможно, стоит упомянуть, что grin поддерживает полный python re и по умолчанию пропускает каталоги .git, .svn и т. д.

Я научился в значительной степени полагаться на быстрый поиск и замену Ссылка

Сначала я очень скептически отнесся к этому, потому что пользовательский интерфейс выглядит очень старым (2003 год, работа с Windows 10), но после нескольких раз использования я понял, что программа была ответом на все мои проблемы и может быть использована для всех видов целей.

  • найти или заменить
  • во всех типах файлов
  • по нескольким подпапкам
  • бесплатное ПО для частной лицензии
  • коммерческая лицензия 25€
  • быстрый поиск
  • путь к файлу, файл и (несколько) строк объявлений
  • сохранить сеанс поиска
  • запустить несколько сеансов поиска одновременно

введите описание изображения здесь

Чтобы найти бесплатный эквивалент, посетите наш сайт findandreplace.sourceforge.net.