提交 146b391d 编写于 作者: C CyrusNajmabadi

Format 'unsafe' blocks according to user settings.

上级 bb988f78
......@@ -11,19 +11,35 @@ internal class NewLineUserSettingFormattingRule : BaseFormattingRule
{
private bool IsControlBlock(SyntaxNode node)
{
var parent = node != null ? node.Parent : null;
return (node != null && node.Kind() == SyntaxKind.SwitchStatement) ||
(parent != null &&
(parent.Kind() == SyntaxKind.IfStatement || parent.Kind() == SyntaxKind.ElseClause ||
parent.Kind() == SyntaxKind.WhileStatement || parent.Kind() == SyntaxKind.DoStatement ||
parent.Kind() == SyntaxKind.ForEachStatement || parent.Kind() == SyntaxKind.ForEachVariableStatement ||
parent.Kind() == SyntaxKind.UsingStatement ||
parent.Kind() == SyntaxKind.ForStatement || parent.Kind() == SyntaxKind.TryStatement ||
parent.Kind() == SyntaxKind.CatchClause || parent.Kind() == SyntaxKind.FinallyClause ||
parent.Kind() == SyntaxKind.LockStatement || parent.Kind() == SyntaxKind.CheckedStatement ||
parent.Kind() == SyntaxKind.UncheckedStatement || parent.Kind() == SyntaxKind.SwitchSection ||
parent.Kind() == SyntaxKind.FixedStatement));
if (node.Kind() == SyntaxKind.SwitchStatement)
{
return true;
}
var parentKind = node?.Parent.Kind();
switch (parentKind.GetValueOrDefault())
{
case SyntaxKind.IfStatement:
case SyntaxKind.ElseClause:
case SyntaxKind.WhileStatement:
case SyntaxKind.DoStatement:
case SyntaxKind.ForEachStatement:
case SyntaxKind.ForEachVariableStatement:
case SyntaxKind.UsingStatement:
case SyntaxKind.ForStatement:
case SyntaxKind.TryStatement:
case SyntaxKind.CatchClause:
case SyntaxKind.FinallyClause:
case SyntaxKind.LockStatement:
case SyntaxKind.CheckedStatement:
case SyntaxKind.UncheckedStatement:
case SyntaxKind.SwitchSection:
case SyntaxKind.FixedStatement:
case SyntaxKind.UnsafeStatement:
return true;
default:
return false;
}
}
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
......
......@@ -1538,17 +1538,18 @@ public class foo : System.Object
}
[WorkItem(751789, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/751789")]
[WorkItem(8808, "https://developercommunity.visualstudio.com/content/problem/8808/c-structure-guide-lines-for-unsafe-fixed.html")]
[Fact, Trait(Traits.Feature, Traits.Features.Formatting)]
public async Task NewLineForOpenBracesNonDefault()
{
var changingOptions = new Dictionary<OptionKey, object>();
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInTypes, false);
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInMethods, false);
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInAnonymousMethods, false);
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInControlBlocks, false);
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInAnonymousTypes, false);
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInObjectCollectionArrayInitializers, false);
changingOptions.Add(CSharpFormattingOptions.NewLinesForBracesInLambdaExpressionBody, false);
changingOptions.Add(NewLinesForBracesInTypes, false);
changingOptions.Add(NewLinesForBracesInMethods, false);
changingOptions.Add(NewLinesForBracesInAnonymousMethods, false);
changingOptions.Add(NewLinesForBracesInControlBlocks, false);
changingOptions.Add(NewLinesForBracesInAnonymousTypes, false);
changingOptions.Add(NewLinesForBracesInObjectCollectionArrayInitializers, false);
changingOptions.Add(NewLinesForBracesInLambdaExpressionBody, false);
await AssertFormatAsync(@"class f00 {
void br() {
Func<int, int> ret = x => {
......@@ -1582,6 +1583,12 @@ public async Task NewLineForOpenBracesNonDefault()
default:
break;
}
unsafe {
}
fixed (int* p = &i) {
}
}
}
......@@ -1635,6 +1642,14 @@ public class foo : System.Object {
default:
break;
}
unsafe
{
}
fixed (int* p = &i)
{
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册