2013-08-06 72 views
1

在Roslyn中,我如何知道私有成員變量是否不在類中使用?如何查找變量聲明不在Roslyn的類中使用?

我有任務來評論任何未使用的私有變量。例如:

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

所以你想評論所有的變量聲明:1.未在聲明位置初始化? 2.沒有在聲明類型內部進行賦值? –

+0

@AlexFilipovici - 我想評論變量,不使用意味着類中的unuse變量。 – KuldipMCA

+0

你有沒有想過如果變量會被其他類使用會發生什麼?你能提供一個例子嗎? –

回答

0

創建語義模型並將其傳遞給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文件中註釋您的變量聲明,如果它沒有被使用。

0

編譯器(如被看見在VS.NET)肯定會發出警告,你可以從羅斯林警告過(發現this)。

對於更深入的代碼分析,我建議使用更高級的工具,例如Phoenix編譯器。

+0

感謝您爲此使用警告來獲取此實現。 – KuldipMCA

相關問題