假设我有两个 SyntaxTree
s 一个 和 乙 ,
哪里乙 已通过对 应用更改而生成一个 .
我想获得以下信息:
有没有这方面的 API?
如果没有,如何有效地计算?
此信息必须提供给 Roslyn,
自不变
GreenNode
s 在树之间共享。我能想到的一种解决方案是使用
SyntaxTree.GetChangedSpans()
然后查找相交的标记。然而,这感觉就像一个黑客,我不确定它是否总是准确的。
小的文本更改可能会对
SyntaxTree
产生很大影响:(例如,在表达式中用
*
替换 +
可能会改变其顺序/优先级)
最佳答案
我们internally have a differ它位于编译器层并因此使用绿色节点,我们只是没有将其作为 API 公开。实际上,这就是我们用来驱动 GetChangedSpans 的内容。我们故意不直接暴露绿色节点,因为这是一个实现细节。
API 不能公开没有具体原因。我认为当这个问题出现时,我们担心人们如何实际规范行为是什么,或者您可以从差异中期望的最小“优点”是什么。那,我们没有一个激励方案来实际确保我们的工作有用。
关于syntax - Roslyn 语法树差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945023/