如何组合多个类似ctags的标签工具?

时间:2014-08-17 08:49:37

标签: javascript ruby tracing ctags jsctags

Ctags是最着名的标签工具。但是,ctags有一些缺点,从目标语言到语言有一些更好的选择。

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

那么,我的问题是,如何整合或组合这些工具? 是否可以编写shell脚本(或其他内容),例如:omni-tags,以便我可以将omni-tags用于所有类型的文件。它会自动调用不同的标签工具,具体取决于文件类型吗?

有时项目中有多种文件类型,因此如果我们可以使用统一工具生成标记会更方便。

感谢。

1 个答案:

答案 0 :(得分:1)

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

如果您的项目包含多种语言的代码,那么这将变得更加困难,但并非不可能。一个例子是Ruby gem,它包含Ruby .rb源文件和一些实现本机C扩展的.c.h文件。在这种情况下,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中可行。)