private LGTemplateParser.BodyContext CheckTemplateBody(Template template, LGFileParser.TemplateBodyContext context, int startLine) { if (string.IsNullOrWhiteSpace(template.Body)) { var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.NoTemplateBody(template.Name), context, DiagnosticSeverity.Warning); _templates.Diagnostics.Add(diagnostic); } else { try { var templateBodyContext = AntlrParseTemplate(template.Body, startLine); if (templateBodyContext != null) { template.TemplateBodyParseTree = templateBodyContext; new TemplateBodyTransformer(template).Transform(); } } catch (TemplateException e) { e.Diagnostics.ToList().ForEach(u => _templates.Diagnostics.Add(u)); } } return(null); }
public override List <Diagnostic> VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context) { var result = new List <Diagnostic>(); var templateNameLine = context.templateNameLine(); var errorTemplateName = templateNameLine.errorTemplateName(); if (errorTemplateName != null) { result.Add(BuildLGDiagnostic(TemplateErrors.InvalidTemplateName, context: errorTemplateName, includeTemplateNameInfo: false)); } else { var templateName = context.templateNameLine().templateName().GetText(); if (visitedTemplateNames.Contains(templateName)) { result.Add(BuildLGDiagnostic(TemplateErrors.DuplicatedTemplateInSameTemplate(templateName), context: templateNameLine)); } else { visitedTemplateNames.Add(templateName); foreach (var reference in templates.References) { var sameTemplates = reference.Where(u => u.Name == templateName); foreach (var sameTemplate in sameTemplates) { result.Add(BuildLGDiagnostic(TemplateErrors.DuplicatedTemplateInDiffTemplate(sameTemplate.Name, sameTemplate.Source), context: templateNameLine)); } } if (result.Count > 0) { return(result); } else { if (context.templateBody() == null) { result.Add(BuildLGDiagnostic(TemplateErrors.NoTemplateBody(templateName), DiagnosticSeverity.Warning, context.templateNameLine())); } else { result.AddRange(Visit(context.templateBody())); } } } } return(result); }
private LGTemplateParser.BodyContext CheckTemplateBody(string templateName, string templateBody, LGFileParser.TemplateBodyContext context, int startLine) { if (string.IsNullOrWhiteSpace(templateBody)) { var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.NoTemplateBody(templateName), context, DiagnosticSeverity.Warning); _templates.Diagnostics.Add(diagnostic); } else { try { return(AntlrParseTemplate(templateBody, startLine)); } catch (TemplateException e) { e.Diagnostics.ToList().ForEach(u => _templates.Diagnostics.Add(u)); } } return(null); }