背景
Gtags
是 GNU global 的一个组件, 可以支持多个语言的符号生成, 索引等, 号称为最快的, 支持语言最多的符号索引工作, 可以在多个平台集成使用. Gtags 同时也支持源码变动的增量更新, 大大缩短了符号生成的时间. 目前最近的版本是 6.6.8
, 版本变更相关的信息可以查看 https://www.gnu.org/software/global/whatsnew.html
Gtags 可以使用通过 --gtagslabel
配置不同的源码解析器以便支持不同的语言及格式 , 主要的解析器有:
-
default
不配置时默认使用的内置 parser,只支持 asm, c/c++, java, php, yacc 语言.
-
ctags
使用 exuberant-ctags 作为语言 parser,支持 40+ 种语言,只能生成定义索引不能生成引用索引。
-
new-ctags
使用universal-ctags作为语言parser,支持 100+ 种语言,只能生成定义索引不能生成引用索引。虽然貌似universal-ctags已经支持生成引用tags,但是依然不能配合gtags工作(见这里),我也试了各种操作都没成功,也许是因为这个PR没有被merge。
-
pygments
使用pygments作为语言parser,号称支持300+种语言。
-
native-pygments
对于原生支持的6种语言使用内置parser,其他语言使用pygments作为parser。
当我们使用默认解析器或 pygments 解析器时, 在有些情况下解析会报错终止, 导致符号生成失败, 错误如下.
Traceback (most recent call last): File "/usr/local/Cellar/global/6.6.8/share/gtags/script/pygments_parser.py", line 264, in main() File "/usr/local/Cellar/global/6.6.8/share/gtags/script/pygments_parser.py", line 261, in main handle_requests(langmap, parser_options) File "/usr/local/Cellar/global/6.6.8/share/gtags/script/pygments_parser.py", line 228, in handle_requests print(typ, tag, lnum, path, image) Unicode