RegisterCodeBlockAction 和 RegisterOperationBlockAction 之间的区别
Difference between RegisterCodeBlockAction and RegisterOperationBlockAction
我目前正在学习 Roslyn 的 DiagnosticAnalyzerAPI,我想问一下两者之间的根本区别是什么
1) AnalysisContext.RegisterCodeBlock
Register an action to be executed after semantic analysis of a method body or an expression appearing outside a method body. A code block action reports Diagnostics about code blocks.
和
2) AnalysisContext.RegisterOperationBlock
Register an action to be executed after semantic analysis of a method body or an expression appearing outside a method body. An operation block action reports Diagnostics about operation blocks.
这样我以后就可以为我的用例选择合适的。
RegisterCodeBlock
寄存器 Action
作用于 code block 的一部分,表示为 SyntaxNode
,可以是块语法节点、语句节点、表达式节点等等。
但是,RegisterOperationBlock
寄存器类似Action
,只是超过了operation block that is represented as IOperation的一些,可以是块操作,语句操作,表达式操作等等。
SyntaxNode
是AST中输入文本的对应表示,所以它依赖于语言,而不是IOperation
表示一些常见的动作(操作),例如简单的赋值,方法调用,转换,因为它代表了通用逻辑(语义)下的操作,所以它不依赖于语言。
我目前正在学习 Roslyn 的 DiagnosticAnalyzerAPI,我想问一下两者之间的根本区别是什么
1) AnalysisContext.RegisterCodeBlock
Register an action to be executed after semantic analysis of a method body or an expression appearing outside a method body. A code block action reports Diagnostics about code blocks.
和
2) AnalysisContext.RegisterOperationBlock
Register an action to be executed after semantic analysis of a method body or an expression appearing outside a method body. An operation block action reports Diagnostics about operation blocks.
这样我以后就可以为我的用例选择合适的。
RegisterCodeBlock
寄存器 Action
作用于 code block 的一部分,表示为 SyntaxNode
,可以是块语法节点、语句节点、表达式节点等等。
但是,RegisterOperationBlock
寄存器类似Action
,只是超过了operation block that is represented as IOperation的一些,可以是块操作,语句操作,表达式操作等等。
SyntaxNode
是AST中输入文本的对应表示,所以它依赖于语言,而不是IOperation
表示一些常见的动作(操作),例如简单的赋值,方法调用,转换,因为它代表了通用逻辑(语义)下的操作,所以它不依赖于语言。