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