2

当我生成我的 ctags 文件时,它似乎也在解析评论中的内容。例如,使用 Vim 的插件 Tagbar,我可以在函数列表中看到不存在的函数,例如:

  • 只是

这里发生的是 ctags 正在进入评论并找到以下内容:

“这个函数是......”,认为“是”是一个函数,然后在标签文件中为它添加一个条目。

我想知道是否有一种简单的方法可以告诉 ctags 不要解析评论中的内容。

我发现显然在 5.8.0 之后发布了对此的修复,但我不确定这是否已经发布,我的 ctags 版本是 5.8.0。

这与 PHP 项目有关,但我想如果答案可以涵盖适用于任何编程语言的解决方案(如果可能的话)会很好。

例子:

以下对函数的注释会生成标签“is”并将其列为函数:

/**
 * This function is run to set certain preferences
 */
4

2 回答 2

2

ctags 5.8 中有一个错误。幸运的是,在它发布的一天后,jafl 提交了修订版 729 来解决这个问题。不幸的是,从那时起就没有发布过。

幸运的是,该项目已被分叉为“Universal Ctags”。这是从源代码安装的方法。

# Get rid of 5.8.
sudo apt-get remove exuberant-ctags

# autoconf is needed to assemble the configure files
sudo apt-get install autoconf autoconf-doc

git clone https://github.com/universal-ctags/ctags.git universal-ctags

cd universal-ctags

./autogen.sh
./configure
make

sudo make install
于 2015-12-21T17:36:33.740 回答
0

Exuberant Ctags 已经内置了多种语言。它们中的每一个都有一个针对该语言量身定制的自定义解析器。当然,在标签文件中包含注释/注释掉的代码部分是没有意义的。如果发生这种情况,这是语言解析器中的错误,必须在 ctags 代码中修复。

请注意,Exuberant Ctags 还支持通过正则表达式扩展到新语言。有了这些,排除注释可能非常困难/缓慢/不可能(因为可能需要考虑大量的先前上下文,并且语言语法可能无法完全表示为正则表达式),您将不得不忍受这一点,或者应用变通方法,例如在处理源之前对源中的评论进行预处理。

于 2014-03-24T15:37:43.093 回答