string ConvertHelper(AstNode node, Action <CSharpCodeProvider, CodeObject, TextWriter, CodeGeneratorOptions> action)
        {
            CSharpResolver resolver = new CSharpResolver(compilation);

            resolver = resolver.WithCurrentUsingScope(unresolvedFile.RootUsingScope.Resolve(compilation));
            resolver = resolver.WithCurrentTypeDefinition(compilation.FindType(KnownTypeCode.Object).GetDefinition());
            var codeObj = convertVisitor.Convert(node, new CSharpAstResolver(resolver, node));

            StringWriter writer = new StringWriter();

            writer.NewLine = " ";
            action(new CSharpCodeProvider(), codeObj, writer, new CodeGeneratorOptions {
                IndentString = " "
            });
            return(Regex.Replace(writer.ToString(), @"\s+", " ").Trim());
        }
        string Convert(Expression expr)
        {
            CSharpResolver resolver = new CSharpResolver(compilation);

            resolver = resolver.WithCurrentUsingScope(parsedFile.RootUsingScope.Resolve(compilation));
            resolver = resolver.WithCurrentTypeDefinition(compilation.FindType(KnownTypeCode.Object).GetDefinition());
            var codeExpr = (CodeExpression)convertVisitor.Convert(expr, new CSharpAstResolver(resolver, expr, parsedFile));

            StringWriter writer = new StringWriter();

            writer.NewLine = " ";
            new CSharpCodeProvider().GenerateCodeFromExpression(codeExpr, writer, new CodeGeneratorOptions {
                IndentString = " "
            });
            return(Regex.Replace(writer.ToString(), @"\s+", " "));
        }