如何在Roslyn的类中使用变量声明?

时间:2013-08-06 07:33:28

标签: c# roslyn

在Roslyn中,如何查明私有成员变量是否未在课程中使用?

我的任务是评论任何未使用的私有变量。例如:

class Test
{
   private int I;// if it's not use then i need to comment it out.
}

2 个答案:

答案 0 :(得分:1)

创建语义模型并将其传递给Main方法中的Rewriter类构造函数。

SemanticModel sm = Compilation.Create("StylecopImplementor")
    .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
    .AddSyntaxTrees(fileTree).GetSemanticModel(fileTree);

Rewriter syntaxwr = new Rewriter(sm);

我将我的语义模型暴露给我的Rewritter类。

class Rewriter : SyntaxRewriter
{
    SemanticModel model { get; set; }
    IEnumerable<Diagnostic> diagonists;

    public Rewriter(SemanticModel pModel)
    {
        model = pModel;             
        diagonists = pModel.GetDiagnostics();
    }
}

然后我在VisitVariableDeclaration中使用下面的代码。

if (diagonists.Count() > 0)
{
    var diagitems = diagonists.Where(d => d.Info.MessageIdentifier.ToString().Equals("CS0168")).ToList();

    if (diagitems != null)
    {
        var ditem = diagitems.Where(d => d.Location.GetLineSpan(false).StartLinePosition.Line == node.GetLocation().GetLineSpan(false).StartLinePosition.Line).FirstOrDefault();

        if (ditem != null)
        {
            node = node.WithLeadingTrivia(Syntax.ParseTrailingTrivia("//"));                            
        }
    }
}

return base.VisitVariableDeclaration(node);

如果你的.cs文件没有被使用,它会在你的变量声明中发表评论。

答案 1 :(得分:0)

编译器(如VS.NET中所见)肯定会发出警告,你也可以从Roslyn收到警告(找到this)。

对于更深入的代码分析,我建议使用更高级的工具,例如Phoenix编译器。