Esempio n. 1
0
        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);
        }