2017-05-30 7 views
0

私はアナライザーを書いて、それが機能していることを確認しました。Roslyn 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; 
    } 
} 

私はconstを解析するためのレポートを作成する簡単なクラスを作成しました。これは、ある時点で適切に下線を引いていました。これは、解像度がクイックアクションの下に表示されますので、トリガーしているように見えるアナライザです

あなたがそこに見ることができるようにエラー一覧 enter image description here

を追加

enter image description here

下の画像に思えるしかし下線が動作しませんメッセージがない警告です。メッセージを明示的に追加しているときにメッセージが表示されないのはなぜですか?

+0

を修正するために、このソリューションを使用して終了し、あなたのエラーウィンドウがあまりにも示してもらえますか?ルールセット・ファイルのメッセージの重大度を(警告から)オーバーライドした可能性があります。したがって、下線はありません。 – Tamas

+0

@Tamasは何を言っていましたか、あなたのVisual Studioの設定で、警告したい重大度を設定することもできます。 –

+0

エラーリストに警告が表示されるのは間違いありません。何らかの理由でメッセージが関連付けられていないだけです –

答えて

0

これは間違った警告によって発生しました。私のリソースにはマニフェストの例外がありませんでした。

リソースファイルの説明などを手に入れようとしているときに、アクセスできませんでした。したがって、アナライザーはトリガーしますが、メッセージは表示されません。

私はmissing manifest

関連する問題