public static IEnumerable <Violation> SubstringIndexValidationDelegate(CST.OAT.Rule rule, Clause clause) { if (clause.Data?.Count == null || clause.Data?.Count == 0) { yield return(new Violation(string.Format(Strings.Get("Err_ClauseNoData"), rule.Name, clause.Label ?? rule.Clauses.IndexOf(clause).ToString(CultureInfo.InvariantCulture)), rule, clause)); } if (clause.DictData != null && clause.DictData?.Count > 0) { yield return(new Violation(string.Format(Strings.Get("Err_ClauseDictDataUnexpected"), rule.Name, clause.Label ?? rule.Clauses.IndexOf(clause).ToString(CultureInfo.InvariantCulture), clause.Operation.ToString()), rule, clause)); } }
public IEnumerable <Violation> ScopedRegexValidationDelegate(CST.OAT.Rule rule, Clause clause) { if (rule is null) { yield return(new Violation($"Rule is null", new CST.OAT.Rule("RuleWasNull"))); yield break; } if (clause is null) { yield return(new Violation($"Rule {rule.Name} has a null clause", rule)); yield break; } if (Analyzer is null) { yield return(new Violation($"Rule {rule.Name} Clause {clause.Label ?? rule.Clauses.IndexOf(clause).ToString(CultureInfo.InvariantCulture)} ScopedRegexClause requires Analyzer be set.", rule, clause)); } if (clause is ScopedRegexClause src) { if (!src.Data?.Any() ?? true) { yield return(new Violation($"Rule {rule.Name} Clause {clause.Label ?? rule.Clauses.IndexOf(clause).ToString(CultureInfo.InvariantCulture)} Must provide some regexes as data.", rule, clause)); yield break; } foreach (var datum in src.Data ?? new List <string>()) { if (regexEngine.StringToRegex(datum, RegexOptions.None) is null) { yield return(new Violation($"Regex {datum} in Rule {rule.Name} Clause {clause.Label ?? rule.Clauses.IndexOf(clause).ToString(CultureInfo.InvariantCulture)} is not a valid regex.", rule, clause)); } } } else { yield return(new Violation($"Rule {rule.Name ?? "Null Rule Name"} clause {clause.Label ?? rule.Clauses.IndexOf(clause).ToString(CultureInfo.InvariantCulture)} is not a ScopedRegexClause", rule, clause)); } }