提交 6ecc2f28 编写于 作者: B Balaji Soundrarajan

Format Predefined return types in Conversion OpDecl

Fix #4240 Make conversion operator declaration and Operator Decl
to honor SpacingAfterMethodDeclarationName option

For Eg:

public static implicit operator string (Program p) { return null; }
public static Program operator ! (Program p) { return null; }

should be formatted to

public static implicit operator string(Program p) { return null; }
public static Program operator !(Program p) { return null; }

if the spacing option says no spaces
上级 92d412ac
...@@ -61,6 +61,16 @@ public static bool IsValidBracePair(this ValueTuple<SyntaxToken, SyntaxToken> br ...@@ -61,6 +61,16 @@ public static bool IsValidBracePair(this ValueTuple<SyntaxToken, SyntaxToken> br
return true; return true;
} }
public static bool IsOpenParenInParameterListOfAConversionOperator(this SyntaxToken token)
{
return token.IsOpenParenInParameterList() && token.Parent.IsParentKind(SyntaxKind.ConversionOperatorDeclaration);
}
public static bool IsOpenParenInParameterListOfAOperationDeclaration(this SyntaxToken token)
{
return token.IsOpenParenInParameterList() && token.Parent.IsParentKind(SyntaxKind.OperatorDeclaration);
}
public static bool IsOpenParenInParameterList(this SyntaxToken token) public static bool IsOpenParenInParameterList(this SyntaxToken token)
{ {
return token.Kind() == SyntaxKind.OpenParenToken && token.Parent.Kind() == SyntaxKind.ParameterList; return token.Kind() == SyntaxKind.OpenParenToken && token.Parent.Kind() == SyntaxKind.ParameterList;
......
...@@ -32,6 +32,18 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ ...@@ -32,6 +32,18 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ
return AdjustSpacesOperationZeroOrOne(optionSet, CSharpFormattingOptions.SpacingAfterMethodDeclarationName); return AdjustSpacesOperationZeroOrOne(optionSet, CSharpFormattingOptions.SpacingAfterMethodDeclarationName);
} }
// Case: public static implicit operator string(Program p) { return null; }
if (previousToken.IsKeyword() && currentToken.IsOpenParenInParameterListOfAConversionOperator())
{
return AdjustSpacesOperationZeroOrOne(optionSet, CSharpFormattingOptions.SpacingAfterMethodDeclarationName);
}
// Case: public static Program operator !(Program p) { return null; }
if (previousToken.Parent.IsKind(SyntaxKind.OperatorDeclaration) && currentToken.IsOpenParenInParameterListOfAOperationDeclaration())
{
return AdjustSpacesOperationZeroOrOne(optionSet, CSharpFormattingOptions.SpacingAfterMethodDeclarationName);
}
if (previousToken.IsOpenParenInParameterList() && currentToken.IsCloseParenInParameterList()) if (previousToken.IsOpenParenInParameterList() && currentToken.IsCloseParenInParameterList())
{ {
return AdjustSpacesOperationZeroOrOne(optionSet, CSharpFormattingOptions.SpaceBetweenEmptyMethodDeclarationParentheses); return AdjustSpacesOperationZeroOrOne(optionSet, CSharpFormattingOptions.SpaceBetweenEmptyMethodDeclarationParentheses);
......
...@@ -200,7 +200,6 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ ...@@ -200,7 +200,6 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ
previousToken.Kind() == SyntaxKind.BaseKeyword || previousToken.Kind() == SyntaxKind.BaseKeyword ||
previousToken.Kind() == SyntaxKind.ThisKeyword || previousToken.Kind() == SyntaxKind.ThisKeyword ||
previousToken.Kind() == SyntaxKind.NewKeyword || previousToken.Kind() == SyntaxKind.NewKeyword ||
previousToken.Parent.Kind() == SyntaxKind.OperatorDeclaration ||
previousToken.IsGenericGreaterThanToken() || previousToken.IsGenericGreaterThanToken() ||
currentToken.IsParenInArgumentList()) currentToken.IsParenInArgumentList())
{ {
......
...@@ -6231,6 +6231,46 @@ void Main() ...@@ -6231,6 +6231,46 @@ void Main()
AssertFormat(expected, code); AssertFormat(expected, code);
} }
[WorkItem(4240, "https://github.com/dotnet/roslyn/issues/4240")]
[Fact, Trait(Traits.Feature, Traits.Features.Formatting)]
public void VerifySpacingAfterMethodDeclarationName_Default()
{
var code = @"class Program
{
public static Program operator + (Program p1, Program p2) { return null; }
public static implicit operator string (Program p) { return null; }
public static void M () { }
}";
var expected = @"class Program
{
public static Program operator +(Program p1, Program p2) { return null; }
public static implicit operator string(Program p) { return null; }
public static void M() { }
}";
AssertFormat(expected, code);
}
[WorkItem(4240, "https://github.com/dotnet/roslyn/issues/4240")]
[Fact, Trait(Traits.Feature, Traits.Features.Formatting)]
public void VerifySpacingAfterMethodDeclarationName_NonDefault()
{
var changingOptions = new Dictionary<OptionKey, object>();
changingOptions.Add(CSharpFormattingOptions.SpacingAfterMethodDeclarationName, true);
var code = @"class Program
{
public static Program operator + (Program p1, Program p2) { return null; }
public static implicit operator string (Program p) { return null; }
public static void M () { }
}";
var expected = @"class Program
{
public static Program operator + (Program p1, Program p2) { return null; }
public static implicit operator string (Program p) { return null; }
public static void M () { }
}";
AssertFormat(expected, code, changedOptionSet: changingOptions);
}
[WorkItem(939, "https://github.com/dotnet/roslyn/issues/939")] [WorkItem(939, "https://github.com/dotnet/roslyn/issues/939")]
[Fact, Trait(Traits.Feature, Traits.Features.Formatting)] [Fact, Trait(Traits.Feature, Traits.Features.Formatting)]
public void DontFormatInsideArrayInitializers() public void DontFormatInsideArrayInitializers()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册