我是StyleCop的新手,我需要为我工作的地方实施自己的编码标准。我正在使用VS2005,无法调试它。现在升级到VS2008 / 2010不是我们的选择。
我想知道很多事情:
1)如何识别方法参数?我尝试了以下但不知道去哪里,SDK文档并没有真正帮助。
private bool VisitElement(CsElement element, CsElement parentElement, object context)
{
if (element.ElementType == ElementType.Method)
{
...
2)我怎样才能发现声明不遵循作业? Ex.given。
int i; // Wrong, give warning
int i = 0; // True usage
3)我怎样才能发现文档中不仅包含1个命名空间或只包含1个类,如何获取其标识符(名称)?
真:
namespace Hello
{
class P{
}
}
- 错误:
namespace Hi {
class C {
}
class E {
}
}
namespace Ho {
class D {
}
}
4)我怎样才能找到函数调用并找出去哪里? (即阻止对特定功能的呼叫)
答案 0 :(得分:4)
对于#1,请查看Microsoft.StyleCop.CSharp.ReadabilityRules.CheckMethodParameters方法实现(在Reflector或http://stylecop.codeplex.com/SourceControl/changeset/view/64d44becb157#Project%2fSrc%2fAddIns%2fCSharp%2fAnalyzers%2fReadabilityRules.MethodParameters.cs中)。
对于#2,类似下面的内容应该可以解决问题:
private bool VisitExpression(Expression expression, Expression parentExpression, Statement parentStatement, CsElement parentElement, object context)
{
if (expression.ExpressionType == ExpressionType.VariableDeclarator)
{
VariableDeclaratorExpression declaratorExpression = (VariableDeclaratorExpression)expression;
if (declaratorExpression.Initializer == null)
{
this.AddViolation(parentElement, expression.LineNumber, "YourRule", declaratorExpression.Identifier.Text);
}
}
return true;
}
现有的SA1402(FileMayOnlyContainASingleClass)和SA1403(FileMayOnlyContainASingleNamespace)规则应该处理#3。如果它们不适用于您的方案,请指定您希望自定义规则以不同方式执行的操作。
#4应该是FxCop规则,而不是StyleCop规则,因为它与源代码样式无关。