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



Ctags是最著名的标签工具。然而,标签也有一些缺点,不同的语言也有一些更好的选择。

例如,对于Ruby,我更喜欢使用开膛标记。对于JavaScript,人们通常使用jsctags。还有像CoffeeTags这样的东西。

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

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

谢谢。

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

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

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

最新更新