clang能否取代Exuberant Ctags?

3
为了研究新文件,我习惯使用适当的选项运行ctags。问题是,这个程序显然不支持C++11,而我一直很好地使用它,直到我发现这个程序的开发已经结束多年了。
现在,我需要一个等效的工具来处理C++11及以上版本的代码。我记得clang能够单独输出任何给定文件的AST,所以我想知道前端是否有类似的功能,可以与我之前使用ctags时做的事情相媲美。
例如,在C++模式下,以下是可以使用ctags轻松列出的实体。
ctags --list-kinds=c++
c  classes
d  macro definitions
e  enumerators (values inside an enumeration)
f  function definitions
g  enumeration names
l  local variables [off]
m  class, struct, and union members
n  namespaces
p  function prototypes [off]
s  structure names
t  typedefs
u  union names
v  variable definitions
x  external and forward variable declarations [off]

clang 能执行类似的任务吗?


exuberant ctags不支持哪个你需要的C++11特性?虽然ctags已经有一段时间没有发布新版本了,但是开发/支持仍在继续——最近一次官方SourceForge树的更改只有一周前。 - Chris Dodd
1
@ChrisDodd 我试图在一个大部分是模板化的源文件中列出一些函数和类,但什么也没有显示。然而官方网站上的最后更新是在2009年。根据你的评论,我检查了 ctags --version,我的构建基于svn trunk,所以我一定做错了什么,可能它不支持模板?我不确定这里可能有什么问题。 - user2485710
更新2016年:还有另一个项目universal-ctags声称在github上继续开发exuberant-ctags。在这个问题的背景下,特别是查看新的c/c++解析器 - Hotschke
2个回答

6
请看一下工具rtags。它使用clang重新编译整个项目,然后可以用来导航源码。唯一的问题是,在预处理器运行之后才会构建AST,因此被宏禁用的代码无法用于导航。
该项目维护一组elisp绑定,可允许您从emacs控制RTags。如需在vim中进行集成,请参阅lyutsShane Harper的第三方项目。

Linux/OSX only. - Lorenzo Gatti

0

LLVM/Clang项目中没有包含从ast生成标签文件的工具。然而,有几个在GitHub上使用clang来完成此任务的项目,可以通过以下链接找到:https://github.com/search?utf8=%E2%9C%93&q=clang+tags

以下两个项目引起了一些关注(星标、问题、拉取请求)

不幸的是,这些项目最近没有提交。但作者们仍会回应提出的问题。

免责声明 我知道单纯提供链接并不被鼓励。我将在找到时间测试这些项目并比较它们与Exuberant-ctagsUniversal-ctags的表现后来扩展此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接