Exemplo n.º 1
0
        public override List <string> VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context)
        {
            var templateNameContext = context.templateNameLine();

            if (templateNameContext.templateName().GetText().Equals(CurrentTarget().TemplateName))
            {
                return(Visit(context.templateBody()));
            }

            return(null);
        }
Exemplo n.º 2
0
        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(LGErrors.InvalidTemplateName, context: errorTemplateName));
            }
            else
            {
                var templateName = context.templateNameLine().templateName().GetText();

                if (visitedTemplateNames.Contains(templateName))
                {
                    result.Add(BuildLGDiagnostic(LGErrors.DuplicatedTemplateInSameTemplate(templateName), context: templateNameLine));
                }
                else
                {
                    visitedTemplateNames.Add(templateName);
                    foreach (var reference in lgFile.References)
                    {
                        var sameTemplates = reference.Templates.Where(u => u.Name == templateName);
                        foreach (var sameTemplate in sameTemplates)
                        {
                            result.Add(BuildLGDiagnostic(LGErrors.DuplicatedTemplateInDiffTemplate(sameTemplate.Name, sameTemplate.Source), context: templateNameLine));
                        }
                    }

                    if (result.Count > 0)
                    {
                        return(result);
                    }
                    else
                    {
                        if (context.templateBody() == null)
                        {
                            result.Add(BuildLGDiagnostic(LGErrors.NoTemplateBody(templateName), DiagnosticSeverity.Warning, context.templateNameLine()));
                        }
                        else
                        {
                            result.AddRange(Visit(context.templateBody()));
                        }
                    }
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        public override AnalyzerResult VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context)
        {
            var templateNameContext = context.templateNameLine();

            if (templateNameContext.templateName().GetText().Equals(CurrentTarget().TemplateName))
            {
                if (context.templateBody() != null)
                {
                    return(Visit(context.templateBody()));
                }
            }

            throw new Exception("template name match failed");
        }
Exemplo n.º 4
0
        private string ExtractBody(LGFileParser.TemplateDefinitionContext parseTree, string lgfileContent)
        {
            var templateBody = parseTree.templateBody();

            if (templateBody == null)
            {
                return(string.Empty);
            }

            var startLine = templateBody.Start.Line - 1;
            var stopLine  = templateBody.Stop.Line - 1;

            return(GetRangeContent(lgfileContent, startLine, stopLine));
        }
            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);
            }
Exemplo n.º 6
0
            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($"Not a valid template name line", context: errorTemplateName));
                }
                else
                {
                    var templateName = context.templateNameLine().templateName().GetText();

                    if (context.templateBody() == null)
                    {
                        result.Add(BuildLGDiagnostic($"There is no template body in template {templateName}", DiagnosticSeverity.Warning, context.templateNameLine()));
                    }
                    else
                    {
                        result.AddRange(Visit(context.templateBody()));
                    }

                    var parameters = context.templateNameLine().parameters();
                    if (parameters != null)
                    {
                        if (parameters.CLOSE_PARENTHESIS() == null ||
                            parameters.OPEN_PARENTHESIS() == null)
                        {
                            result.Add(BuildLGDiagnostic($"parameters: {parameters.GetText()} format error", context: context.templateNameLine()));
                        }
                    }
                }

                return(result);
            }
Exemplo n.º 7
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="LGFileParser.templateDefinition"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context)
 {
 }
Exemplo n.º 8
0
        private string ExtractName(LGFileParser.TemplateDefinitionContext parseTree)
        {
            var name = parseTree.templateNameLine().templateName()?.GetText();

            return(name ?? string.Empty);
        }
Exemplo n.º 9
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="LGFileParser.templateDefinition"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context)
 {
     return(VisitChildren(context));
 }