先日リリースされたGLOBAL-6.3.2で、yoshizowさん作の、Pygmentsを使ったプラグインパーサーが公式に取り込まれました。
[GLOBAL-6.3.2 released.]
(http://lists.gnu.org/archive/html/info-global/2014-09/msg00000.html)
つまりこれは、GLOBALがサポートしていなかった言語についても、Pygmentsの豊富な言語に対応したlexerを利用してGLOBALのタグを生成することができるということです。
そして、ctagsパーサーでは不可能だった参照タグもできる!
追記 (2014-09-16)
MacでHomebrewからインストールする場合、Homebrew側に修正が入り、--with-pygments
オプションが追加されました。
これを指定すると、Python 2.xが依存パッケージとなり、更に自動的にPygmentsをPypiからダウンロードしてインストールするようになっています。
したがって、Homebrewからインストールする場合には、
$ brew install global --with-exuberant-ctags --with-pygments
とすればOKです。
この記事で書いているファイルの修正などは不要になりました。
その際、設定ファイルのgtags.conf
が/usr/local/etc
にインストールされますが、既存のファイルが存在する場合には上書きはされません。
Pygmentsパーサーの設定を含まない古いバージョンの設定ファイルが残っていると期待どおりに動かないことがあるので、その時は以下のファイルを/usr/local/etc
に上書きすればよいでしょう。たぶん。
/usr/local/Cellar/global/6.3.2/share/gtags/gtags.conf
GLOBALのインストール
では、早速インストールしてみましょう。
ctagsパーサーも必要になるので、exuberant-ctags
もインストールしておきます。
$ brew install ctags
$ brew install global --with-exuberant-ctags
Pygmentsのインストール
当然、PythonおよびPygmentsパッケージを事前にインストールしておくことが必要です。
MacでシステムのPythonを弄りたくなければ、Homebrewで最新のPython 2.7.xをインストールした上でPygmentsを導入するとよいでしょう(Python 3.xには未対応)。
※ただし、システムのPython以外にインストールしたPygmentsを使う場合、後でスクリプトを修正する必要があります。
Pythonのインストール
$ brew install python
$ type python
python is /usr/local/bin/python
Pygmentsのインストール
$ pip install pygments
設定ファイルの修正
Macの場合、デフォルトの設定ファイルを修正して、パーサーで指定するライブラリファイルを変更してあげないと動きません。
デフォルトの設定ファイルは以下の2箇所に格納されてます。
/usr/local/Cellar/global/6.3.2/share/gtags/gtags.conf
/usr/local/etc/gtags.conf
上記を直接修正したり、~/.globalrc
にコピーしてユーザーの設定ファイルとしてもよいですが、
gtagsの実行時に読み込む設定ファイルは指定できるので、まずはコピーしたものを変更して動作を試してみましょう。
$ mkdir ~/global-test
$ cd ~/global-test
$ cp /usr/local/Cellar/global/6.3.2/share/gtags/gtags.conf .
設定ファイルではパーサーに/usr/local/Cellar/global/6.3.2/lib/gtags/pygments-parser.la
が指定されていますが、
Homebrewからインストールした場合にはそのファイルが存在しないため、pygments-parser.so
に書き換える必要があります。
:gtags_parser=Python\:/usr/local/Cellar/global/6.3.2/lib/gtags/pygments-parser.la:\
書き換え実行。
$ sed -i -e "s/pygments-parser\.la/pygments-parser.so/g" gtags.conf
スクリプトの修正
前述したとおり、HomebrewでインストールしたPythonなどPygmentsをインストールした場合など、
システムのPython以外にインストールしたPygemntsを使いたい場合、パーサーで実行されるpygments_parser.py
を修正しないとエラーになります。
エラーの理由はpygments_parser.py
内でPythonインタプリタに/usr/bin/python
が明示されているからなので、
それを/usr/bin/env python
などに変更します。
$ sed -i -e "s?#\!/usr/bin/python?#\!/usr/bin/env python?g" /usr/local/Cellar/global/6.3.2/share/gtags/script/pygments_parser.py
タグの生成
準備ができました。では、適当なソースコードを用意してタグを生成してみましょう。
[example.rb]
#!/usr/bin/env ruby
def hello(s)
puts "hello #{s}!"
end
hello('GLOBAL with Pygments')
$ gtags --gtagsconf=gtags.conf --gtagslabel=pygments --debug
File './example.rb' is handled as follows:
suffix: |.rb|
language: |Ruby|
parser: |parser|
library: |/usr/local/Cellar/global/6.3.2/lib/gtags/pygments-parser.so|
File './GPATH' is skipped by skip variable (type 1).
File './GRTAGS' is skipped by skip variable (type 1).
File './GTAGS' is skipped by skip variable (type 1).
--debug
を指定しているのは、Pygmentsが使われていることを確認するためです。
うむ、ちゃんと使われているね。
$ ls -l
total 152
-rw-r--r-- 1 mubae staff 16384 9 12 12:33 GPATH
-rw-r--r-- 1 mubae staff 16384 9 12 12:33 GRTAGS
-rw-r--r-- 1 mubae staff 16384 9 12 12:33 GTAGS
-rw-r--r-- 1 mubae staff 90 9 12 12:21 example.rb
-rw-r--r-- 1 mubae staff 24352 9 12 12:14 gtags.conf
タグが生成されました!
タグの参照
では、できたタグを参照してみましょう。
関数の定義場所
$ global -ax -t hello
hello /Users/mubae/global-test/example.rb 3
おお!
関数の参照場所
$ global -ax -r hello
hello 7 /Users/mubae/global-test/example.rb hello('GLOBAL with Pygments')
おおおおお!
マジでテンションあがる!!!
まとめ
これでまた、GNU GLOBALの至高っぷりが格段に強化されました。
一応、デフォルトのパーサーやctagsに比べて遅いという欠点などはあるようですが、正直そんなのどうでもいいくらい便利さがUPすることでしょう。
ちなみに、上記で行ったいくつかの修正点はHomebrew側のFormulaの修正で対応できるかもしれませんが、まだ見てません。