public void WriteResults()

in src/Analyzer.Reports/SarifReportWriter.cs [65:136]


        public void WriteResults(IEnumerable<IEvaluation> evaluations, IFileInfo templateFile, IFileInfo parameterFile = null)
        {
            this.RootPath ??= templateFile.DirectoryName;

            var resultsByFile = ReportsHelper.GetResultsByFile(evaluations, filesAlreadyOutput);

            // output files in sorted order, but always output root first
            var filesWithResults = resultsByFile.Keys.ToList();
            filesWithResults.Sort();

            int rootIndex = filesWithResults.IndexOf(templateFile.FullName);
            if (rootIndex != -1)
            {
                filesWithResults.RemoveAt(rootIndex);
                filesWithResults.Insert(0, templateFile.FullName);
            }

            foreach (var fileWithResults in filesWithResults)
            {
                // add analysis target if result not in root template
                ArtifactLocation analysisTarget = null;
                if (fileWithResults != templateFile.FullName)
                {
                    (var pathBelongsToRoot, var filePath) = GetFilePathInfo(templateFile.FullName);
                    analysisTarget = new ArtifactLocation
                    {
                        Uri = new Uri(
                            UriHelper.MakeValidUri(filePath),
                            UriKind.RelativeOrAbsolute),
                        UriBaseId = pathBelongsToRoot ? UriBaseIdString : null,
                    };
                }

                foreach ((var evaluation, var failedResults) in resultsByFile[fileWithResults])
                {
                    // get rule definition from first level evaluation
                    this.ExtractRule(evaluation);

                    // create location for each individual result
                    (var pathBelongsToRoot, var filePath) = GetFilePathInfo(fileWithResults);
                    var locations = failedResults.Select(result => new Location
                    {
                        PhysicalLocation = new PhysicalLocation
                        {
                            ArtifactLocation = new ArtifactLocation
                            {
                                Uri = new Uri(
                                    UriHelper.MakeValidUri(filePath),
                                    UriKind.RelativeOrAbsolute),
                                UriBaseId = pathBelongsToRoot ? UriBaseIdString : null,
                            },
                            Region = new Region { StartLine = result.SourceLocation.LineNumber },
                        },
                    }).ToList();

                    // Log result
                    SarifLogger.Log(this.rulesDictionary[evaluation.RuleId], new SarifResult
                    {
                            RuleId = evaluation.RuleId,
                            Kind = evaluation.Passed ? ResultKind.Pass : ResultKind.Fail, // Check Passed property in case we support outputting passed results in future
                            Level = evaluation.Passed ? FailureLevel.None : GetLevelFromSeverity(evaluation.Severity),
                            Message = new Message { Id = "default" }, // should be customized message for each result 
                            Locations = locations,
                            AnalysisTarget = analysisTarget,
                    });

                    totalResults++;
                }
            }

            filesAlreadyOutput.AddRange(filesWithResults);
        }