1

是否可以打印使用ackor时出现关键字的函数或类名ag?这是我很长一段时间以来一直非常渴望的东西。

我认为这会很棘手,因为不同的编程语言有不同的封装函数/类的方式。

请注意,我的目标是搜索 C 源代码,但是我更喜欢涵盖更多语言/语法的通用解决方案。

4

3 回答 3

2

正如@Inian 评论的那样,使用 很难获得强大的解决方案ack,因为他们不了解语言的语法。aggrep

但是,对于我查看 C 源代码文件的情况,我使用ack了一个OR条件来包含以函数定义开头的行。就我而言,我所有的功能要么返回,int要么什么都没有。因此,以下代码打印出函数定义行以及包含以下内容的行KEYWORD

ack 'KEYWORD|^void|^int'
于 2019-06-06T12:33:21.057 回答
1

尽管您列出的程序目前都没有此功能,但 Git 使用基于语言的正则表达式来实现git grep -L(在函数名称中搜索)。 这篇博客文章描述了它是如何工作的。当前的正则表达式列表位于此处的 git 源代码树中,并且可以按照上面博客中的描述进行扩展。

此外,ctags提供了一种从多种语言的文件中枚举标签的通用方法,但我(还)还没有找到一种方法来集成这个输出git grep -L

于 2020-07-01T18:31:27.837 回答
1

ack 的作者在这里。不,我不知道有任何 greplike 工具可以理解它正在搜索的文本文件的任何内容。这是人们一直要求的东西,但我从来没有想过要实现它。

你说“我认为这会很棘手,因为不同的编程语言有不同的方法来封装函数/类。” 你完全正确。另外,考虑评论之类的事情

/* 无效的 foo() */

和文字字符串

printf("void foo()");

这会导致任何搜索工具出现问题。字符串的这些实例void foo()实际上都不是函数声明。

查看 beyondgrep.com 上的更多工具页面。像cscope这样的东西可能会对你有所帮助。

于 2019-06-10T13:59:08.210 回答