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 SerializeTrivia(SyntaxTrivia trivia, IFastJsonWriter writer)
 {
     writer.WriteStartObject();
     writer.WriteProperty("type", "trivia");
     writer.WriteProperty("kind", RoslynSyntaxHelper.GetKindName(trivia.RawKind));
     SerializeSpanProperty(trivia.FullSpan, writer);
     if (trivia.HasStructure)
     {
         writer.WritePropertyStartArray("children");
         SerializeNode(trivia.GetStructure(), writer, "Structure");
         writer.WriteEndArray();
     }
     else
     {
         writer.WriteProperty("value", trivia.ToString());
     }
     writer.WriteEndObject();
 }
Beispiel #3
0
 private void SerializeTrivia(SyntaxTrivia trivia, SemanticModel semanticModel, IFastJsonWriter writer)
 {
     RuntimeHelpers.EnsureSufficientExecutionStack();
     writer.WriteStartObject();
     writer.WriteProperty("type", "trivia");
     writer.WriteProperty("kind", RoslynSyntaxHelper.GetKindName(trivia.RawKind));
     SerializeSpanProperty(trivia.FullSpan, writer);
     if (trivia.HasStructure)
     {
         writer.WritePropertyStartArray("children");
         SerializeNode(trivia.GetStructure() !, semanticModel, writer, "Structure");
         writer.WriteEndArray();
     }
     else
     {
         writer.WriteProperty("value", trivia.ToString());
     }
     writer.WriteEndObject();
 }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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();
        }