ctags に Elixir を追加する

2015/09/25 11:09am

最近、Atom エディタを使っているが、シンボルの定義場所に移動するための Go to Declaration コマンドを動作させるためには ctags でインデックスしておく必要がある。

ただ、2015年9月の現時点では Elixir がサポートされていないようなので、自分で追加してやる必要がある。

% ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Mar 16 2015, 23:48:18
  ...
  Optional compiled features: +wildcards, +regex

ctags はコマンドラインオプションで新しい言語を定義できる。毎回指定するのが面倒な場合は、 $HOME/.ctags からオプションを読み込んでくれるようだ。

とりあえず、defmodule によるモジュール定義を読み込めるようにしてみよう。

--langdef=Elixir
--langmap=Elixir:.ex.exs
--regex-elixir=/^[ \t]*defmodule[ \t]+([a-zA-Z0-9_.]+)/\1/m,modules/

ctags を実行して、生成された tags ファイルを確認する。

% ctags lib/elixir/lib/task.ex
% cat tags
!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
...
Task	lib/elixir/lib/task.ex	/^defmodule Task do$/;"	m
TaskFinder	lib/elixir/lib/task.ex	/^      defmodule TaskFinder do$/;"	m

想定通り、モジュール定義がインデックスできているようだ。あとは 必要なだけ --regex-elixir オプションを追加していけばいい。 参考までに、関数定義を追加したものをここに置いておく。