hitode909の日記

趣味はマリンスポーツですの日記です

Perlを静的解析してメソッド呼び出しを置き換えるやつ作ってる

最近ずっとやろうとしてるやつ.引数の中身だけ構造化されたPerlのデータ構造にすれば置き換えられると思ったので,やってみてる.


テストの一部から,こういうインターフェイスで書けるようになる予定というのを示します.これは動いていて,可変長の引数を受け付けるlへの呼び出しl(1, 2)をパースして,lに1と2を渡してるっていうのをパースできた.

    my $rule = ReplaceMethodCall::Rule->new(
        method_name => 'l',
        arguments => [qw(array)],
        apply => sub { 'success' },
    );

    subtest '2 argument' => sub {
        my $doc = doc_from_content('l(1 , 2)');
        my $statement = $doc->find('PPI::Statement')->[0];

        my $matched = $rule->match($statement);
        cmp_deeply $matched, isa('ReplaceMethodCall::Matched')
            & methods(
                method_name => 'l',
                part1 => [],
                part2 => [],
                structured_args => [ [1, 2] ],
            );
    };


上の例は簡単だからできたけど,なんかだんだん構文解析を行き当たりばったりで手で書くみたいになってきていて雲行きが怪しい.完成する見込ない気がする.Perl本体の何かを呼び出して何かするみたいにしたい.