private void SerializeInspection(IInspection inspection, IFastJsonWriter writer)
        {
            switch (inspection)
            {
            case SimpleInspection simple:
                SerializeSimpleInspection(simple, writer);
                break;

            case MemoryInspection memory:
                SerializeMemoryInspection(memory, writer);
                break;

            case MemoryGraphInspection graph:
                SerializeMemoryGraphInspection(graph, writer);
                break;

            case InspectionGroup group:
                SerializeInspectionGroup(group, writer);
                break;

            default:
                writer.WriteValue("Unsupported inspection type: " + inspection.GetType().Name);
                break;
            }
        }
Esempio n. 2
0
        //private void SerializeSymbol(ISymbol symbol, IFastJsonWriter writer, string relationToParent) {
        //    RuntimeHelpers.EnsureSufficientExecutionStack();
        //    writer.WriteStartObject();
        //    writer.WriteProperty("type", "symbol");
        //    writer.WriteProperty("property", relationToParent);
        //    writer.WriteProperty("kind", symbol.Kind.ToString());
        //    writer.WritePropertyStartArray("children");
        //    writer.WriteStartObject();
        //    writer.WriteProperty("type", "property");
        //    writer.WriteProperty("property", "Name");
        //    writer.WriteProperty("value", symbol.Name);
        //    writer.WriteEndObject();
        //    writer.WriteEndArray();
        //    writer.WriteEndObject();
        //}

        private void SerializeOperation(IOperation operation, IFastJsonWriter writer)
        {
            RuntimeHelpers.EnsureSufficientExecutionStack();
            writer.WriteStartObject();
            writer.WriteProperty("type", "operation");
            writer.WriteProperty("property", "Operation");
            writer.WriteProperty("kind", operation.Kind.ToString());
            if (operation.ConstantValue.HasValue)
            {
                writer.WritePropertyStartArray("children");
                writer.WriteStartObject();
                writer.WriteProperty("type", "property-only");
                writer.WriteProperty("property", "Value");
                writer.WritePropertyName("value");
                switch (operation.ConstantValue.Value)
                {
                case int i: writer.WriteValue(i); break;

                case string s: writer.WriteValueFromParts("\"", s, "\""); break;

                case var v: writer.WriteValue(v?.ToString()); break;
                }
                writer.WriteEndObject();
                writer.WriteEndArray();
            }

            writer.WriteEndObject();
        }
Esempio n. 3
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);
     }
 }
Esempio n. 4
0
 public static void WriteSpan(this IFastJsonWriter writer, TextSpan span)
 {
     writer.WriteStartObject();
     writer.WriteProperty("start", span.Start);
     writer.WriteProperty("length", span.Length);
     writer.WriteEndObject();
 }
Esempio n. 5
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);
     }
 }
Esempio n. 6
0
        public void WriteResult(IFastJsonWriter writer, object result, IWorkSession session)
        {
            if (result == null)
            {
                writer.WriteValue((string)null);
                return;
            }

            var targetName = session.GetTargetName();

            if (targetName == TargetNames.Ast)
            {
                var astTarget = _astTargets.GetValueOrDefault(session.LanguageName);
                astTarget.SerializeAst(result, writer, session);
                return;
            }

            if (targetName == TargetNames.Run)
            {
                _executor.Serialize((ExecutionResult)result, writer);
                return;
            }

            var decompiler = _decompilers[targetName];

            using (var stream = (Stream)result)
                using (var stringWriter = writer.OpenString()) {
                    decompiler.Decompile(stream, stringWriter);
                }
        }
Esempio n. 7
0
        private void WriteSignatureDocumentation(
            IFastJsonWriter writer,
            SignatureHelpItemData selectedItem,
            SignatureHelpParameterData?selectedParameter,
            CancellationToken cancellationToken
            )
        {
            writer.WritePropertyStartObject("info");
            writer.WritePropertyStartArray("parts");
            var documentation = selectedItem.DocumentationFactory(cancellationToken);

            writer.WriteTaggedTexts(documentation);
            writer.WriteEndArray();

            if (selectedParameter == null)
            {
                writer.WriteEndObject();
                return;
            }

            writer.WritePropertyStartObject("parameter");
            writer.WriteProperty("name", selectedParameter.Name);

            writer.WritePropertyStartArray("parts");
            var parameterDocumentation = selectedParameter.DocumentationFactory(cancellationToken);

            writer.WriteTaggedTexts(parameterDocumentation);
            writer.WriteEndArray();

            writer.WriteEndObject();
            writer.WriteEndObject();
        }
        private void SerializeNode(SyntaxNode node, IFastJsonWriter writer, string specialParentPropertyName = null)
        {
            writer.WriteStartObject();
            writer.WriteProperty("type", "node");
            writer.WriteProperty("kind", RoslynSyntaxHelper.GetKindName(node.RawKind));
            var parentPropertyName = specialParentPropertyName ?? RoslynSyntaxHelper.GetParentPropertyName(node);

            if (parentPropertyName != null)
            {
                writer.WriteProperty("property", parentPropertyName);
            }
            SerializeSpanProperty(node.FullSpan, writer);
            writer.WritePropertyStartArray("children");
            foreach (var child in node.ChildNodesAndTokens())
            {
                if (child.IsNode)
                {
                    SerializeNode(child.AsNode(), writer);
                }
                else
                {
                    SerializeToken(child.AsToken(), writer);
                }
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
Esempio n. 9
0
        private void WriteSignatureParts(
            IFastJsonWriter writer,
            SignatureHelpItemData item,
            SignatureHelpItemsData items,
            out SignatureHelpParameterData?selectedParameter
            )
        {
            selectedParameter = null;
            writer.WritePropertyStartArray("parts");
            writer.WriteTaggedTexts(item.PrefixDisplayParts);
            var parameterIndex = 0;

            foreach (var parameter in item.Parameters)
            {
                if (parameterIndex > 0)
                {
                    writer.WriteTaggedTexts(item.SeparatorDisplayParts);
                }
                var selected = items.ArgumentIndex == parameterIndex;
                writer.WriteTaggedTexts(parameter.PrefixDisplayParts, selected);
                writer.WriteTaggedTexts(parameter.DisplayParts, selected);
                writer.WriteTaggedTexts(parameter.SuffixDisplayParts, selected);
                if (selected)
                {
                    selectedParameter = parameter;
                }
                parameterIndex += 1;
            }
            writer.WriteTaggedTexts(item.SuffixDisplayParts);
            writer.WriteEndArray();
        }
Esempio n. 10
0
 public void WriteResult(IFastJsonWriter writer, object result)
 {
     if (result != null)
     {
         writer.WriteProperty("decompiled", (string)result);
     }
 }
 private void SerializeMemoryGraphReference(IFastJsonWriter writer, MemoryGraphReference reference)
 {
     writer.WriteStartObject();
     writer.WriteProperty("from", reference.From.Id);
     writer.WriteProperty("to", reference.To.Id);
     writer.WriteEndObject();
 }
        private void SerializeOutput(IReadOnlyList <object> output, IFastJsonWriter writer)
        {
            TextWriter openStringWriter = null;

            void CloseStringWriter()
            {
                if (openStringWriter != null)
                {
                    openStringWriter.Close();
                    openStringWriter = null;
                }
            }

            foreach (var item in output)
            {
                switch (item)
                {
                case SimpleInspection inspection:
                    CloseStringWriter();
                    SerializeSimpleInspection(inspection, writer);
                    break;

                case MemoryInspection memory:
                    CloseStringWriter();
                    SerializeMemoryInspection(memory, writer);
                    break;

                case MemoryGraphInspection graph:
                    CloseStringWriter();
                    SerializeMemoryGraphInspection(graph, writer);
                    break;

                case string @string:
                    if (openStringWriter == null)
                    {
                        openStringWriter = writer.OpenString();
                    }
                    openStringWriter.Write(@string);
                    break;

                case char[] chars:
                    if (openStringWriter == null)
                    {
                        openStringWriter = writer.OpenString();
                    }
                    openStringWriter.Write(chars);
                    break;

                case null:
                    break;

                default:
                    CloseStringWriter();
                    writer.WriteValue("Unsupported output object type: " + item.GetType().Name);
                    break;
                }
            }
            openStringWriter?.Close();
        }
Esempio n. 13
0
 public static void WriteTaggedTexts <TCollection>(this IFastJsonWriter writer, TCollection texts, bool selected = false)
     where TCollection : IEnumerable <TaggedText>
 {
     foreach (var text in texts)
     {
         writer.WriteTaggedText(text, selected);
     }
 }
Esempio n. 14
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);
        }
Esempio n. 15
0
 public static void WriteSymbolDisplayParts <TCollection>(this IFastJsonWriter writer, TCollection parts, bool selected = false)
     where TCollection : IEnumerable <SymbolDisplayPart>
 {
     foreach (var part in parts)
     {
         writer.WriteSymbolDisplayPart(part, selected);
     }
 }
Esempio n. 16
0
 public static void WriteChange(this IFastJsonWriter writer, TextChange change)
 {
     writer.WriteStartObject();
     writer.WriteProperty("start", change.Span.Start);
     writer.WriteProperty("length", change.Span.Length);
     writer.WriteProperty("text", change.NewText);
     writer.WriteEndObject();
 }
Esempio n. 17
0
 private static void EnsureChildrenEnded(bool childrenStarted, IFastJsonWriter writer)
 {
     if (!childrenStarted)
     {
         return;
     }
     writer.WriteEndArray();
 }
 public static void WriteValueFromParts(this IFastJsonWriter writer, int part1, char part2, int part3)
 {
     using (var stringWriter = writer.OpenString()) {
         stringWriter.Write(part1);
         stringWriter.Write(part2);
         stringWriter.Write(part3);
     }
 }
Esempio n. 19
0
        public void SerializeAst(object ast, IFastJsonWriter writer, IWorkSession session)
        {
            writer.WriteStartArray();
            var visitor = new SerializerVisitor(writer);

            visitor.VisitElement((LangElement)ast);
            writer.WriteEndArray();
        }
 public static void WriteTagsProperty(this IFastJsonWriter writer, string name, ImmutableArray <string> tags)
 {
     writer.WritePropertyStartArray(name);
     foreach (var tag in tags)
     {
         writer.WriteValue(FastConvert.StringToLowerInvariantString(tag));
     }
     writer.WriteEndArray();
 }
Esempio n. 21
0
 private static void EnsureChildrenStarted(ref bool childrenStarted, IFastJsonWriter writer)
 {
     if (childrenStarted)
     {
         return;
     }
     writer.WritePropertyStartArray("children");
     childrenStarted = true;
 }
Esempio n. 22
0
        public void SerializeAst(object ast, IFastJsonWriter writer, IWorkSession session)
        {
            var root = ((SyntaxTree.ParsedInput.ImplFile)ast).Item;

            writer.WriteStartArray();
            var childrenStarted = true;

            SerializeNode(root, writer, null, ref childrenStarted, session.FSharp());
            writer.WriteEndArray();
        }
Esempio n. 23
0
        private static void SerializeNode(object node, IFastJsonWriter writer, [CanBeNull] 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 Ast.SynConst @const)
            {
                writer.WriteProperty("type", "token");
                if (@const is Ast.SynConst.String @string)
                {
                    writer.WritePropertyName("value");
                    writer.WriteValueFromParts("\"", @string.text, "\"");
                }
                else if (@const is Ast.SynConst.Char @char)
                {
                    writer.WritePropertyName("value");
                    writer.WriteValueFromParts("'", @char.Item, "'");
                }
                else
                {
                    var getter = ConstValueGetters.Value.GetValueOrDefault(@const.GetType());
                    if (getter != null)
                    {
                        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();
        }
Esempio n. 24
0
 public static void WriteTaggedText(this IFastJsonWriter writer, TaggedText text, bool selected)
 {
     writer.WriteStartObject();
     writer.WriteProperty("text", text.Text);
     writer.WriteProperty("kind", text.Tag);
     if (selected)
     {
         writer.WriteProperty("selected", true);
     }
     writer.WriteEndObject();
 }
Esempio n. 25
0
 public static void WriteSymbolDisplayPart(this IFastJsonWriter writer, SymbolDisplayPart part, bool selected)
 {
     writer.WriteStartObject();
     writer.WriteProperty("text", part.ToString());
     writer.WriteProperty("kind", FastConvert.EnumToLowerInvariantString(part.Kind));
     if (selected)
     {
         writer.WriteProperty("selected", true);
     }
     writer.WriteEndObject();
 }
 public static void WriteTaggedText(this IFastJsonWriter writer, TaggedText text, bool selected)
 {
     writer.WriteStartObject();
     writer.WriteProperty("text", text.Text);
     writer.WriteProperty("kind", FastConvert.StringToLowerInvariantString(text.Tag));
     if (selected)
     {
         writer.WriteProperty("selected", true);
     }
     writer.WriteEndObject();
 }
Esempio n. 27
0
        private void SerializeOutput(IReadOnlyList <object> output, IFastJsonWriter writer)
        {
            TextWriter openStringWriter = null;

            foreach (var item in output)
            {
                switch (item)
                {
                case InspectionResult inspection:
                    if (openStringWriter != null)
                    {
                        openStringWriter.Close();
                        openStringWriter = null;
                    }
                    writer.WriteStartObject();
                    writer.WriteProperty("type", "inspection");
                    writer.WriteProperty("title", inspection.Title);
                    writer.WriteProperty("value", inspection.Value);
                    writer.WriteEndObject();
                    break;

                case string @string:
                    if (openStringWriter == null)
                    {
                        openStringWriter = openStringWriter ?? writer.OpenString();
                    }
                    openStringWriter.Write(@string);
                    break;

                case char[] chars:
                    if (openStringWriter == null)
                    {
                        openStringWriter = writer.OpenString();
                    }
                    openStringWriter.Write(chars);
                    break;

                case null:
                    break;

                default:
                    if (openStringWriter != null)
                    {
                        openStringWriter.Close();
                        openStringWriter = null;
                    }
                    writer.WriteValue("Unsupported output object type: " + item.GetType().Name);
                    break;
                }
            }
            openStringWriter?.Close();
        }
Esempio n. 28
0
        //private void SerializeSymbol(ISymbol symbol, IFastJsonWriter writer, string relationToParent) {
        //    RuntimeHelpers.EnsureSufficientExecutionStack();
        //    writer.WriteStartObject();
        //    writer.WriteProperty("type", "symbol");
        //    writer.WriteProperty("property", relationToParent);
        //    writer.WriteProperty("kind", symbol.Kind.ToString());
        //    writer.WritePropertyStartArray("children");
        //    writer.WriteStartObject();
        //    writer.WriteProperty("type", "property");
        //    writer.WriteProperty("property", "Name");
        //    writer.WriteProperty("value", symbol.Name);
        //    writer.WriteEndObject();
        //    writer.WriteEndArray();
        //    writer.WriteEndObject();
        //}

        private void SerializeOperation(IOperation operation, IFastJsonWriter writer)
        {
            RuntimeHelpers.EnsureSufficientExecutionStack();
            writer.WriteStartObject();
            writer.WriteProperty("type", "operation");
            writer.WriteProperty("property", "Operation");
            writer.WriteProperty("kind", operation.Kind.ToString());

            writer.WritePropertyStartObject("properties");
            _operationPropertySerializer.SerializeProperties(operation, writer);
            writer.WriteEndObject();

            writer.WriteEndObject();
        }
Esempio n. 29
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();
 }
Esempio n. 30
0
        public void Serialize(ExecutionResult result, IFastJsonWriter writer)
        {
            writer.WriteStartObject();
            writer.WritePropertyStartArray("output");
            SerializeOutput(result.Output, writer);
            writer.WriteEndArray();

            writer.WritePropertyStartArray("flow");
            foreach (var step in result.Flow)
            {
                SerializeFlowStep(step, writer);
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }