Roslyn - 从旧的语法树中获取语法节点更改

时间:2015-04-02 05:48:25

标签: c# roslyn

我正在尝试使用Roslyn突出显示C#代码,因为用户输入,编辑器将检查并突出显示相应的文本。

在Roslyn中有一种从旧树中获取新语法树的方法(使用SyntaxTree.WithChanges),因此我可以在用户输入时获得新树。但每次获得新树时,我都必须走到整个树(使用SyntaxWalker)以突出整个代码,这是非常糟糕的性能。 那么有什么办法可以从旧树中检测语法节点的变化(与文本更改不同,使用SyntaxTree.GetTextChanges()

例如案例:

旧文:class A {}

新文字:class /* A{}

您将看到文本差异仅为/ *,但语法节点结构更改还将包括/ *之后的文本,因为在/ *之后所有内容都被视为注释。

如何检测此类更改,以便我只需更新突出显示特定更改

0 个答案:

没有答案