Exemplo n.º 1
0
            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);
            }
Exemplo n.º 2
0
        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);
            }