Browse Source

* Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs:

* Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs: Added brace
  forcement options - this enables to change bracing for some
  constructs. 

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4769 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Mike Krüger 16 years ago
parent
commit
1b44fac5a9
  1. 56
      src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
  2. 75
      src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs

56
src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs

@ -1301,13 +1301,17 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1301,13 +1301,17 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.PrintToken(Tokens.CloseParenthesis);
PrintIfSection(ifElseStatement.TrueStatement);
bool wasBlock = false;
if (ifElseStatement.TrueStatement != null && ifElseStatement.TrueStatement.Count > 0)
wasBlock = ifElseStatement.TrueStatement.Last () is BlockStatement;
foreach (ElseIfSection elseIfSection in ifElseStatement.ElseIfSections) {
TrackVisit(elseIfSection, data);
wasBlock = elseIfSection.EmbeddedStatement is BlockStatement;
}
if (ifElseStatement.HasElseStatements) {
if (prettyPrintOptions.PlaceElseOnNewLine) {
if (prettyPrintOptions.PlaceElseOnNewLine || (prettyPrintOptions.PlaceNonBlockElseOnNewLine && !wasBlock)) {
outputFormatter.NewLine();
outputFormatter.Indent();
} else {
@ -1376,7 +1380,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1376,7 +1380,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
WriteEmbeddedStatement(elseIfSection.EmbeddedStatement, prettyPrintOptions.PlaceElseOnNewLine);
WriteEmbeddedStatement(elseIfSection.EmbeddedStatement, prettyPrintOptions.IfElseBraceForcement, prettyPrintOptions.StatementBraceStyle, false);
return null;
}
@ -1434,7 +1438,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1434,7 +1438,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.DoNewLine = true;
outputFormatter.DoIndent = true;
WriteEmbeddedStatement(forStatement.EmbeddedStatement);
WriteEmbeddedStatement(forStatement.EmbeddedStatement, prettyPrintOptions.ForBraceForcement, prettyPrintOptions.StatementBraceStyle, true);
return null;
}
@ -1457,6 +1461,42 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1457,6 +1461,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);
@ -1667,7 +1707,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1667,7 +1707,7 @@ 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) {
@ -1705,7 +1745,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1705,7 +1745,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
WriteEmbeddedStatement(foreachStatement.EmbeddedStatement);
WriteEmbeddedStatement(foreachStatement.EmbeddedStatement, prettyPrintOptions.ForEachBraceForcement, prettyPrintOptions.StatementBraceStyle, true);
return null;
}
@ -1747,7 +1787,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1747,7 +1787,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
WriteEmbeddedStatement(usingStatement.EmbeddedStatement);
WriteEmbeddedStatement(usingStatement.EmbeddedStatement, prettyPrintOptions.UsingBraceForcement, prettyPrintOptions.StatementBraceStyle, true);
return null;
}
@ -1851,7 +1891,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1851,7 +1891,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
WriteEmbeddedStatement(fixedStatement.EmbeddedStatement);
WriteEmbeddedStatement(fixedStatement.EmbeddedStatement, prettyPrintOptions.FixedBraceForcement, prettyPrintOptions.StatementBraceStyle, true);
return null;
}
@ -1949,7 +1989,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -1949,7 +1989,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
WriteEmbeddedStatement(forNextStatement.EmbeddedStatement);
WriteEmbeddedStatement(forNextStatement.EmbeddedStatement, prettyPrintOptions.ForBraceForcement, prettyPrintOptions.StatementBraceStyle, true);
return null;
}
#endregion

75
src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/PrettyPrintOptions.cs

@ -15,6 +15,13 @@ 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 @@ -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;
@ -354,6 +423,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -354,6 +423,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public bool PlaceCatchOnNewLine { get; set; }
public bool PlaceFinallyOnNewLine { get; set; }
public bool PlaceElseOnNewLine { get; set; }
public bool PlaceNonBlockElseOnNewLine { get; set; }
public bool PlaceWhileOnNewLine { get; set; }
#endregion
@ -856,5 +926,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -856,5 +926,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
#endregion
#endregion
public PrettyPrintOptions ()
{
PlaceNonBlockElseOnNewLine = true;
}
}
}
Loading…
Cancel
Save