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; } }
//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(); }
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); } }
public static void WriteSpan(this IFastJsonWriter writer, TextSpan span) { writer.WriteStartObject(); writer.WriteProperty("start", span.Start); writer.WriteProperty("length", span.Length); writer.WriteEndObject(); }
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); } }
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); } }
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(); }
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(); }
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(); }
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); } }
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); }
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); } }
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(); }
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); } }
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(); }
private static void EnsureChildrenStarted(ref bool childrenStarted, IFastJsonWriter writer) { if (childrenStarted) { return; } writer.WritePropertyStartArray("children"); childrenStarted = true; }
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(); }
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(); }
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(); }
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(); }
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(); }
//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(); }
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(); }
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(); }