Beispiel #1
0
        public static IEnumerable <SuppressionManagerInitInfo> GetSuppressionInfo(this Solution solution, bool generateSuppressionBase)
        {
            var suppressionFiles = solution.GetAllAdditionalDocuments()
                                   .Where(additionalDoc => SuppressionFile.IsSuppressionFile(additionalDoc.FilePath));

            return(suppressionFiles.Select(file => new SuppressionManagerInitInfo(file.FilePath, generateSuppressionBase)));
        }
Beispiel #2
0
        public override void Apply(Workspace workspace, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (SuppressionManager.Instance?.BuildActionSetter == null)
            {
                return;
            }

            SuppressionFile suppressionFile = SuppressionManager.Instance?.GetSuppressionFile(AssemblyName);

            if (suppressionFile == null)
            {
                ShowLocalizedError(nameof(Resources.DiagnosticSuppression_FailedToFindSuppressionFileToSetBuildAction), AssemblyName);
                return;
            }

            bool successfullySetBuldAction;

            try
            {
                successfullySetBuldAction =
                    SuppressionManager.Instance.BuildActionSetter.SetBuildAction(suppressionFile.Path, _buildActionToSet);
            }
            catch (Exception)
            {
                successfullySetBuldAction = false;
            }

            if (!successfullySetBuldAction)
            {
                ShowLocalizedError(nameof(Resources.DiagnosticSuppression_FailedToSetBuildAction), suppressionFile.Path);
            }
        }
        protected override async Task SuppressSingleDiagnosticOnNodeAsync(DiagnosticData diagnostic, Document document, SyntaxNode syntaxRoot,
                                                                          SemanticModel semanticModel, SyntaxNode nodeWithDiagnostic)
        {
            if (diagnostic?.DataLocation?.SourceSpan == null)
            {
                return;
            }

            var(suppressionFileRoslynDoc, project) = await GetProjectAndSuppressionFileAsync(diagnostic.ProjectId);

            bool suppressionFileExists = suppressionFileRoslynDoc != null;

            if (!suppressionFileExists)
            {
                if (project == null)
                {
                    return;
                }

                SuppressionFile suppressionFile = SuppressionManager.CreateSuppressionFileForProjectFromCommand(project);
                suppressionFileExists = suppressionFile != null;
            }

            if (!suppressionFileExists ||
                !SuppressionManager.SuppressDiagnostic(semanticModel, diagnostic.Id, diagnostic.DataLocation.SourceSpan.Value,
                                                       diagnostic.DefaultSeverity, Package.DisposalToken))
            {
                ShowErrorMessage(suppressionFileRoslynDoc, project);
            }
        }
        public void CheckThatXmlFileDidNotChangeAfterSort(string fileName)
        {
            string suppressionFilePath = GetFileFullPath(fileName);
            string oldContent          = File.ReadAllText(suppressionFilePath);

            HashSet <SuppressMessage> messages = SuppressionFile.LoadMessages(_fileService, suppressionFilePath);
            var xDocument  = SuppressionFile.NewDocumentFromMessages(messages);
            var newContent = xDocument.GetXDocumentStringWithDeclaration();

            newContent.Should().Equals(oldContent);
        }
        public override void Apply(Workspace workspace, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            SuppressionFile suppressionFile = _filePath.IsNullOrWhiteSpace()
                                ? null
                                : SuppressionManager.Instance?.LoadSuppressionFileFrom(_filePath);

            if (suppressionFile == null)
            {
                ShowLocalizedError(nameof(Resources.DiagnosticSuppression_FailedToFindSuppressionFile), AssemblyName);
            }
        }
        public void CheckLoadOfSuppressionFile(string fileName)
        {
            const int expectedCount = 3629;

            var    messagesToCheck     = GetSuppressionMessagesToCheck();
            string suppressionFilePath = GetFileFullPath(fileName);

            HashSet <SuppressMessage> messages = SuppressionFile.LoadMessages(_fileService, suppressionFilePath);

            messages.Should().NotBeNull();
            messages.Should().HaveCount(expectedCount);
            messages.Should().ContainInOrder(messagesToCheck);
        }
        protected override async Task <IEnumerable <CodeActionOperation> > ComputeOperationsAsync(CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            Project project = Context.Document?.Project;

            if (project == null)
            {
                return(null);
            }

            SemanticModel semanticModel = await Context.Document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            if (semanticModel == null)
            {
                return(null);
            }

            SuppressionFile suppressionFile = SuppressionManager.Instance.GetSuppressionFile(project.AssemblyName);

            if (suppressionFile == null)
            {
                IEnumerable <CodeActionOperation> operationsToCreateSuppresionFile = GetOperationsToCreateSuppressionFile(project);

                if (operationsToCreateSuppresionFile == null)
                {
                    return(null);
                }

                var operationsWithSuppressionFileCreation = new List <CodeActionOperation>(4);
                operationsWithSuppressionFileCreation.AddRange(operationsToCreateSuppresionFile);
                operationsWithSuppressionFileCreation.Add(new SuppressInSuppressionFileOperation(Diagnostic, project.AssemblyName, semanticModel));
                return(operationsWithSuppressionFileCreation);
            }
            else
            {
                // For some reason the changes in suppression file will immediately reflect in the code editor
                // only if we call suppress diagnostic in code action manually, not via code action operation
                if (!SuppressionManager.SuppressDiagnostic(semanticModel, Diagnostic.Id, Diagnostic.Location.SourceSpan,
                                                           Diagnostic.DefaultSeverity, cancellationToken))
                {
                    var errorMessage = new LocalizableResourceString(nameof(Resources.DiagnosticSuppression_FailedToAddToSuppressionFile),
                                                                     Resources.ResourceManager, typeof(Resources), suppressionFile.Path);
                    System.Diagnostics.Debug.WriteLine($"{SharedConstants.PackageName.ToUpperInvariant()}: {errorMessage}");
                }

                return(new List <CodeActionOperation>(1)
                {
                    new ApplyChangesOperation(project.Solution)
                });
            }
        }
        public override void Apply(Workspace workspace, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            SuppressionFile suppressionFile = SuppressionManager.Instance.GetSuppressionFile(AssemblyName);

            if (suppressionFile == null)
            {
                ShowLocalizedError(nameof(Resources.DiagnosticSuppression_FailedToFindSuppressionFile), AssemblyName);
                return;
            }

            cancellationToken.ThrowIfCancellationRequested();

            if (!SuppressionManager.SuppressDiagnostic(_semanticModel, _diagnosticToSuppress.Id, _diagnosticToSuppress.Location.SourceSpan,
                                                       _diagnosticToSuppress.DefaultSeverity, cancellationToken))
            {
                ShowLocalizedError(nameof(Resources.DiagnosticSuppression_FailedToAddToSuppressionFile), suppressionFile.Path);
            }
        }
Beispiel #9
0
 public static IEnumerable <TextDocument> GetSuppressionFiles(this Project project) =>
 project.CheckIfNull(nameof(project)).AdditionalDocuments
 .Where(additionalDoc => SuppressionFile.IsSuppressionFile(additionalDoc.FilePath));
Beispiel #10
0
 public static IEnumerable <SuppressionManagerInitInfo> GetSuppressionInfoFromSolution(this Solution solution, bool generateSuppressionBase) =>
 from additionalDoc in solution.GetAllAdditionalDocumentsFromSolution()
     where SuppressionFile.IsSuppressionFile(additionalDoc.FilePath)
 select new SuppressionManagerInitInfo(additionalDoc.FilePath, generateSuppressionBase);