/// <inheritdoc/> public override object VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context) { var startLine = context.Start.Line; var stopLine = context.Stop.Line; var templateNameLine = context.templateNameLine().TEMPLATE_NAME_LINE().GetText(); var(templateName, parameters) = ExtractTemplateNameLine(templateNameLine); if (_templates.Any(u => u.Name == templateName)) { var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.DuplicatedTemplateInSameTemplate(templateName), context.templateNameLine()); _templates.Diagnostics.Add(diagnostic); } else { var templateBody = context.templateBody().GetText(); var sourceRange = new SourceRange(context, _templates.Source); var template = new Template(templateName, parameters, templateBody, sourceRange); CheckTemplateName(templateName, context.templateNameLine()); CheckTemplateParameters(parameters, context.templateNameLine()); CheckTemplateBody(template, context.templateBody(), startLine); _templates.Add(template); } 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); }