示例#1
0
            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);
            }
示例#2
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);
        }
            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);
            }
示例#4
0
        /// <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);
        }
示例#5
0
        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));
 }