generic codedom
最近いろいろ小さくないライブラリに手を加えたラッパーみたいなのを作ろうとすることがあります。簡単なコードの生成ならConsole.WriteLine()で済ませてしまうのですが、複雑なコード生成になったらそうも言ってられないかなと思って、CodeDomみたいなのを簡単に使って書くようにしようと思うようになりました。
まあそれはいろんな意味で間違っていたわけですが。
そんなわけでCodeDomを使い始めたわけですが、すぐにこの.NET 1.x時代のAPIにうんざりして、せめてgeneric collectionくらい使って書けるようにしたくなって、System.CodeDomのAPIに対するラッパーを作って、コレクションの部分だけgenericにしてしまえ、ということになりました。そんなわけでConsole.WriteLine()でやっつけました。
https://github.com/atsushieno/generic-codedom
カスタム属性もコピーしておいた方が良いような気もするのですが、属性オブジェクトから属性のソースを生成するのが面倒というか出来なそうな気がするのでやっていません。まあpropertyを全部指定しちゃえば良いんでしょうけど。
最終的にビルドされるアセンブリ自体は50KB以上あるのですが、これはCodeNamespaceImportCollectionを除いて全て自動生成されています。実のところ、ちょっとだけdogfoodingしてみたのですが、CodeDomがそもそも使いでが悪いということに失望して、結局全然使っていません。まあ使いたい人がいるかもしれないので置いておきます。