2017-05-30 32 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