gpt4 book ai didi

c# - Visual Studio Code 分析 - 创建一个新规则来计算方法中的行数

转载 作者:行者123 更新时间:2023-11-30 21:19:47 26 4
gpt4 key购买 nike

更新

我反射(reflect)了 Microsoft.Cci.dll 并构建了我的规则。它工作正常。但是,我遇到了一些问题 here与所有的细节。源代码是 here .我不想通过提供所有详细信息来增加这个问题的长度。

我正在尝试编写一个代码分析规则,该规则会对具有以下方法的方法发出警告超过 100 行。我正在关注 this文章。但是,我无法按照 CodeAnalysis 提供的 API 来计算行数。例如,

public override ProblemCollection Check(Member member)
{
Method method = member as Method;
if (method == null)
{
return null;
}
CheckForLOC(method);
return Problems;
}

下面是CheckForLOC()

private void CheckForLOC(Method method)
{
int startLineForMethod = method.Body.SourceContext.StartLine;
int endLineForMethod = method.Body.SourceContext.EndLine;
if (endLineForMethod > startLineForMethod
&& ((endLineForMethod - startLineForMethod) > constMaximumLOCforAMethod))
{
Resolution resolution = GetResolution(method, constMaximumLOCforAMethod);
Problem problem = new Problem(resolution);
Problems.Add(problem);
}
}

在上面的代码中,method.Body.SourceContext.StartLine 和 method.Body.SourceContext.EndLine 返回相同的值。不知道为什么。

我也试过使用 StatementCollection :-

private void CheckForLOC(Method method)
{
int LOCPerMethod = 0;

if (method.Body.Statements.Count >= 1)
{
foreach (var statement in method.Body.Statements)
{
LOCPerMethod += GetNumberOfLinesPerStatement(statement);
}

}
if (LOCPerMethod > constMaximumLOCforAMethod)
{
Resolution resolution = GetResolution(method, constMaximumLOCforAMethod);
Problem problem = new Problem(resolution);
Problems.Add(problem);
}
}

private int GetNumberOfLinesPerStatement(Statement statement)
{
int LOCperStatement = 0;
if (statement.SourceContext.EndLine > statement.SourceContext.StartLine)
{
LOCperStatement = statement.SourceContext.EndLine - statement.SourceContext.StartLine;
}
return LOCperStatement;
}

在这里,Statement.SourceContext.StartLine 和 Statement.SourceContext.EndLine 也返回相同的值。我看到每个语句的 StartLine 都不同,需要从前一个语句中减去一个语句的 StartLine 值。但是,我看到结果不稳定。例如,在下面的方法片段中,它给我 Statement1 的行号作为 StartLineNumber 而它应该给出 If(SomeCondition) 的 StartLineNumber:-

if(SomeCondition)
{
Statement1
Statement2
Statement3
}

有人可以就此提供一些指导吗?

最佳答案

这更像是一种样式规则而不是正确性规则,因此与 FxCop 规则相比,它更适合作为 StyleCop 规则的候选者。

也就是说,如果您真的想通过 FxCop 实现它,您应该看看 Microsoft.FxCop.Sdk.MethodMetrics.CalculateLinesOfCode(Method) 是如何完成相同任务的。

关于c# - Visual Studio Code 分析 - 创建一个新规则来计算方法中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com