寻找一个盲搜,分析源代码的工具,或者提供一些思路?

虽然现在基于 lsp 的语义分析更加先进,但是基于字符串的模糊搜索依旧有着巨大的作用。

尤其是当你面对一个不熟悉的项目的时候,不可能基于某个具体的 class/function 进行索引,这样效率太低。 在这种情况下,我一般先靠‘猜’。例如,如果是某个网络模块,我就会搜索 EventLoop 这样的类,或者搜索 epoll* 的函数。如果是某些业务,搜索 on*Handler, 或者搜索业务相关的英文单词。之后会顺藤摸瓜把相关联的其他模块,调用关系等搜索一遍,理清一个模块的脉络。这种情况下,难免要多次搜索,验证想法,那么一个好用的工具或者想法能大幅提高效率。

我过去的工具流就是 counsel-rg, 用久了觉得工作效率还可以提高。例如可以先搜索当前目录,然后依次向上层目录递进;对结果进行过滤后,可以保存这个过滤的结果,因为要验证想法,难免要在源码的海洋里多游几次,验证完可以方便的回滚到最初过滤的结果…

鄙人见识短浅,希望各位道友分享些好玩的插件,或者提供些这方面的思路。

最接近你描述的工具有两个:

  1. calltree.pl 相关资料:https://zhuanlan.zhihu.com/p/339910341
  2. lsp标准中的 call hierarchy:Specification
1 个赞

第一个不错啊,涨见识了。

Haskell Clean 的 Cloogle

https://cloogle.org/

Haskell 那个叫

https://hoogle.haskell.org/

要是 emacs 的插件就更好了,方便融入 emacs 的生态里面

这个牛哇 zsbd

坛子里大佬写的基于tag的工具也算一个吧? universal-ctags/citre: Ctags IDE on the True Editor (github.com)

1 个赞

这个还没法像 calltree.pl 和 call hierarchy 那样展示一个树吧

看不熟悉的调用链特别长的代码的时候还是很有用的,可惜 eglot 还不支持

如果你用 ccls 的话可以试一下我糊的 ~zhscn/eglot-ccls - sourcehut git ,只支持 ccls 的 :$ccls/call

(require 'ccls-call-hierarchy)
M-x ccls-call-hierarchy 
1 个赞

lsp 是支持的,前提是server要支持。命令是lsp-treemacs-call-hierarchy.

另外,不管lsp-mode还是citre都有peek,也是不错的功能。

counsel-etags-grep-current-directory,

用grep或rg搜索当前目录或父目录.

请教:counsel-etags-list-tag-in-current-file 这条命令如果想要 让返回的函数名像counsel-etags-list-tag这条命令一样包含类名修饰符有什么选项可以设置吗