azh*_*kov 1 resharper resharper-sdk
我正在开发Resharper插件,我没有意识到Deamon阶段和元素问题分析器之间?
当我需要使用一个或另一个?如果它们都提供代码分析.
一个ElementProblemAnalyzer<T>只会呼吁在抽象语法树的特定节点,而守护阶段得到处理整个文件.您感兴趣的节点在ElementProblemAnalyzerAttribute构造函数中注册,T基类的参数是公共节点接口.如果你有兴趣,在短短一个节点类型,它是该节点的接口,如果你感兴趣的几个,这将是最常见的基本类型,也许ITreeNode还是ICSharpTreeNode.
[ElementProblemAnalyzer(typeof(ICSharpArgument),…)]
public class MyAnalyzer : ElementProblemAnalyzer<ICSharpArgument>
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要检查特定节点而不查看文件的其余部分,则可以使用元素问题分析器.你仍然可以从你所在的节点导航(例如,给定一个方法调用,你可以有一个参数的分析器,你可以从参数节点导航到方法调用节点,并查看是否参数与默认值相同,这意味着它是冗余代码).
如果您需要文件中的更多上下文,则可以使用守护进程阶段,例如,类中所有方法的列表,或者更多地控制抽象语法树的步骤 - 您可以跳过方法声明的子节点如果你对其中的陈述或表达不感兴趣.
如果有帮助,元素问题分析器实际上是作为守护进程实现的.它们仅受C#,VB,JS和XML支持.每种语言都有一个守护进程阶段,它会遍历AST进行错误检查,并且在执行此操作时,会调用Run每个对树的每个节点类型感兴趣的分析器.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |