4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

universal-ctagsを使おう

Last updated at Posted at 2020-11-17

皆さん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

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?