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 SerializeToken(SyntaxToken token, SemanticModel semanticModel, IFastJsonWriter writer) { RuntimeHelpers.EnsureSufficientExecutionStack(); writer.WriteStartObject(); writer.WriteProperty("type", "token"); writer.WriteProperty("kind", RoslynSyntaxHelper.GetKindName(token.RawKind)); var parentPropertyName = RoslynSyntaxHelper.GetParentPropertyName(token); if (parentPropertyName != null) { writer.WriteProperty("property", parentPropertyName); } SerializeSpanProperty(token.FullSpan, writer); if (token.HasLeadingTrivia || token.HasTrailingTrivia) { writer.WritePropertyStartArray("children"); foreach (var trivia in token.LeadingTrivia) { SerializeTrivia(trivia, semanticModel, writer); } writer.WriteStartObject(); writer.WriteProperty("type", "value"); writer.WriteProperty("value", token.ValueText); SerializeSpanProperty(token.Span, writer); writer.WriteEndObject(); foreach (var trivia in token.TrailingTrivia) { SerializeTrivia(trivia, semanticModel, writer); } writer.WriteEndArray(); } else { writer.WriteProperty("value", token.ToString()); } writer.WriteEndObject(); }
private void SerializeNode(SyntaxNode node, SemanticModel semanticModel, IFastJsonWriter writer, string specialParentPropertyName = null) { RuntimeHelpers.EnsureSufficientExecutionStack(); 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"); var operation = semanticModel.GetOperation(node); if (operation != null) { SerializeOperation(operation, writer); } foreach (var child in node.ChildNodesAndTokens()) { if (child.IsNode) { SerializeNode(child.AsNode(), semanticModel, writer); } else { SerializeToken(child.AsToken(), semanticModel, writer); } } writer.WriteEndArray(); writer.WriteEndObject(); }