ctags を使った見出し抽出

C, C++, Java…… この辺の言語の見出し抽出を、正規表現を使ったパターンマッチングで行うのは限界にきていた(というか最初から無理な話であったw)ので、見出しの抽出ロジックを outline info が独自に定義できるようにした。

設定したパターンにマッチしたら create_heading() が呼ばれる、というこれまでの受け身な方法と違い、新しい方法ではバッファのパース自体を outline info側で行う。

これにより、outline info は外部の構文解析プログラムを呼び出すなどの方法が採れる*1ようになり、見出し抽出に ctags を使ったりできる。

で、その ctags を使用して見出しの抽出を行う outline info 第1号が完成した↓

C++

C++用の outline info は「正規表現をこねくりまわして無理くり」な感じがありありと出ていて、見出しの一覧もかなり残念なものだったが、これでやっと本当に使えるレベルになったと思う。*2

outline info はひとつ作ると同じ要領で他のファイルタイプへと水平展開が容易なので、ctags が対応している他の言語用の outline info の改善/作成をこれからやっていこうと考えている。とりあえず最優先は C と Java

ctags が対応しているものの、正規表現によるパターンマッチで実用的な見出し抽出ができている言語*3についてはどうしようか迷っている。大幅な速度向上などが見込めるならやるべきかも知れないが、そう安易に外部プログラムに依存するのもどうかと思うし悩ましいところ。*4

*1:unite-outline は outline info がどのようにして見出しを抽出するかには関知しない。

*2:というか、正規表現で無駄な努力をし過ぎたw 最初からそうしとけよと。

*3:見出しとなる行に必ず予約語があるタイプの言語。スクリプト言語の多くはこれに該当する。

*4:ctags がなければ既存の実装に fallback するという線もあるけど、保守がめんどくなりそう。