Может ли ack / ag / grep напечатать имя функции? - PullRequest
1 голос
/ 06 июня 2019

Можно ли напечатать имя функции или класса, в котором встречается ключевое слово, при использовании ack или ag? Это то, чего я очень давно желал.

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

Обратите внимание, что моя цель - поиск по исходному коду на C, однако я бы предпочел универсальное решение, которое охватывает больше языков / синтаксиса.

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Как прокомментировал @Inian, было бы трудно получить надежное решение, используя ack, ag и grep, так как они не знают грамматику языков.

Однако для моего случая просмотра файлов исходного кода на языке C я использовал ack с условием OR для включения строк, начинающихся с определений функций.В моем случае все мои функции либо возвращали int, либо ничего.Следовательно, следующий код распечатал строки определения функции вместе со строками, содержащими KEYWORD:

ack 'KEYWORD|^void|^int'
1 голос
/ 10 июня 2019

Автор акк здесь.Нет, я не знаю ни одного grep-подобного инструмента, который бы хоть что-нибудь понимал в текстовых файлах, которые он ищет.Это то, о чем люди все время просят, но я никогда даже не задумывался о его реализации.

Вы сказали: «Я думаю, это будет довольно сложно, так как разные языки программирования имеют разные способы включения функций / классов«.Ты совершенно прав.Также рассмотрим такие вещи, как комментарии

/ * void foo () * /

и буквенные строки

printf ("void foo () ");

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

Посетите страницу Дополнительные инструменты на beyondgrep.com.Что-то вроде cscope может вам помочь.

...