private void CheckIntegrity()

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