Ejemplo n.º 1
0
        private static void SerializeNode(object node, IFastJsonWriter writer, string?parentPropertyName, ref bool parentChildrenStarted, IFSharpSession session)
        {
            EnsureChildrenStarted(ref parentChildrenStarted, writer);
            writer.WriteStartObject();
            writer.WriteProperty("kind", AstTypeNames.Value[node.GetType()]);
            if (parentPropertyName != null)
            {
                writer.WriteProperty("property", parentPropertyName);
            }

            if (node is SyntaxTree.SynConst @const)
            {
                writer.WriteProperty("type", "token");
                if (@const is SyntaxTree.SynConst.String @string)
                {
                    writer.WritePropertyName("value");
                    writer.WriteValueFromParts("\"", @string.text, "\"");
                }
                else if (@const is SyntaxTree.SynConst.Char @char)
                {
                    writer.WritePropertyName("value");
                    writer.WriteValueFromParts("'", @char.Item, "'");
                }
                else
                {
                    if (ConstValueGetters.Value.TryGetValue(@const.GetType(), out var getter))
                    {
                        writer.WritePropertyName("value");
                        writer.WriteValue(getter(@const));
                    }
                }
            }
            else
            {
                writer.WriteProperty("type", "node");
                var tagName = GetTagName(node);
                if (tagName != null)
                {
                    writer.WriteProperty("value", tagName);
                }
            }
            var rangeGetter = GetRangeGetter(node.GetType());

            if (rangeGetter != null)
            {
                SerializeRangeProperty(rangeGetter(node), writer, session);
            }

            var childrenStarted = false;

            GetChildrenSerializer(node.GetType()).Invoke(node, writer, ref childrenStarted, session);
            EnsureChildrenEnded(childrenStarted, writer);
            writer.WriteEndObject();
        }
Ejemplo n.º 2
0
        private static void SerializeRangeProperty(Range.range range, IFastJsonWriter writer, IFSharpSession session)
        {
            writer.WritePropertyName("range");
            var startOffset = session.ConvertToOffset(range.StartLine, range.StartColumn);
            var endOffset   = session.ConvertToOffset(range.EndLine, range.EndColumn);

            writer.WriteValueFromParts(startOffset, '-', endOffset);
        }
Ejemplo n.º 3
0
 private static void SerializeEnum <TEnum>(TEnum value, IFastJsonWriter writer, string?parentPropertyName, ref bool parentChildrenStarted, IFSharpSession session)
     where TEnum : struct, IFormattable
 {
     EnsureChildrenStarted(ref parentChildrenStarted, writer);
     if (parentPropertyName != null)
     {
         writer.WriteStartObject();
         writer.WriteProperty("type", "value");
         writer.WriteProperty("property", parentPropertyName);
         writer.WriteProperty("value", EnumCache <TEnum> .Strings[value]);
         writer.WriteEndObject();
     }
     else
     {
         writer.WriteValue(EnumCache <TEnum> .Strings[value]);
     }
 }
Ejemplo n.º 4
0
 private static void SerializeIdentList(FSharpList <SyntaxTree.Ident> list, IFastJsonWriter writer, string?parentPropertyName, ref bool parentChildrenStarted, IFSharpSession session)
 {
     foreach (var ident in list)
     {
         SerializeIdent(ident, writer, parentPropertyName, ref parentChildrenStarted, session);
     }
 }
Ejemplo n.º 5
0
 private static void SerializeIdent(SyntaxTree.Ident ident, IFastJsonWriter writer, string?parentPropertyName, ref bool parentChildrenStarted, IFSharpSession session)
 {
     EnsureChildrenStarted(ref parentChildrenStarted, writer);
     writer.WriteStartObject();
     writer.WriteProperty("type", "token");
     writer.WriteProperty("kind", "SyntaxTree.Ident");
     if (parentPropertyName != null)
     {
         writer.WriteProperty("property", parentPropertyName);
     }
     writer.WriteProperty("value", ident.idText);
     SerializeRangeProperty(ident.idRange, writer, session);
     writer.WriteEndObject();
 }
Ejemplo n.º 6
0
 private static void SerializeList <T>(FSharpList <T> list, IFastJsonWriter writer, string?parentPropertyName, ref bool parentChildrenStarted, IFSharpSession session)
 {
     foreach (var item in list)
     {
         SerializeNode(item !, writer, null /* UI does not support list property names at the moment */, ref parentChildrenStarted, session);
     }
 }