Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写只在差异代码或新添加的代码上运行的C#分析器?_C#_Diff_Visual Studio Extensions_Static Code Analysis - Fatal编程技术网

如何编写只在差异代码或新添加的代码上运行的C#分析器?

如何编写只在差异代码或新添加的代码上运行的C#分析器?,c#,diff,visual-studio-extensions,static-code-analysis,C#,Diff,Visual Studio Extensions,Static Code Analysis,我有一些C#项目。其中一些克隆自TFS\AzureDevOps,另一些克隆自Git。对于这些项目,我正在编写一个定制的C#分析器。现在我需要检测我在分析器中设计的规则是否被新添加的代码违抗。其思想是只对新添加的代码运行静态代码分析。因此,基本上,它更多的是静态差异代码分析,其中差异会产生挂起的更改 为了简单起见,当您在visual studio中创建analyzer项目时,您可以从以下代码开始: //此方法已注册为针对“SymbolKind.NamedType”的符号操作 专用静态无效分析符号(

我有一些C#项目。其中一些克隆自TFS\AzureDevOps,另一些克隆自Git。对于这些项目,我正在编写一个定制的C#分析器。现在我需要检测我在分析器中设计的规则是否被新添加的代码违抗。其思想是只对新添加的代码运行静态代码分析。因此,基本上,它更多的是静态差异代码分析,其中差异会产生挂起的更改

为了简单起见,当您在visual studio中创建analyzer项目时,您可以从以下代码开始:

//此方法已注册为针对“SymbolKind.NamedType”的符号操作
专用静态无效分析符号(SymbolAnalysisContext)
{
变量namedTypeSymbol=(INamedTypeSymbol)context.Symbol;
//只查找那些名称包含小写字母的命名类型符号。
if(namedTypeSymbol.Name.toCharray().Any(char.IsLower))
{
//对于所有这些符号,生成诊断代码。
var diagnostic=diagnostic.Create(规则,namedTypeSymbol.Locations[0],namedTypeSymbol.Name);
//报告诊断结果
上下文。报告诊断(诊断);
}
}
我需要这样做:

//此方法已注册为针对“SymbolKind.NamedType”的符号操作
专用静态无效分析符号(SymbolAnalysisContext)
{
//在创建诊断并报告之前,我想检测
//所讨论的符号是否来自新添加的代码
if(IsNewCode(上下文))
{
变量namedTypeSymbol=(INamedTypeSymbol)context.Symbol;
//只查找那些名称包含小写字母的命名类型符号。
if(namedTypeSymbol.Name.toCharray().Any(char.IsLower))
{
//对于所有这些符号,生成诊断代码。
var diagnostic=diagnostic.Create(规则,namedTypeSymbol.Locations[0],namedTypeSymbol.Name);
//报告诊断结果
上下文。报告诊断(诊断);
}
}
}

我如何在这里实现
IsNewCode()
方法?

这个问题对于这个网站来说范围太广了,它针对的是与编程(代码)或程序员工具使用相关的特定问题。你的问题一点也不具体。如果你在开始发布之前花些时间阅读网页,了解网站的工作原理,你会发现你在这里的体验会更好。我怀疑你是否能够做到这一点,无论技术是什么。从根本上说,问题在于,在不了解周围环境的情况下,您无法分析代码片段,因此,如果您只想查看差异,我认为您无法做到这一点。但是,如果您保留旧程序,并使用从旧程序中获取的上下文分析差异,也许您可以做些什么。但本质上,您是在进行整个程序分析,以处理差异行。首先,感谢您的回复。第二,我的目标不是需要验证代码语义的复杂分析(语义分析)。我只是想用非常简单的规则来分析语法。例如,触发规则CA1305()。这个问题对于这个网站来说范围太广了,它是针对与编程(代码)或程序员工具使用相关的特定问题。你的问题一点也不具体。如果你在开始发布之前花些时间阅读网页,了解网站的工作原理,你会发现你在这里的体验会更好。我怀疑你是否能够做到这一点,无论技术是什么。从根本上说,问题在于,在不了解周围环境的情况下,您无法分析代码片段,因此,如果您只想查看差异,我认为您无法做到这一点。但是,如果您保留旧程序,并使用从旧程序中获取的上下文分析差异,也许您可以做些什么。但本质上,您是在进行整个程序分析,以处理差异行。首先,感谢您的回复。第二,我的目标不是需要验证代码语义的复杂分析(语义分析)。我只是想用非常简单的规则来分析语法。例如,触发规则CA1305()。