in DevSkim-DotNet/Microsoft.DevSkim.CLI/Verifier.cs [74:125]
private void CheckIntegrity()
{
string[] languages = Language.GetNames();
foreach (Rule rule in _rules.AsEnumerable().Select(x => x.DevSkimRule))
{
// Check for null Id
if (rule.Id == null)
{
_messages.Add(new ErrorMessage(Message: "Rule has empty ID", Path: rule.Name, File: rule.Source, Warning: true));
}
else
{
// Check for same ID
Rule? sameRule = _rules.Select(x => x.DevSkimRule).FirstOrDefault(x => x.Id == rule.Id);
if (sameRule is { } && _rules.Count(x => x.DevSkimRule.Id == rule.Id) > 1)
{
_messages.Add(new ErrorMessage(Message: "Two or more rules have a same ID", RuleID: sameRule.Id, File: sameRule.Source, Warning: true));
_messages.Add(new ErrorMessage(Message: "Two or more rules have a same ID", RuleID: rule.Id, File: rule.Source, Warning: true));
}
}
if (rule.AppliesTo != null)
{
// Check for unknown language
foreach (string lang in rule.AppliesTo)
{
if (!languages.Contains(lang))
{
_messages.Add(new ErrorMessage(Message: string.Format("Unknown language '{0}'", lang),
RuleID: rule.Id ?? string.Empty,
Path: "applies_to",
File: rule.Source,
Warning: true));
}
}
}
if (rule.DoesNotApplyTo != null)
{
foreach(string lang in rule.DoesNotApplyTo){
if (!languages.Contains(lang)){
_messages.Add(new ErrorMessage(Message: string.Format("Unknown language '{0}'", lang),
RuleID: rule.Id ?? string.Empty,
Path: "does_not_apply_to",
File: rule.Source,
Warning: true));
}
}
}
}
}