我正在尝试使用Roslyn突出显示C#代码,因为用户输入,编辑器将检查并突出显示相应的文本。
在Roslyn中有一种从旧树中获取新语法树的方法(使用SyntaxTree.WithChanges
),因此我可以在用户输入时获得新树。但每次获得新树时,我都必须走到整个树(使用SyntaxWalker
)以突出整个代码,这是非常糟糕的性能。
那么有什么办法可以从旧树中检测语法节点的变化(与文本更改不同,使用SyntaxTree.GetTextChanges()
)
例如案例:
旧文:class A {}
新文字:class /* A{}
您将看到文本差异仅为/ *,但语法节点结构更改还将包括/ *之后的文本,因为在/ *之后所有内容都被视为注释。
如何检测此类更改,以便我只需更新突出显示特定更改