コード例 #1
0
 private static void ReportDiagnosticWithSuppressionCheck(
     AnalyzerOptions options,
     Diagnostic diagnostic,
     Action <Diagnostic> reportDiagnostic)
 {
     if (!SuppressionManager.Get(options).IsSuppressed(diagnostic))
     {
         reportDiagnostic(diagnostic);
     }
 }
コード例 #2
0
        private void AddSuppressByComment(CodeFixContext context, Diagnostic diagnostic)
        {
            string title = $"Suppress {diagnostic.Id} with a comment";

            context.RegisterCodeFix(CodeAction.Create(title, ct =>
            {
                var suppressionManager = SuppressionManager.Get(
                    context.Document.Project.AnalyzerOptions);

                return(suppressionManager.AddSuppressionCommentAsync(
                           context.Document, diagnostic));
            }, title), diagnostic);
        }
コード例 #3
0
        private void AddSuppressInFile(CodeFixContext context, Diagnostic diagnostic)
        {
            string title = $"Suppress {diagnostic.Id} in suppression file";

            context.RegisterCodeFix(CodeAction.Create(title, ct =>
            {
                // Пытаемся найти suppression-файл внутри проекта
                var project        = context.Document.Project;
                var suppressionDoc = project.AdditionalDocuments
                                     .FirstOrDefault(d => !String.IsNullOrEmpty(d.FilePath) &&
                                                     d.FilePath.EndsWith(SuppressionManager.SuppressionFileExtension));

                var text = SuppressionManager.Get(project.AnalyzerOptions)
                           .AddSuppression(diagnostic)
                           .ToText();

                Solution solution;
                // Если файла нет, то создаём его
                if (suppressionDoc == null)
                {
                    // Есть открытый баг от 2015 года, что Roslyn
                    // не проставляет Build Action = AdditionalFiles
                    // https://github.com/dotnet/roslyn/issues/4655
                    solution = project.Solution.AddAdditionalDocument(
                        DocumentId.CreateNewId(project.Id, debugName: "Suppression File"),
                        name: project.Name + SuppressionManager.SuppressionFileExtension,
                        text: text);
                }
                // Если файл уже есть, дописываем в конец новую строчку и обновляем solution
                else
                {
                    solution = project.Solution
                               .WithAdditionalDocumentText(suppressionDoc.Id, text);
                }

                return(Task.FromResult(solution));
            }, title), diagnostic);
        }