皆さんSytemVerilogでエディタのタグジャンプ用のTAGSを作るのはどのようにしているでしょうか? ctagsに正規表現でTAGのルールを定義したファイルを食わせて生成している方がほとんどではないでしょうか。Qiitaですとここに方法が書いてあります。WEB検索すると、SytemVerilogのTAGS生成方法でヒットするのはほとんどがこの方法です。
ただ、この方法はワンラインの正規表現での定義なので構文解析に限界があります。目立つところではbit a, b;
のように一行に複数の変数が宣言された場合に対応できない、/*と*/ではさまれたコメントが複数行にわたる場合、そこもctagsに解釈されてしまうなどの問題があります。
githubにはuniversal-ctagsというツールが登録されています。これはツールネイティブでSystemVerilogに対応しており、前記のctagsよりもはるかに多くの書式に対応しています。とても高機能なのに、SytemVerilogのTAGS生成ツールとしてはなぜかほとんど紹介されていないようです。現在でも活発にSystemVerilogへのサポートが拡充されていますので、是非皆さん使ってみてください。
レポジトリは以下になります。
https://github.com/universal-ctags/ctags
コンパイルとインストールの方法
特にstable releaseとかなさそうなので、HEADをコンパイルしてしまいましょう。
> git clone https://github.com/universal-ctags/ctags
> cd ctags
> ./autogen.sh
> ./configure --program-prefix=ex --prefix=$HOME/local #インストール先を$HOME/localに設定
> make
> make install
unversal-ctagsの使い方
上記の方法でインストールすると、~/local/binにexctagsというファイルができています。使用方法はctagsと全く同じです。TAGSを作りたいソースツリーの根本まで行き、vimの場合exctags -R
emacsの場合exctags -Re
となります。
追記
コメントで以下のctagsラッパの紹介をいただきました。並列実行での高速化以外に、ctagsで無視したいファイルを.gitignoreなどを元に自動判別してくるとのことです。便利そうなので是非見て下さい。
gitリポジトリ向けの高速ctagsラッパー:ptags