Roslynを使ってC#のソースコードを編集する - @ledsun blog でRoslynをつかうとC#のソースコードが編集出来るとわかりました。 編集内容を変えて練習します。 クラス名を変えてみます。
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; var st = CSharpSyntaxTree.ParseText(@" public class TargetClass { // This is a comment public void M() { 1 + 1; } } "); var root = st.GetRoot(); var klass = root.DescendantNodes().OfType<ClassDeclarationSyntax>().Single(); var rewriten = root.ReplaceNode(klass, klass.WithIdentifier( SyntaxFactory.ParseToken("Abc") ) ); Console.WriteLine(rewriten);
全体の流れはfor文の編集と同じです。 クラス名の変更ではつぎのようなコードが出てきます。
klass.WithIdentifier(
SyntaxFactory.ParseToken("Abc")
)
変更したいノード毎に定義されているWithXxxx
メソッドで変更したい項目を変更します。
WithXxxx
メソッド毎に受け取るSyntaxXxxx
型が決まっています。
SyntaxFactory.ParseXxxx
メソッドを使って、渡すインスタンスを作ります。
このメソッドの組み合わせの勘が効くようになるまでは練習が必要そうです。
実行結果です。
クラス名の後ろの改行は消えました。 この辺を保持しつつ変更する方法もあるのかもしれません。