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); }