假设您只处理具有一种特定类型源代码的项目,您的假设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 中是可行的)。