diff --git a/src/EditorFeatures/CSharpTest/KeywordHighlighting/ReturnStatementHighlighterTests.cs b/src/EditorFeatures/CSharpTest/KeywordHighlighting/ReturnStatementHighlighterTests.cs index 37a6e033b3a9be466df220af35b49a592026ab86..1a0aa7fc08628b0f98ce66b0e1564ab559c12f08 100644 --- a/src/EditorFeatures/CSharpTest/KeywordHighlighting/ReturnStatementHighlighterTests.cs +++ b/src/EditorFeatures/CSharpTest/KeywordHighlighting/ReturnStatementHighlighterTests.cs @@ -15,7 +15,7 @@ internal override IHighlighter CreateHighlighter() } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_1() + public async Task TestInLambda() { await TestAsync( @"static double CalculateArea(double radius) @@ -35,7 +35,7 @@ public async Task TestExample1_1() } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_2() + public async Task TestInLambda_NotOnReturnValue() { await TestAsync( @"class C @@ -58,7 +58,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_3() + public async Task TestInLambda_OnSemicolon() { await TestAsync( @"class C @@ -81,7 +81,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_4() + public async Task TestInLambda_SecondOccurence() { await TestAsync( @"class C @@ -104,7 +104,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_5() + public async Task TestInLambda_SecondOccurence_NotOnReturnValue() { await TestAsync( @"class C @@ -127,7 +127,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_6() + public async Task TestInLambda_SecondOccurence_OnSemicolon() { await TestAsync( @"class C @@ -150,7 +150,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_7() + public async Task TestInMethodWithLambda() { await TestAsync( @"class C @@ -173,7 +173,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_8() + public async Task TestInMethodWithLambda_NotOnReturnValue() { await TestAsync( @"class C @@ -196,7 +196,7 @@ static double CalculateArea(double radius) } [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] - public async Task TestExample1_9() + public async Task TestInMethodWithLambda_OnSemicolon() { await TestAsync( @"class C @@ -215,6 +215,226 @@ static double CalculateArea(double radius) }; [|return|] calcArea(radius);{|Cursor:|} } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInConstructor() + { + await TestAsync( +@"class C +{ + C() + { + {|Cursor:[|return|]|}; + [|return|]; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInDestructor() + { + await TestAsync( +@"class C +{ + ~C() + { + {|Cursor:[|return|]|}; + [|return|]; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInOperator() + { + await TestAsync( +@"class C +{ + public static string operator +(C a) + { + {|Cursor:[|return|]|} null; + [|return|] null; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInConversionOperator() + { + await TestAsync( +@"class C +{ + public static explicit operator string(C a) + { + {|Cursor:[|return|]|} null; + [|return|] null; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInGetter() + { + await TestAsync( +@"class C +{ + int P + { + get + { + {|Cursor:[|return|]|} 0; + [|return|] 0; + } + set + { + return; + return; + } + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInSetter() + { + await TestAsync( +@"class C +{ + int P + { + get + { + return 0; + return 0; + } + set + { + {|Cursor:[|return|]|}; + [|return|]; + } + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInAdder() + { + await TestAsync( +@"class C +{ + event EventHandler E + { + add + { + {|Cursor:[|return|]|}; + [|return|]; + } + remove + { + return; + return; + } + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInRemover() + { + await TestAsync( +@"class C +{ + event EventHandler E + { + add + { + return; + return; + } + remove + { + {|Cursor:[|return|]|}; + [|return|]; + } + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInLocalFunction() + { + await TestAsync( +@"class C +{ + void M() + { + void F() + { + {|Cursor:[|return|]|}; + [|return|]; + } + + return; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInSimpleLambda() + { + await TestAsync( +@"class C +{ + void M() + { + Action f = s => + { + {|Cursor:[|return|]|}; + [|return|]; + }; + + return; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInParenthesizedLambda() + { + await TestAsync( +@"class C +{ + void M() + { + Action f = (s) => + { + {|Cursor:[|return|]|}; + [|return|]; + }; + + return; + } +}"); + } + + [Fact, Trait(Traits.Feature, Traits.Features.KeywordHighlighting)] + public async Task TestInAnonymousMethod() + { + await TestAsync( +@"class C +{ + void M() + { + Action f = delegate + { + {|Cursor:[|return|]|}; + [|return|]; + }; + + return; + } }"); } } diff --git a/src/Workspaces/CSharp/Portable/Extensions/SyntaxNodeExtensions.cs b/src/Workspaces/CSharp/Portable/Extensions/SyntaxNodeExtensions.cs index 24da6c93b0b23ffffc1969f2662b19e5c8b082e7..08700568340a2a4bdd319ce08218b0f8ec5e136b 100644 --- a/src/Workspaces/CSharp/Portable/Extensions/SyntaxNodeExtensions.cs +++ b/src/Workspaces/CSharp/Portable/Extensions/SyntaxNodeExtensions.cs @@ -273,6 +273,7 @@ public static bool IsReturnableConstruct(this SyntaxNode node) case SyntaxKind.GetAccessorDeclaration: case SyntaxKind.SetAccessorDeclaration: case SyntaxKind.OperatorDeclaration: + case SyntaxKind.ConversionOperatorDeclaration: case SyntaxKind.AddAccessorDeclaration: case SyntaxKind.RemoveAccessorDeclaration: return true;