独自DSLのエディターを作るのにXtextがあまりに便利なので、ふと思い立ってAsakusa FrameworkのBatch DSL・Flow DSLの独自言語を作ってみた。
DSLの定義とハイライト(色付け)・アウトラインの表示・基本的なソース整形まで、1日で出来た(笑)
Batch DSLの方は、バッチクラス(本来のJavaのBatch DSL)を生成するところまでやってみた。
DSLの見た目はとりあえず問題なさそうだけど、入力補完が出来ないと、やはり便利ではない。
Batch DSLの場合はJobクラス(Flow DSL)自体を補完する必要があるし、Flow DSLはオペレータークラスやメソッドを補完する必要がある。
JobクラスやOperatorクラスを探す部分を作るのは大変そう。
それと、(忘れてたけど)オペレーターは色々な種類の引数を定義できるんだよね。
これをDSL上で表現するのも面倒(やり方は分かっているので、本当に面倒なだけ)^^;
という訳でかなり簡単に独自のAsakusa DSLは実現できそうだけど、実用性はよく分からないので、とりあえずここまで。
本家のAsakusa DSLは、Javaをホスト言語とする内部DSLとなっている。
オペレーターをJavaで書くので、それを呼び出すFlow DSLもJavaで作ると、Javaのエディターの機能(クラスやメソッドの入力補完)がそのまま使える。
やはり内部DSLにもメリットがある。