private string TreeToString(SyntaxNodeOrToken syntaxNodeOrToken, CodeActionValidationMode validationMode) { var result = new StringBuilder(); TreeToString(syntaxNodeOrToken, string.Empty, validationMode, result); return(result.ToString()); }
private void TreeToString(SyntaxNodeOrToken syntaxNodeOrToken, string indent, CodeActionValidationMode validationMode, StringBuilder result) { if (syntaxNodeOrToken.IsNode) { result.AppendLine($"{indent}Node({Kind(syntaxNodeOrToken.RawKind)}):"); var childIndent = indent + " "; foreach (var child in syntaxNodeOrToken.ChildNodesAndTokens()) { TreeToString(child, childIndent, validationMode, result); } } else { var syntaxToken = syntaxNodeOrToken.AsToken(); result.AppendLine($"{indent}Token({Kind(syntaxToken.RawKind)}): {Escape(syntaxToken.Text)}"); if (validationMode == CodeActionValidationMode.Full) { var childIndent = indent + " "; foreach (var trivia in syntaxToken.LeadingTrivia) { if (trivia.HasStructure) { result.AppendLine($"{childIndent}Leading({Kind(trivia.RawKind)}):"); TreeToString(trivia.GetStructure(), childIndent + " ", validationMode, result); } else { result.AppendLine($"{childIndent}Leading({Kind(trivia.RawKind)}): {Escape(trivia.ToString())}"); } } foreach (var trivia in syntaxToken.TrailingTrivia) { if (trivia.HasStructure) { result.AppendLine($"{childIndent}Trailing({Kind(trivia.RawKind)}):"); TreeToString(trivia.GetStructure(), childIndent + " ", validationMode, result); } else { result.AppendLine($"{childIndent}Trailing({Kind(trivia.RawKind)}): {Escape(trivia.ToString())}"); } } } } // Local functions string Escape(string text) { return(text .Replace("\\", "\\\\") .Replace("\t", "\\t") .Replace("\r", "\\r") .Replace("\n", "\\n")); } string Kind(int syntaxKind) { if (SyntaxKindType.GetTypeInfo()?.IsEnum ?? false) { return(Enum.Format(SyntaxKindType, (ushort)syntaxKind, "G")); } else { return(syntaxKind.ToString()); } } }
public static CodeFixTest <TVerifier> With <TVerifier>(this CodeFixTest <TVerifier> test, CodeActionValidationMode mode) where TVerifier : IVerifier, new() { test.CodeActionValidationMode = mode; return(test); }