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 (this.templates.Any(u => u.Name == templateName)) { var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.DuplicatedTemplateInSameTemplate(templateName), context.templateNameLine()); this.templates.Diagnostics.Add(diagnostic); } else { var templateBody = context.templateBody().GetText(); var sourceRange = new SourceRange(context, this.templates.Id); var template = new Template(templateName, parameters, templateBody, sourceRange); CheckTemplateName(templateName, context.templateNameLine()); CheckTemplateParameters(parameters, context.templateNameLine()); template.TemplateBodyParseTree = CheckTemplateBody(templateName, templateBody, context.templateBody(), startLine); this.templates.Add(template); } return(null); }
public void TestDuplicatedTemplates() { var diagnostics = GetDiagnostics("DuplicatedTemplates.lg"); Assert.AreEqual(2, diagnostics.Count); Assert.AreEqual(DiagnosticSeverity.Error, diagnostics[0].Severity); Assert.IsTrue(diagnostics[0].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1"))); Assert.AreEqual(DiagnosticSeverity.Error, diagnostics[1].Severity); Assert.IsTrue(diagnostics[1].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1"))); var lgFile = GetTemplates("DuplicatedTemplates.lg"); var allDiagnostics = lgFile.AllDiagnostics; Assert.AreEqual(4, allDiagnostics.Count); Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[0].Severity); Assert.IsTrue(allDiagnostics[0].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1"))); Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[1].Severity); Assert.IsTrue(allDiagnostics[1].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1"))); Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[2].Severity); Assert.IsTrue(allDiagnostics[2].Message.Contains("Duplicated definitions found for template: 'basicTemplate'")); Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[3].Severity); Assert.IsTrue(allDiagnostics[3].Message.Contains("Duplicated definitions found for template: 'basicTemplate2'")); }
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 (this.templates.Any(u => u.Name == templateName)) { var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.DuplicatedTemplateInSameTemplate(templateName), context.templateNameLine()); this.templates.Diagnostics.Add(diagnostic); } else { var templateBody = context.templateBody().GetText(); var file = context.Parent.Parent as LGFileParser.FileContext; var isLastTemplate = file.paragraph().Select(u => u.templateDefinition()).Where(u => u != null).Last() == context; if (!isLastTemplate) { templateBody = RemoveTrailingNewline(templateBody); } var sourceRange = new SourceRange(context, this.templates.Id); var template = new Template(templateName, parameters, templateBody, sourceRange); CheckTemplateName(templateName, context.templateNameLine()); CheckTemplateParameters(parameters, context.templateNameLine()); template.TemplateBodyParseTree = CheckTemplateBody(templateName, templateBody, context.templateBody(), startLine); this.templates.Add(template); } return(null); }