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;
}