diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs b/ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs index 40b3371d04..bb21219a42 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs +++ b/ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs @@ -190,6 +190,22 @@ namespace ICSharpCode.NRefactory.CSharp /// Creates sharp develop indent style CSharpFormatting options. /// public static CSharpFormattingOptions CreateSharpDevelop() + { + var baseOptions = CreateKRStyle(); + baseOptions.IfElseBraceForcement = BraceForcement.AddBraces; + baseOptions.ForBraceForcement = BraceForcement.AddBraces; + baseOptions.ForEachBraceForcement = BraceForcement.AddBraces; + baseOptions.WhileBraceForcement = BraceForcement.AddBraces; + baseOptions.UsingBraceForcement = BraceForcement.AddBraces; + baseOptions.FixedBraceForcement = BraceForcement.AddBraces; + return baseOptions; + } + + /// + /// The K&R style, so named because it was used in Kernighan and Ritchie's book The C Programming Language, + /// is commonly used in C. It is less common for C++, C#, and others. + /// + public static CSharpFormattingOptions CreateKRStyle() { return new CSharpFormattingOptions() { IndentNamespaceBody = true, @@ -350,6 +366,52 @@ namespace ICSharpCode.NRefactory.CSharp baseOptions.ArrayInitializerBraceStyle = BraceStyle.EndOfLine; return baseOptions; } + + /// + /// The Whitesmiths style, also called Wishart style to a lesser extent, is less common today than the previous three. It was originally used in the documentation for the first commercial C compiler, the Whitesmiths Compiler. + /// + public static CSharpFormattingOptions CreateWhitesmiths() + { + var baseOptions = CreateSharpDevelop(); + + baseOptions.NamespaceBraceStyle = BraceStyle.NextLineShifted; + baseOptions.ClassBraceStyle = BraceStyle.NextLineShifted; + baseOptions.InterfaceBraceStyle = BraceStyle.NextLineShifted; + baseOptions.StructBraceStyle = BraceStyle.NextLineShifted; + baseOptions.EnumBraceStyle = BraceStyle.NextLineShifted; + baseOptions.MethodBraceStyle = BraceStyle.NextLineShifted; + baseOptions.ConstructorBraceStyle = BraceStyle.NextLineShifted; + baseOptions.DestructorBraceStyle = BraceStyle.NextLineShifted; + baseOptions.AnonymousMethodBraceStyle = BraceStyle.NextLineShifted; + baseOptions.PropertyBraceStyle = BraceStyle.NextLineShifted; + baseOptions.PropertyGetBraceStyle = BraceStyle.NextLineShifted; + baseOptions.PropertySetBraceStyle = BraceStyle.NextLineShifted; + + baseOptions.EventBraceStyle = BraceStyle.NextLineShifted; + baseOptions.EventAddBraceStyle = BraceStyle.NextLineShifted; + baseOptions.EventRemoveBraceStyle = BraceStyle.NextLineShifted; + baseOptions.StatementBraceStyle = BraceStyle.NextLineShifted; + return baseOptions; + } + + /// + /// Like the Allman and Whitesmiths styles, GNU style puts braces on a line by themselves, indented by 2 spaces, + /// except when opening a function definition, where they are not indented. + /// In either case, the contained code is indented by 2 spaces from the braces. + /// Popularised by Richard Stallman, the layout may be influenced by his background of writing Lisp code. + /// In Lisp the equivalent to a block (a progn) + /// is a first class data entity and giving it its own indent level helps to emphasize that, + /// whereas in C a block is just syntax. + /// Although not directly related to indentation, GNU coding style also includes a space before the bracketed + /// list of arguments to a function. + /// + public static CSharpFormattingOptions CreateGNU() + { + var baseOptions = CreateAllman(); + baseOptions.StatementBraceStyle = BraceStyle.NextLineShifted2; + return baseOptions; + } + } }