AとBの2 つSyntaxTree
の s
があり、BはAに変更を適用することによって生成されたとします。
次の情報を取得したいと思います。
- Bを生成するためにAから削除された SyntaxNode とトークン
- Bを生成するためにAに追加された SyntaxNode とトークン
このための API はありますか?
そうでない場合、これを効率的に計算するにはどうすればよいですか?
変更されていないGreenNode
はツリー間で共有されるため、この情報は Roslyn で利用できる必要があります。
私が考えることができる 1 つの解決策はSyntaxTree.GetChangedSpans()
、交差するトークンを使用してから検索することです。
ただし、それはハックのように感じられ、常に正確かどうかはわかりません。
小さなテキストの変更が : に大きな影響を与える可能性がありますSyntaxTree
(
たとえば、式で を置き換える*
と+
、その順序/優先順位が変わる可能性があります)。