DaemonStage和ElementProblemAnalyzer有什么区别?

时间:2014-09-24 07:19:38

标签: resharper resharper-sdk

我正在开发Resharper插件,我在Deamon阶段和元素问题分析器之间没有意识到?

当我需要使用一个或另一个?如果他们都提供代码分析。

1 个答案:

答案 0 :(得分:7)

仅为抽象语法树中的特定节点调用ElementProblemAnalyzer<T>,而守护进程阶段将处理整个文件。您感兴趣的节点在ElementProblemAnalyzerAttribute构造函数中注册,基类的T参数是公共节点接口。如果您只对一个节点类型感兴趣,那么它就是该节点的界面,如果您对多个节点感兴趣,它将是最常见的基本类型,可能是ITreeNodeICSharpTreeNode

[ElementProblemAnalyzer(typeof(ICSharpArgument),…)]
public class MyAnalyzer : ElementProblemAnalyzer<ICSharpArgument>
{
  // ...
}

如果您只需要检查特定节点而不查看文件的其余部分,则可以使用元素问题分析器。你仍然可以从你所处的节点导航(例如,给定一个方法调用,你可以有一个参数分析器,你可以从参数节点导航到方法调用节点,然后看看如果参数与默认值相同,则表示它是冗余代码。

如果您需要文件中的更多上下文,您将使用守护程序阶段,例如,类中所有方法的列表,或者更多地控制抽象语法树的步骤 - 您可以跳过子节点如果您对。中的陈述或表达不感兴趣,请提供方法声明。

如果有帮助,元素问题分析器实际上是作为守护进程实现的。它们仅受C#,VB,JS和XML支持。每种语言都有一个守护进程阶段,用于遍历AST以进行错误检查,并且在执行此操作时,为每个对树的每个节点类型感兴趣的分析器调用Run