Code Completion
・http://nemerle.org/Code_Completion
最近の目玉機能。ソースコードを食べてTypeTreeを作成します。自前でParserとかこさえる必要が無くなるので、ツール開発者には朗報かも。上記リンクを読むと雰囲気が掴めると思います。ただ、現在開発中の為、サンプルコードは古くなってしまっているので、簡単な例を紹介します。
hello.n (書きかけのソース)
class Calc { Add (x : int, y : int) : int { x + y; } Subtract (x : int, y : int) : int { // x - y; // } }
例えば、こんな書きかけのソースがあったとします。コイツをCode Completion Engineに食わせてみます。
app.h (エンジンの呼び出し)
using System.IO; using System.Console; using Nemerle.Compiler; using Nemerle.Completion; def file = "hello.n"; def engine = Engine (); def reader = StreamReader (file); engine.Sources.Add (file, reader.ReadToEnd ()); def tree = engine.GetTypeTree (); foreach (t in tree.Types) { WriteLine (t.Name); foreach (m in t.Methods) { WriteLine ($"$(t.Name)::$(m.Name)"); } }
で、次のようにコンパイルし、実行。
$ ncc -r:Nemerle.Compiler -o app.exe app.n $ mono app.exe
すると、このようにコンパイルの通らないソースでもTypeTreeが作成されます。
Calc Calc::Subtract Calc::Add Calc::.ctor
ソースが完全ではないSubtractもメソッドとして認識されていますね。
(追記) あ、クラスの閉じ括弧があるから、不完全なのはクラスでした。(^^;