public static bool TryGetRule()

in src/Sarif.Viewer.VisualStudio.Core/Sarif/Run.Extensions.cs [41:90]


        public static bool TryGetRule(this Run run, string ruleId, out ReportingDescriptor reportingDescriptor)
        {
            reportingDescriptor = null;

            if (run?.Tool?.Driver?.Rules != null && ruleId != null)
            {
                var rules = run.Tool.Driver.Rules as List<ReportingDescriptor>;
                reportingDescriptor = rules.Where(r => r.Id == ruleId).FirstOrDefault();
            }
            else if (ruleId != null)
            {
                // No rule in log file.
                // If the rule is a PREfast rule, create a "fake" rule using the external rule metadata file.
                if (RuleMetadata[ruleId] != null)
                {
                    string ruleName = null;
                    if (RuleMetadata[ruleId]["heading"] != null)
                    {
                        ruleName = RuleMetadata[ruleId]["heading"].Value<string>();
                    }

                    Uri helpUri = null;
                    if (RuleMetadata[ruleId]["url"] != null)
                    {
                        helpUri = new Uri(RuleMetadata[ruleId]["url"].Value<string>());
                    }

                    if (ruleName != null || helpUri != null)
                    {
                        reportingDescriptor = new ReportingDescriptor(
                            ruleId,
                            null,
                            ruleName,
                            null,
                            ruleName,
                            null,
                            shortDescription: null,
                            fullDescription: null,
                            messageStrings: null,
                            defaultConfiguration: null,
                            helpUri: helpUri,
                            help: null, // PREfast rules don't need a "help" property; they all have online documentation.
                            relationships: null,
                            properties: null);
                    }
                }
            }

            return reportingDescriptor != null;
        }