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); }
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); }
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"); }
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); }
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); }
/// <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) { }
private string ExtractName(LGFileParser.TemplateDefinitionContext parseTree) { var name = parseTree.templateNameLine().templateName()?.GetText(); return(name ?? string.Empty); }
/// <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)); }