public override object VisitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { if (context.structuredBodyNameLine().errorStructuredName() == null && context.structuredBodyEndLine() != null && (context.errorStructureLine() == null || context.errorStructureLine().Length == 0) && (context.structuredBodyContentLine() != null && context.structuredBodyContentLine().Length > 0)) { var bodys = context.structuredBodyContentLine(); foreach (var body in bodys) { if (body.expressionInStructure() != null) { FillInExpression(body.expressionInStructure()); } else { // KeyValueStructuredLine var structureKey = body.keyValueStructureLine().STRUCTURE_IDENTIFIER(); var structureValues = body.keyValueStructureLine().keyValueStructureValue(); var typeName = context.structuredBodyNameLine().STRUCTURE_NAME().GetText().Trim(); foreach (var structureValue in structureValues) { foreach (var expression in structureValue.expressionInStructure()) { FillInExpression(expression); } } FillInProperties(structureKey.GetText().Trim(), structureValues, typeName); } } } return(null); }
public override List <Diagnostic> VisitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { var result = new List <Diagnostic>(); var errorName = context.structuredBodyNameLine().errorStructuredName(); if (errorName != null) { result.Add(BuildLGDiagnostic(TemplateErrors.InvalidStrucName(errorName.GetText()), context: context.structuredBodyNameLine())); } if (context.structuredBodyEndLine() == null) { result.Add(BuildLGDiagnostic(TemplateErrors.MissingStrucEnd, context: context)); } var errors = context.errorStructureLine(); if (errors != null && errors.Length > 0) { foreach (var error in errors) { result.Add(BuildLGDiagnostic(TemplateErrors.InvalidStrucBody(error.GetText()), context: error)); } } else { var bodys = context.structuredBodyContentLine(); if (bodys == null || bodys.Length == 0) { result.Add(BuildLGDiagnostic(TemplateErrors.EmptyStrucContent, context: context)); } else { foreach (var body in bodys) { if (body.expressionInStructure() != null) { result.AddRange(CheckExpression(body.expressionInStructure())); } else { // KeyValueStructuredLine var structureValues = body.keyValueStructureLine().keyValueStructureValue(); var errorPrefix = "Property '" + body.keyValueStructureLine().STRUCTURE_IDENTIFIER().GetText() + "':"; foreach (var structureValue in structureValues) { foreach (var expression in structureValue.expressionInStructure()) { result.AddRange(CheckExpression(expression, errorPrefix)); } } } } } } return(result); }
public override object VisitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { if (context.structuredBodyNameLine().errorStructuredName() == null && context.structuredBodyEndLine() != null && (context.errorStructureLine() == null || context.errorStructureLine().Length == 0) && (context.structuredBodyContentLine() != null && context.structuredBodyContentLine().Length > 0)) { var bodys = context.structuredBodyContentLine(); foreach (var body in bodys) { if (body.expressionInStructure() != null) { FillInExpression(body.expressionInStructure()); } else { // KeyValueStructuredLine var structureValues = body.keyValueStructureLine().keyValueStructureValue(); foreach (var structureValue in structureValues) { foreach (var expression in structureValue.expressionInStructure()) { FillInExpression(expression); } } } } } return(null); }
/// <inheritdoc/> public override object VisitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { var result = new JObject(); var typeName = context.structuredBodyNameLine().STRUCTURE_NAME().GetText(); result[LGType] = typeName; var bodys = context.structuredBodyContentLine(); foreach (var body in bodys) { var isKVPairBody = body.keyValueStructureLine() != null; if (isKVPairBody) { // make it insensitive var property = body.keyValueStructureLine().STRUCTURE_IDENTIFIER().GetText().ToLowerInvariant(); var value = VisitStructureValue(body.keyValueStructureLine()); result[property] = value == null?JValue.CreateNull() : JToken.FromObject(value); } else { // When the same property exists in both the calling template as well as callee, the content in caller will trump any content in var value = EvalExpression(body.expressionInStructure().GetText(), body.expressionInStructure(), body.GetText()); if (value != null) { var propertyObject = JObject.FromObject(value); // Full reference to another structured template is limited to the structured template with same type if (propertyObject[LGType] != null && propertyObject[LGType].ToString() == typeName) { foreach (var item in propertyObject) { if (result.Property(item.Key, StringComparison.Ordinal) == null) { result[item.Key] = item.Value; } } } } } } return(result); }
public override AnalyzerResult VisitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { var result = new AnalyzerResult(); var bodys = context.structuredBodyContentLine(); foreach (var body in bodys) { var isKVPairBody = body.keyValueStructureLine() != null; if (isKVPairBody) { result.Union(VisitStructureValue(body.keyValueStructureLine())); } else { result.Union(AnalyzeExpression(body.objectStructureLine().GetText())); } } return result; }
/// <summary> /// Exit a parse tree produced by <see cref="LGTemplateParser.structuredTemplateBody"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="LGTemplateParser.structuredTemplateBody"/>. /// <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 VisitStructuredTemplateBody([NotNull] LGTemplateParser.StructuredTemplateBodyContext context) { return(VisitChildren(context)); }