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もメソッドとして認識されていますね。
(追記) あ、クラスの閉じ括弧があるから、不完全なのはクラスでした。(^^;