1

Ctags 是最著名的标签工具。但是,ctags 也有一些缺点,并且有一些更好的选择因目标语言而异。

例如,对于 Ruby,我更喜欢使用ripper-tags。而对于 JavaScript,人们经常使用jsctags。还有类似CoffeeTags的东西。

所以,我的问题是,如何整合或组合这些工具?是否可以编写一个 shell 脚本(或其他东西),例如:omni-tags,以便我可以omni-tags用于所有类型的文件。它会根据文件类型自动调用不同的标签工具吗?

有时一个项目中的文件类型会不止一种,所以如果我们可以使用一个统一的工具来生成标签会更方便。

谢谢。

4

1 回答 1

1

假设您只处理具有一种特定类型源代码的项目,您的假设omni-tags命令将很容易在 shell 或任何脚本语言(Perl、Python、Ruby 等)中实现。只需递归扫描项目目录,查找其中的主要文件类型(通过匹配文件扩展名,或使用 Unixfile程序),然后运行与该特定类型源文件关联的标签生成程序。

如果您的项目包含多种语言的代码,这将变得更加困难,但并非不可能。一个示例是包含 Ruby.rb源文件和一些.c实现.h原生 C 扩展的文件的 Ruby gem。在这种情况下,Ruby 和 C 文件通常是相当干净地分开的——即,gem 根目录下的一个目录树全是 Ruby,另一个全是 C。所以omni-tags可能可以编写来识别这种情况并ctags.c.h文件和ripper-tags文件.rb。由于大多数编辑器可以在每个项目中集成多个标签文件(至少,我知道 Emacs 可以),因此您将能够在 C 源代码中定义的符号和 Ruby 源代码中使用的符号之间导航(例如)。

最棘手的部分是如何处理您想要标记的多种语言混合的代码库。例如,对于您的 JavaScript 示例,您是否可能有一个包含 JavaScript 和 CoffeeScript 文件的目录?在这种情况下omni-tags,需要在每个源文件上运行适合每种语言的工具。如果编写标签生成工具以忽略任何类型不正确的文件,您可以只从项目的根目录运行每个文件,然后再次使用集成多个标签文件的编辑器。如果工具只需要提供正确类型的文件,那么omni-tags需要建立相关文件的索引,然后仅将正确文件的名称提供给每个工具。这不是不可能的,但需要更多的工作(与第一段中描述的最简单的情况相比,这可能在大约 10 行 Python 或 Ruby 中是可行的)。

于 2014-11-02T23:33:03.223 回答