using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Formatting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.Scripting.Formatting { public static class CodeFormatter { public static String Format(String code) { SyntaxTree tree = CSharpSyntaxTree.ParseText(code); CompilationUnitSyntax root = tree.GetCompilationUnitRoot(); //var node = ApplyBraceNewLineRule(root); //node = ApplyCopyrightHeaderRule(node); //node = ApplyNewLineAboveRule(node); //node = ApplyUsingLocationRule(node); //Just to make VS copy the dll to output folder. Microsoft.CodeAnalysis.CSharp.Formatting.BinaryOperatorSpacingOptions a = Microsoft.CodeAnalysis.CSharp.Formatting.BinaryOperatorSpacingOptions.Ignore; var node = Formatter.Format(root, new AdhocWorkspace()); return node.ToString(); } //private static SyntaxNode ApplyUsingLocationRule(SyntaxNode node) //{ // UsingLocationRule rule = new UsingLocationRule(); // return rule.Process(node, "CSharp"); //} //private static SyntaxNode ApplyBraceNewLineRule(SyntaxNode node) //{ // BraceNewLineRule rule = new BraceNewLineRule(); // return rule.Process(node, "CSharp"); //} //private static SyntaxNode ApplyNewLineAboveRule(SyntaxNode node) //{ // NewLineAboveRule rule = new NewLineAboveRule(); // return rule.Process(node, "CSharp"); //} //private static SyntaxNode ApplyCopyrightHeaderRule(SyntaxNode node) //{ // CopyrightHeaderRule rule = new CopyrightHeaderRule(new Microsoft.DotNet.CodeFormatting.Options() // { // }); // return rule.ProcessCSharp(node); //} } }