我希望创建一个Roslyn诊断分析器来查找隐式强制转换,特别是如下所示的构造:
DateTimeOffset v = new DateTime();这意味着我要么必须检测隐式强制转换,要么必须找到对DateTimeOffset.op_Implicit(DateTime)的引用。
但问题是,罗斯林诊断分析器的工作是语法,而不是语义模型。因此,我能想到的唯一方法就是找出所有可能有隐式强制转换的语法结构,并对它们进行语义分析。然而,这是相当棘手的,因为即使我能够创建一个可以生成隐式转换的语法结构的详尽列表,对语言的更改也可以很容易地引入新的语法结构。
我的问题是,是否有一种替代上述办法的办法。具体来说,是否有可能编写一个违背语义模型的罗斯林诊断分析器?,还是我遗漏了一些东西,是否有比我上面描述的更好的替代方案?
发布于 2018-06-21 13:47:41
我相信你在这里是不正确的:
但问题是,罗斯林诊断分析器的工作是语法,而不是语义模型。
您可以注册诊断分析器,以对抗语法、语义模型或更高级别的“操作”类型。例如,Kasey有一个示例来检测零长度数组的创建.
你可以打电话给AnalysisContext.RegisterSemanticModelAction或AnalysisContext.RegisterOperationAction。您很可能希望使用一种操作类型的Conversion注册操作--这可能会删除大量的工作。
https://stackoverflow.com/questions/50969589
复制相似问题