コード例 #1
0
            /// <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);
            }