diff options
author | Mike Krüger <mkrueger@novell.com> | 2009-07-20 16:19:48 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@novell.com> | 2009-07-20 16:19:48 +0400 |
commit | fbc289dfcc6a860372a5bc62ab360c37c495e2f2 (patch) | |
tree | cd3d2711e73deffe1a20d5c3a858fd26454efbd0 /main/contrib | |
parent | 99218313a9230079ccd95dc5ca15d0d4b4bbb6c1 (diff) |
* Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs:
* Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs: Added brace
forcement pretty print options.
svn path=/trunk/monodevelop/; revision=138206
Diffstat (limited to 'main/contrib')
3 files changed, 158 insertions, 25 deletions
diff --git a/main/contrib/NRefactory/Project/ChangeLog b/main/contrib/NRefactory/Project/ChangeLog index 5b6ebdacb3..b5a5741acb 100644 --- a/main/contrib/NRefactory/Project/ChangeLog +++ b/main/contrib/NRefactory/Project/ChangeLog @@ -1,3 +1,9 @@ +2009-07-20 Mike Krüger <mkrueger@novell.com> + + * Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs: + * Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs: Added brace + forcement pretty print options. + 2009-07-17 Mike Krüger <mkrueger@novell.com> * Src/PrettyPrinter/CSharp/OutputFormatter.cs: diff --git a/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs b/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs index a438906c28..f93e73db94 100644 --- a/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs +++ b/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs @@ -2,7 +2,7 @@ // <copyright see="prj:///doc/copyright.txt"/> // <license see="prj:///doc/license.txt"/> // <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/> -// <version>$Revision: 4417 $</version> +// <version>$Revision: 4471 $</version> // </file> using System; @@ -1289,31 +1289,33 @@ namespace ICSharpCode.NRefactory.PrettyPrinter void PrintIfSection(List<Statement> statements) { + /* if (statements.Count == 1 && (statements[0] is BlockStatement)) { - OutputBlock((BlockStatement)statements[0], - prettyPrintOptions.StatementBraceStyle, - prettyPrintOptions.PlaceElseOnNewLine); + WriteEmbeddedStatement(statements[0], + prettyPrintOptions.IfElseBraceForcement, + prettyPrintOptions.StatementBraceStyle, + prettyPrintOptions.PlaceElseOnNewLine); return; - } + }*/ /* if (statements.Count != 1 || !(statements[0] is BlockStatement)) { outputFormatter.Space(); }*/ if (statements.Count != 1) { outputFormatter.PrintToken(Tokens.OpenCurlyBrace); - } else { outputFormatter.NewLine (); outputFormatter.IndentationLevel++; outputFormatter.Indent (); - } - - foreach (Statement stmt in statements) { - TrackVisit(stmt, prettyPrintOptions.StatementBraceStyle); - } - - if (statements.Count == 1) { + foreach (Statement stmt in statements) { + TrackVisit(stmt, prettyPrintOptions.StatementBraceStyle); + } outputFormatter.IndentationLevel--; - } else { outputFormatter.PrintToken(Tokens.CloseCurlyBrace); + } else { + WriteEmbeddedStatement(statements[0], + prettyPrintOptions.IfElseBraceForcement, + prettyPrintOptions.StatementBraceStyle, + false); + } /* if (statements.Count != 1 || !(statements[0] is BlockStatement)) { outputFormatter.Space(); @@ -1323,6 +1325,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter public override object TrackedVisitElseIfSection(ElseIfSection elseIfSection, object data) { if (prettyPrintOptions.PlaceElseOnNewLine) { + outputFormatter.NewLine(); outputFormatter.Indent(); } else { outputFormatter.Space(); @@ -1343,7 +1346,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } outputFormatter.PrintToken(Tokens.CloseParenthesis); - WriteEmbeddedStatement(elseIfSection.EmbeddedStatement, prettyPrintOptions.PlaceElseOnNewLine); + WriteEmbeddedStatement(elseIfSection.EmbeddedStatement, + prettyPrintOptions.IfElseBraceForcement, + prettyPrintOptions.StatementBraceStyle, + false); return null; } @@ -1401,8 +1407,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter outputFormatter.DoNewLine = true; outputFormatter.DoIndent = true; - WriteEmbeddedStatement(forStatement.EmbeddedStatement); - + WriteEmbeddedStatement (forStatement.EmbeddedStatement, + prettyPrintOptions.ForBraceForcement, + prettyPrintOptions.StatementBraceStyle, + true); return null; } @@ -1424,6 +1432,42 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } } + void WriteEmbeddedStatement (Statement statement, BraceForcement forcement, BraceStyle braceStyle, bool emitEndingNewLine) + { + if (statement is BlockStatement) { + BlockStatement block = (BlockStatement)statement; + switch (forcement) { + case BraceForcement.RemoveBraces: + if (block.Children.Count == 1) { + ++outputFormatter.IndentationLevel; + outputFormatter.NewLine(); + outputFormatter.Indent (); + TrackVisit(block.Children[0], null); + --outputFormatter.IndentationLevel; + } else { + goto default; + } + break; + case BraceForcement.RemoveBracesForSingleLine: + goto case BraceForcement.RemoveBraces; + default: + OutputBlock((BlockStatement)statement, prettyPrintOptions.StatementBraceStyle, emitEndingNewLine); + break; + } + } else { + switch (forcement) { + case BraceForcement.AddBraces: + BlockStatement blockStatement = new BlockStatement (); + blockStatement.AddChild (statement); + OutputBlock(blockStatement, braceStyle, true); + break; + default: + WriteEmbeddedStatement (statement, emitEndingNewLine); + break; + } + } + } + public override object TrackedVisitLabelStatement(LabelStatement labelStatement, object data) { outputFormatter.PrintIdentifier(labelStatement.Label); @@ -1634,7 +1678,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter outputFormatter.PrintToken(Tokens.Do); } - WriteEmbeddedStatement(doLoopStatement.EmbeddedStatement, prettyPrintOptions.PlaceWhileOnNewLine); + WriteEmbeddedStatement(doLoopStatement.EmbeddedStatement, + prettyPrintOptions.WhileBraceForcement, + prettyPrintOptions.StatementBraceStyle, + prettyPrintOptions.PlaceWhileOnNewLine); if (doLoopStatement.ConditionPosition == ConditionPosition.End) { if (prettyPrintOptions.PlaceWhileOnNewLine) { @@ -1672,7 +1719,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } outputFormatter.PrintToken(Tokens.CloseParenthesis); - WriteEmbeddedStatement(foreachStatement.EmbeddedStatement); + WriteEmbeddedStatement(foreachStatement.EmbeddedStatement, + prettyPrintOptions.ForEachBraceForcement, + prettyPrintOptions.StatementBraceStyle, + true); return null; } @@ -1714,8 +1764,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } outputFormatter.PrintToken(Tokens.CloseParenthesis); - WriteEmbeddedStatement(usingStatement.EmbeddedStatement); - + WriteEmbeddedStatement(usingStatement.EmbeddedStatement, + prettyPrintOptions.UsingBraceForcement, + prettyPrintOptions.StatementBraceStyle, + true); return null; } @@ -1740,7 +1792,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter { outputFormatter.PrintToken(Tokens.Try); - WriteEmbeddedStatement (tryCatchStatement.StatementBlock, prettyPrintOptions.PlaceCatchOnNewLine); + WriteEmbeddedStatement(tryCatchStatement.StatementBlock, prettyPrintOptions.PlaceCatchOnNewLine); for (int i = 0 ; i < tryCatchStatement.CatchClauses.Count; i++) { TrackVisit(tryCatchStatement.CatchClauses[i], i == tryCatchStatement.CatchClauses.Count - 1); } @@ -1818,7 +1870,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } outputFormatter.PrintToken(Tokens.CloseParenthesis); - WriteEmbeddedStatement(fixedStatement.EmbeddedStatement); + WriteEmbeddedStatement(fixedStatement.EmbeddedStatement, + prettyPrintOptions.FixedBraceForcement, + prettyPrintOptions.StatementBraceStyle, + true); return null; } @@ -1916,7 +1971,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } outputFormatter.PrintToken(Tokens.CloseParenthesis); - WriteEmbeddedStatement(forNextStatement.EmbeddedStatement); + WriteEmbeddedStatement (forNextStatement.EmbeddedStatement, + prettyPrintOptions.ForBraceForcement, + prettyPrintOptions.StatementBraceStyle, + true); return null; } #endregion diff --git a/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs b/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs index 9e95d49608..323ca6fe4e 100644 --- a/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs +++ b/main/contrib/NRefactory/Project/Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs @@ -2,7 +2,7 @@ // <copyright see="prj:///doc/copyright.txt"/> // <license see="prj:///doc/license.txt"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/> -// <version>$Revision: 3856 $</version> +// <version>$Revision: 4349 $</version> // </file> namespace ICSharpCode.NRefactory.PrettyPrinter @@ -15,6 +15,13 @@ namespace ICSharpCode.NRefactory.PrettyPrinter NextLineShifted2 } + public enum BraceForcement { + DoNotChange, + RemoveBraces, + AddBraces, + RemoveBracesForSingleLine + } + /// <summary> /// Description of PrettyPrintOptions. /// </summary> @@ -224,6 +231,68 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } #endregion + #region Force Braces + BraceForcement ifElseBraceForcement = BraceForcement.DoNotChange; + public BraceForcement IfElseBraceForcement { + get { + return ifElseBraceForcement; + } + set { + ifElseBraceForcement = value; + } + } + + BraceForcement forBraceForcement = BraceForcement.DoNotChange; + public BraceForcement ForBraceForcement { + get { + return forBraceForcement; + } + set { + forBraceForcement = value; + } + } + + BraceForcement foreachBraceForcement = BraceForcement.DoNotChange; + public BraceForcement ForEachBraceForcement { + get { + return foreachBraceForcement; + } + set { + foreachBraceForcement = value; + } + } + + BraceForcement whileBraceForcement = BraceForcement.DoNotChange; + public BraceForcement WhileBraceForcement { + get { + return whileBraceForcement; + } + set { + whileBraceForcement = value; + } + } + + BraceForcement usingBraceForcement = BraceForcement.DoNotChange; + public BraceForcement UsingBraceForcement { + get { + return usingBraceForcement; + } + set { + usingBraceForcement = value; + } + } + + BraceForcement fixedBraceForcement = BraceForcement.DoNotChange; + public BraceForcement FixedBraceForcement { + get { + return fixedBraceForcement; + } + set { + fixedBraceForcement = value; + } + } + #endregion + #region Indentation bool indentNamespaceBody = true; bool indentClassBody = true; |