/// <summary> /// Initializes a new instance of the <see cref="Analyzer"/> class. /// </summary> /// <param name="templates">Templates.</param> /// <param name="opt">Options for LG. </param> public Analyzer(Templates templates, EvaluationOptions opt = null) { Templates = templates; _templateMap = templates.ToDictionary(t => t.Name); // create an evaluator to leverage it's customized function look up for checking var evaluator = new Evaluator(Templates, opt); _expressionParser = evaluator.ExpressionParser; }
/// <summary> /// Return error messaages list. /// </summary> /// <returns>report result.</returns> public List <Diagnostic> Check() { var result = new List <Diagnostic>(); // check dup first var duplicatedTemplates = Templates .GroupBy(t => t.Name) .Where(g => g.Count() > 1) .ToList(); if (duplicatedTemplates.Count > 0) { duplicatedTemplates.ForEach(g => { var name = g.Key; var sources = string.Join(":", g.Select(x => x.Source)); var msg = $"Duplicated definitions found for template: {name} in {sources}"; result.Add(BuildLGDiagnostic(msg)); }); return(result); } // Covert to dict should be fine after checking dup templateMap = Templates.ToDictionary(t => t.Name); if (Templates.Count == 0) { result.Add(BuildLGDiagnostic( "File must have at least one template definition ", DiagnosticSeverity.Warning)); } Templates.ForEach(t => { currentSource = t.Source; result.AddRange(Visit(t.ParseTree)); }); return(result); }