[英]How to combine multiple ctags-like tags tools?
Ctags是最著名的標簽工具。 但是,ctags有一些缺點,並且從目標語言到語言都有一些更好的選擇。
例如,對於Ruby,我更喜歡使用ripper-tags 。 對於JavaScript,人們經常使用jsctags 。 也有類似CoffeeTags的東西。
因此,我的問題是,如何集成或組合這些工具? 是否可以編寫一個shell腳本(或其他),例如: omni-tags
,這樣我就可以對所有類型的文件使用omni-tags
。 並且它會自動調用不同標簽工具取決於文件類型嗎?
有時一個項目中有多個文件類型,所以如果我們可以使用統一的工具來生成標簽,它將更加方便。
謝謝。
假設您只處理帶有一種特定類型源代碼的項目,那么您可以使用Shell或任何腳本語言(Perl,Python,Ruby等)輕松實現假設的omni-tags
命令。 只需遞歸掃描項目目錄,查找其中的主要文件類型(通過匹配文件擴展名或使用Unix file
程序),然后運行與該特定種類的源文件關聯的標簽生成程序。
如果您的項目中包含多種語言的代碼,這將變得更加困難,但並非沒有可能。 一個示例是一個Ruby gem,其中包含Ruby .rb
源文件以及一些實現本機C擴展的.c
和.h
文件。 在這種情況下,通常將Ruby和C文件完全分開-即,gem根目錄下的一個目錄樹全是Ruby,而另一個omni-tags
是C。因此,可以編寫omni-tags
來識別這種情況,並且在.c
和.h
文件上運行ctags
,在.rb
文件上運行ripper-tags
。 由於大多數編輯器可以在每個項目中集成多個標簽文件(至少,我知道Emacs可以這樣做),因此您將能夠在C源代碼中定義的符號和Ruby源代碼中使用的符號之間進行導航。
最棘手的部分是如何處理您要標記的多種語言混合在一起的代碼庫。 對於您的JavaScript示例,例如,您是否有可能同時包含JavaScript和CoffeeScript文件的目錄? 在這種情況下,需要使用omni-tags
在每個源文件上運行適合每種語言的工具。 如果編寫了標簽生成工具來忽略任何類型不正確的文件,則可以從項目的根目錄運行每個文件,然后再次使用集成多個標簽文件的編輯器。 如果僅需要向工具提供正確類型的文件,則omni-tags
需要為所討論的文件建立索引,然后僅將正確文件的名稱提供給每個工具。 這不是不可能的,但是需要做更多的工作(與第一段中描述的最簡單的情況相反,這可能在大約10行Python或Ruby中是可行的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.