2017-05-30 30 views
0

我寫了一個分析器,並驗證它正在工作。羅斯林VSIX不下劃線文檔報告後

[DiagnosticAnalyzer(LanguageNames.CSharp)] 
public class ConstDiagnosticAnalyzer : DiagnosticAnalyzer 
{ 
    public const string DiagnosticId = "LocalizationTool"; 

    private static readonly LocalizableString Title = new LocalizableResourceString(nameof(Resources.ConstAnalyzerTitle), Resources.ResourceManager, typeof(Resources)); 
    private static readonly LocalizableString MessageFormat = new LocalizableResourceString(nameof(Resources.ConstAnalyzerMessageFormat), Resources.ResourceManager, typeof(Resources)); 
    private static readonly LocalizableString Description = new LocalizableResourceString(nameof(Resources.ConstAnalyzerDescription), Resources.ResourceManager, typeof(Resources)); 
    private const string Category = "Naming"; 

    private static ResourceLocalizationRule localizationRule = new ResourceLocalizationRule(); 

    private static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, description: Description); 

    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } } 

    public override void Initialize(AnalysisContext context) 
    { 
     context.RegisterSyntaxNodeAction(AnalyzeConstDeclaration, SyntaxKind.FieldDeclaration); 
    } 

    public static void AnalyzeConstDeclaration(SyntaxNodeAnalysisContext context) 
    { 
     var fieldDeclaration = (FieldDeclarationSyntax)context.Node; 

     if (false == IsValidConstDeclaration(context, fieldDeclaration)) 
     { 
      return; 
     } 

     var firstVariable = fieldDeclaration.Declaration.Variables.FirstOrDefault(); 
     var firstSymbol = context.SemanticModel.GetDeclaredSymbol(firstVariable); 

     context.ReportDiagnostic(Diagnostic.Create(Rule, context.Node.GetLocation(), firstSymbol.Name)); 
    } 

    private static bool IsValidConstDeclaration(SyntaxNodeAnalysisContext context, FieldDeclarationSyntax fieldDeclaration) 
    { 
     if (false == fieldDeclaration.Modifiers.Any(SyntaxKind.ConstKeyword)) 
     { 
      return false; 
     } 

     return true; 
    } 
} 

我寫了一個簡單的類來報告分析常量。這在一點上得到了恰當的強調。它的分析似乎被觸發,因爲該決議下快速操作出現,但是下劃線未正常工作似乎下面的圖片

enter image description here

添加錯誤列表enter image description here

正如你可以看到有是沒有消息的警告。爲什麼當我明確附加信息時沒有消息

+0

你能告訴你的錯誤提示窗口呢?您可能會覆蓋規則集文件中的嚴重程度(來自警告),因此不會有下劃線。 – Tamas

+0

@Tamas說了什麼,還有,在Visual Studio設置中,您可以設置要警告的嚴重性級別。 –

+0

你是對的,出現在錯誤列表中的警告只是由於某種原因沒有與其關聯的消息 –

回答

0

事實證明,這是由於忽視的警告。我的資源缺少清單例外。

因此,當他們試圖抓住資源文件描述等,他們是無法訪問。所以分析儀會觸發,但它沒有消息。

我結束了使用此解決方案來解決missing manifest