提交 3f1aa6e3 编写于 作者: B Balaji Krishnan

Merge pull request #11318 from lorcanmooney/issue11213

Correct intellisense and indentation for fixed statements
...@@ -2921,6 +2921,147 @@ public void M() ...@@ -2921,6 +2921,147 @@ public void M()
await AutoFormatTokenAsync(code, expected); await AutoFormatTokenAsync(code, expected);
} }
[WpfFact]
[Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)]
public async Task UsingStatementWithNestedFixedStatement()
{
var code = @"class C
{
public void M()
{
using (null)
fixed (void* ptr = &i)
{
}$$
}
}";
var expected = @"class C
{
public void M()
{
using (null)
fixed (void* ptr = &i)
{
}
}
}";
await AutoFormatTokenAsync(code, expected);
}
[WpfFact]
[Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)]
public async Task FixedStatementWithNestedUsingStatement()
{
var code = @"class C
{
public void M()
{
fixed (void* ptr = &i)
using (null)$$
}
}";
var expected = @"class C
{
public void M()
{
fixed (void* ptr = &i)
using (null)
}
}";
await AutoFormatTokenAsync(code, expected);
}
[WpfFact]
[Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)]
public async Task FixedStatementWithNestedFixedStatement()
{
var code = @"class C
{
public void M()
{
fixed (void* ptr1 = &i)
fixed (void* ptr2 = &i)
{
}$$
}
}";
var expected = @"class C
{
public void M()
{
fixed (void* ptr1 = &i)
fixed (void* ptr2 = &i)
{
}
}
}";
await AutoFormatTokenAsync(code, expected);
}
[WpfFact]
[Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)]
public async Task FixedStatementWithNestedNotFixedStatement()
{
var code = @"class C
{
public void M()
{
fixed (void* ptr = &i)
if (false)
{
}$$
}
}";
var expected = @"class C
{
public void M()
{
fixed (void* ptr = &i)
if (false)
{
}
}
}";
await AutoFormatTokenAsync(code, expected);
}
[WpfFact]
[Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)]
public async Task NotFixedStatementWithNestedFixedStatement()
{
var code = @"class C
{
public void M()
{
if (false)
fixed (void* ptr = &i)
{
}$$
}
}";
var expected = @"class C
{
public void M()
{
if (false)
fixed (void* ptr = &i)
{
}
}
}";
await AutoFormatTokenAsync(code, expected);
}
[WpfFact] [WpfFact]
[WorkItem(954386, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/954386")] [WorkItem(954386, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/954386")]
[Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)] [Trait(Traits.Feature, Traits.Features.SmartTokenFormatting)]
......
...@@ -93,6 +93,9 @@ public static bool IsBeginningOfStatementContext(this SyntaxToken token) ...@@ -93,6 +93,9 @@ public static bool IsBeginningOfStatementContext(this SyntaxToken token)
// using (expr) // using (expr)
// | // |
// fixed (void* v = &expr)
// |
// lock (expr) // lock (expr)
// | // |
...@@ -170,7 +173,8 @@ public static bool IsBeginningOfStatementContext(this SyntaxToken token) ...@@ -170,7 +173,8 @@ public static bool IsBeginningOfStatementContext(this SyntaxToken token)
parent.IsKind(SyntaxKind.WhileStatement) || parent.IsKind(SyntaxKind.WhileStatement) ||
parent.IsKind(SyntaxKind.IfStatement) || parent.IsKind(SyntaxKind.IfStatement) ||
parent.IsKind(SyntaxKind.LockStatement) || parent.IsKind(SyntaxKind.LockStatement) ||
parent.IsKind(SyntaxKind.UsingStatement)) parent.IsKind(SyntaxKind.UsingStatement) ||
parent.IsKind(SyntaxKind.FixedStatement))
{ {
return true; return true;
} }
......
...@@ -321,6 +321,12 @@ public static bool IsCloseParenInStatement(this SyntaxToken token) ...@@ -321,6 +321,12 @@ public static bool IsCloseParenInStatement(this SyntaxToken token)
return usingStatement.CloseParenToken.Equals(token); return usingStatement.CloseParenToken.Equals(token);
} }
var fixedStatement = statement as FixedStatementSyntax;
if (fixedStatement != null)
{
return fixedStatement.CloseParenToken.Equals(token);
}
return false; return false;
} }
...@@ -386,6 +392,7 @@ public static bool IsEmbeddedStatementOwnerWithCloseParen(this SyntaxNode node) ...@@ -386,6 +392,7 @@ public static bool IsEmbeddedStatementOwnerWithCloseParen(this SyntaxNode node)
node is ForStatementSyntax || node is ForStatementSyntax ||
node is ForEachStatementSyntax || node is ForEachStatementSyntax ||
node is UsingStatementSyntax || node is UsingStatementSyntax ||
node is FixedStatementSyntax ||
node is LockStatementSyntax; node is LockStatementSyntax;
} }
......
...@@ -259,6 +259,13 @@ private void AddEmbeddedStatementsIndentationOperation(List<IndentBlockOperation ...@@ -259,6 +259,13 @@ private void AddEmbeddedStatementsIndentationOperation(List<IndentBlockOperation
return; return;
} }
var fixedStatement = node as FixedStatementSyntax;
if (fixedStatement != null && fixedStatement.Statement != null && !(fixedStatement.Statement is BlockSyntax || fixedStatement.Statement is FixedStatementSyntax))
{
AddEmbeddedStatementsIndentationOperation(list, fixedStatement.Statement);
return;
}
var doStatement = node as DoStatementSyntax; var doStatement = node as DoStatementSyntax;
if (doStatement != null && doStatement.Statement != null && !(doStatement.Statement is BlockSyntax)) if (doStatement != null && doStatement.Statement != null && !(doStatement.Statement is BlockSyntax))
{ {
......
...@@ -21,7 +21,8 @@ private bool IsControlBlock(SyntaxNode node) ...@@ -21,7 +21,8 @@ private bool IsControlBlock(SyntaxNode node)
parent.Kind() == SyntaxKind.ForStatement || parent.Kind() == SyntaxKind.TryStatement || parent.Kind() == SyntaxKind.ForStatement || parent.Kind() == SyntaxKind.TryStatement ||
parent.Kind() == SyntaxKind.CatchClause || parent.Kind() == SyntaxKind.FinallyClause || parent.Kind() == SyntaxKind.CatchClause || parent.Kind() == SyntaxKind.FinallyClause ||
parent.Kind() == SyntaxKind.LockStatement || parent.Kind() == SyntaxKind.CheckedStatement || parent.Kind() == SyntaxKind.LockStatement || parent.Kind() == SyntaxKind.CheckedStatement ||
parent.Kind() == SyntaxKind.UncheckedStatement || parent.Kind() == SyntaxKind.SwitchSection)); parent.Kind() == SyntaxKind.UncheckedStatement || parent.Kind() == SyntaxKind.SwitchSection ||
parent.Kind() == SyntaxKind.FixedStatement));
} }
public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation) public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet, NextOperation<AdjustSpacesOperation> nextOperation)
......
...@@ -359,7 +359,8 @@ private static bool IsSpecialContainingNode(SyntaxNode node) ...@@ -359,7 +359,8 @@ private static bool IsSpecialContainingNode(SyntaxNode node)
node.Kind() == SyntaxKind.CatchClause || node.Kind() == SyntaxKind.CatchClause ||
node.Kind() == SyntaxKind.FinallyClause || node.Kind() == SyntaxKind.FinallyClause ||
node.Kind() == SyntaxKind.LabeledStatement || node.Kind() == SyntaxKind.LabeledStatement ||
node.Kind() == SyntaxKind.LockStatement; node.Kind() == SyntaxKind.LockStatement ||
node.Kind() == SyntaxKind.FixedStatement;
} }
private static SyntaxNode GetTopContainingNode(SyntaxNode node) private static SyntaxNode GetTopContainingNode(SyntaxNode node)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册