File: Recommendations\ThisKeywordRecommenderTests.cs
Web Access
Project: src\src\EditorFeatures\CSharpTest2\Microsoft.CodeAnalysis.CSharp.EditorFeatures2.UnitTests.csproj (Microsoft.CodeAnalysis.CSharp.EditorFeatures2.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Recommendations;
 
[Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public sealed class ThisKeywordRecommenderTests : KeywordRecommenderTests
{
    [Fact]
    public async Task TestNotAtRoot_Interactive()
    {
        await VerifyAbsenceAsync(SourceCodeKind.Script,
@"$$");
    }
 
    [Fact]
    public async Task TestNotAfterClass_Interactive()
    {
        await VerifyAbsenceAsync(SourceCodeKind.Script,
            """
            class C { }
            $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterGlobalStatement_Interactive()
    {
        await VerifyAbsenceAsync(SourceCodeKind.Script,
            """
            System.Console.WriteLine();
            $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterGlobalVariableDeclaration_Interactive()
    {
        await VerifyAbsenceAsync(SourceCodeKind.Script,
            """
            int i = 0;
            $$
            """);
    }
 
    [Fact]
    public async Task TestNotInUsingAlias()
    {
        await VerifyAbsenceAsync(
@"using Goo = $$");
    }
 
    [Fact]
    public async Task TestNotInGlobalUsingAlias()
    {
        await VerifyAbsenceAsync(
@"global using Goo = $$");
    }
 
    [Fact]
    public async Task TestNotAfterAngle()
    {
        await VerifyAbsenceAsync(
@"interface IGoo<$$");
    }
 
    [Fact]
    public async Task TestInterfaceTypeVarianceNotAfterIn()
    {
        await VerifyAbsenceAsync(
@"interface IGoo<in $$");
    }
 
    [Fact]
    public async Task TestInterfaceTypeVarianceNotAfterComma()
    {
        await VerifyAbsenceAsync(
@"interface IGoo<Goo, $$");
    }
 
    [Fact]
    public async Task TestInterfaceTypeVarianceNotAfterAttribute()
    {
        await VerifyAbsenceAsync(
@"interface IGoo<[Goo]$$");
    }
 
    [Fact]
    public async Task TestDelegateTypeVarianceNotAfterAngle()
    {
        await VerifyAbsenceAsync(
@"delegate void D<$$");
    }
 
    [Fact]
    public async Task TestDelegateTypeVarianceNotAfterComma()
    {
        await VerifyAbsenceAsync(
@"delegate void D<Goo, $$");
    }
 
    [Fact]
    public async Task TestDelegateTypeVarianceNotAfterAttribute()
    {
        await VerifyAbsenceAsync(
@"delegate void D<[Goo]$$");
    }
 
    [Fact]
    public async Task TestNotThisBaseListAfterAngle()
    {
        await VerifyAbsenceAsync(
@"interface IGoo : Bar<$$");
    }
 
    [Fact]
    public async Task TestNotInGenericMethod()
    {
        await VerifyAbsenceAsync(
            """
            interface IGoo {
                void Goo<$$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterRef()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void Goo(ref $$
            """);
    }
 
    [Theory, CombinatorialData]
    public async Task TestNotAfterIn([CombinatorialValues("in", "ref readonly")] string modifier)
    {
        await VerifyAbsenceAsync($$"""
            class C {
                void Goo({{modifier}} $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterThis_InBogusMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void Goo(this $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterOut()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void Goo(out $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterMethodOpenParen()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void Goo($$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterMethodComma()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void Goo(int i, $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterMethodAttribute()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void Goo(int i, [Goo]$$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterConstructorOpenParen()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                public C($$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterConstructorComma()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                public C(int i, $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterConstructorAttribute()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                public C(int i, [Goo]$$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterDelegateOpenParen()
    {
        await VerifyAbsenceAsync(
@"delegate void D($$");
    }
 
    [Fact]
    public async Task TestNotAfterDelegateComma()
    {
        await VerifyAbsenceAsync(
@"delegate void D(int i, $$");
    }
 
    [Fact]
    public async Task TestNotAfterDelegateAttribute()
    {
        await VerifyAbsenceAsync(
@"delegate void D(int i, [Goo]$$");
    }
 
    [Fact]
    public async Task TestNotAfterOperator()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static int operator +($$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterDestructor()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                ~C($$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterIndexer()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                int this[$$
            """);
    }
 
    [Fact]
    public async Task TestNotInInstanceMethodInInstanceClass()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                int Goo($$
            """);
    }
 
    [Fact]
    public async Task TestNotInStaticMethodInInstanceClass()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static int Goo($$
            """);
    }
 
    [Fact]
    public async Task TestNotInInstanceMethodInStaticClass()
    {
        await VerifyAbsenceAsync(
            """
            static class C {
                int Goo($$
            """);
    }
 
    [Fact]
    public async Task TestInStaticMethodInStaticClass()
    {
        await VerifyKeywordAsync(
            """
            static class C {
                static int Goo($$
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27028")]
    public async Task TestInLocalFunction()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    void local()
                    {
                        $$
                    }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27028")]
    public async Task TestInNestedLocalFunction()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    void local()
                    {
                        void nested()
                        {
                            $$
                        }
                    }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27028")]
    public async Task TestInLocalFunctionInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static int Method()
                {
                    void local()
                    {
                        $$
                    }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27028")]
    public async Task TestInNestedLocalFunctionInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    void local()
                    {
                        void nested()
                        {
                            $$
                        }
                    }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/35644")]
    public async Task TestInStaticLocalFunction()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                int Method()
                {
                    static void local()
                    {
                        $$
                    }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/35644")]
    public async Task TestInNestedInStaticLocalFunction()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                int Method()
                {
                    static void local()
                    {
                        void nested()
                        {
                            $$
                        }
                    }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethod()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    Action a = delegate
                    {
                        $$
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedAnonymousMethod()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    Action a = delegate
                    {
                        Action b = delegate
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    Action a = delegate
                    {
                        $$
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedAnonymousMethodInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    Action a = delegate
                    {
                        Action b = delegate
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInLambdaExpression()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    Action a = () =>
                    {
                        $$
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedLambdaExpression()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    Action a = () =>
                    {
                        Action b = () =>
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInLambdaExpressionInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    Action a = () =>
                    {
                        $$
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedLambdaExpressionInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    Action a = () =>
                    {
                        Action b = () =>
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedLambdaExpressionInAnonymousMethod()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    Action a = delegate
                    {
                        Action b = () =>
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedAnonymousInLambdaExpression()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                int Method()
                {
                    Action a = () =>
                    {
                        Action b = delegate
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedAnonymousMethodInLambdaExpressionInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    Action a = () =>
                    {
                        Action b = delegate
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInNestedLambdaExpressionInAnonymousMethodInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static int Method()
                {
                    Action a = delegate
                    {
                        Action b = () =>
                        {
                            $$
                        };
                    };
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAProperty()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                Action A 
                { 
                    get { return delegate { $$ } }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAPropertyInitializer()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                Action B { get; } = delegate { $$ }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAExpressionProperty()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                Action A => delegate { $$ }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAFieldInitializer()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                Action A = delegate { $$ }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAStaticProperty()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static Action A
                {
                    get { return delegate { $$ } }
                }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAStaticPropertyInitializer()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static Action B { get; } = delegate { $$ }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAStaticExpressionProperty()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static Action A => delegate { $$ }
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/27923")]
    public async Task TestInAnonymousMethodInAStaticFieldInitializer()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                static Action A = delegate { $$ }
            }
            """);
    }
    [Fact]
    public async Task TestAfterAttribute()
    {
        await VerifyKeywordAsync(
            """
            static class C {
                static int Goo([Bar]$$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterSecondAttribute()
    {
        await VerifyAbsenceAsync(
            """
            static class C {
                static int Goo(this int i, [Bar]$$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterThis()
    {
        await VerifyAbsenceAsync(
            """
            static class C {
                static int Goo(this $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterFirstParameter()
    {
        await VerifyAbsenceAsync(
            """
            static class C {
                static int Goo(this int a, $$
            """);
    }
 
    [Fact]
    public async Task TestInClassConstructorInitializer()
    {
        await VerifyKeywordAsync(
            """
            class C {
                public C() : $$
            """);
    }
 
    [Fact]
    public async Task TestNotInStaticClassConstructorInitializer()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static C() : $$
            """);
    }
 
    [Fact]
    public async Task TestInStructConstructorInitializer()
    {
        await VerifyKeywordAsync(
            """
            struct C {
                public C() : $$
            """);
    }
 
    [Fact]
    public async Task TestInEmptyStatement()
    {
        await VerifyKeywordAsync(AddInsideMethod(
@"$$"));
    }
 
    [Fact]
    public async Task TestAfterCast()
    {
        await VerifyKeywordAsync(AddInsideMethod(
@"stack.Push(((IEnumerable<Segment>)((TreeSegment)$$"));
    }
 
    [Fact]
    public async Task TestAfterReturn()
    {
        await VerifyKeywordAsync(AddInsideMethod(
@"return $$"));
    }
 
    [Fact]
    public async Task TestAfterIndexer()
    {
        await VerifyKeywordAsync(AddInsideMethod(
@"return this.items[$$"));
    }
 
    [Fact]
    public async Task TestAfterSimpleCast()
    {
        await VerifyKeywordAsync(AddInsideMethod(
@"return ((IEnumerable<T>)$$"));
    }
 
    [Fact]
    public async Task TestNotInClass()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                $$
            """);
    }
 
    [Fact]
    public async Task TestNotAfterVoid()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                void $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542636")]
    public async Task TestAfterType()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                int $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542636")]
    public async Task TestAfterTypeArray()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                internal byte[] $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542636")]
    public async Task TestAfterTypeArrayBeforeArguments()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                internal byte[] $$[int i] { get; }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542636")]
    public async Task TestAfterTypeBeforeArguments()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                internal byte $$[int i] { get; }
            """);
    }
 
    [Fact]
    public async Task TestAfterMultiply()
    {
        await VerifyKeywordAsync(
            """
            class C {
                internal CustomAttributeRow this[uint rowId] //  This is 1 based...
                {
                  get
                    // ^ requires rowId <= this.NumberOfRows;
                  {
                    int rowOffset = (int)(rowId - 1) * $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538264")]
    public async Task TestNotInStaticMethod()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static void Goo() { int i = $$ }
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538264")]
    public async Task TestNotInStaticProperty()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static int Goo { get { int i = $$ }
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538264")]
    public async Task TestInInstanceProperty()
    {
        await VerifyKeywordAsync(
            """
            class C {
                int Goo { get { int i = $$ }
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538264")]
    public async Task TestNotInStaticConstructor()
    {
        await VerifyAbsenceAsync(
            """
            class C {
                static C() { int i = $$ }
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538264")]
    public async Task TestInInstanceConstructor()
    {
        await VerifyKeywordAsync(
            """
            class C {
                public C() { int i = $$ }
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538264")]
    public async Task TestNotInEnumMemberInitializer1()
    {
        await VerifyAbsenceAsync(
            """
            enum E {
                a = $$
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539334")]
    public async Task TestNotAfterPartialInType()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                partial $$
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540476")]
    public async Task TestNotAfterIncompleteTypeName()
    {
        await VerifyAbsenceAsync(
            """
            class C
            {
                Goo.$$
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541712")]
    public async Task TestNotInStaticMethodContext()
    {
        await VerifyAbsenceAsync(
            """
            class Program
            {
                static void Main(string[] args)
                {
                    $$
                }
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544219")]
    public async Task TestNotInObjectInitializerMemberContext()
    {
        await VerifyAbsenceAsync("""
            class C
            {
                public int x, y;
                void M()
                {
                    var c = new C { x = 2, y = 3, $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestInExpressionBodiedMembersProperty()
    {
        await VerifyKeywordAsync("""
            class C
            {
                int x;
                int M => $$
                int p;
            }
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestInExpressionBodiedMembersMethod()
    {
        await VerifyKeywordAsync("""
            class C
            {
                int x;
                int give() => $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestInExpressionBodiedMembersIndexer()
    {
        await VerifyKeywordAsync("""
            class C
            {
                int x;
                public object this[int i] => $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestNotInExpressionBodiedMembers_Static()
    {
        await VerifyAbsenceAsync("""
            class C
            {
                int x;
                static int M => $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestNotInExpressionBodiedMembersOperator()
    {
        await VerifyAbsenceAsync("""
            class C
            {
                int x;
                public static C operator - (C c1) => $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestNotInExpressionBodiedMembersConversionOperator()
    {
        await VerifyAbsenceAsync("""
            class F
            {
            }
 
            class C
            {
                int x;
                public static explicit operator F(C c1) => $$
            """);
    }
 
    [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107414")]
    [WorkItem("https://github.com/dotnet/roslyn/issues/725")]
    public async Task TestOutsideExpressionBodiedMember()
    {
        await VerifyAbsenceAsync("""
            class C
            {
                int x;
                int M => this.x;$$
                int p;
            }
            """);
    }
 
    [Fact]
    public async Task Preselection()
    {
        await VerifyKeywordAsync("""
            class Program
            {
                void Main(string[] args)
                {
                    Helper($$)
                }
                void Helper(Program x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterRefKeyword_InClass()
    {
        await VerifyKeywordAsync("""
            public static class Extensions
            {
                public static void Extension(ref $$
            """);
 
        await VerifyKeywordAsync("""
            public static class Extensions
            {
                public static void Extension(ref $$ object obj, int x) { }
            }
            """);
    }
 
    [Theory, CombinatorialData]
    public async Task TestExtensionMethods_FirstParameter_AfterInKeyword_InClass([CombinatorialValues("in", "ref readonly")] string modifier)
    {
        await VerifyKeywordAsync($$"""
            public static class Extensions
            {
                public static void Extension({{modifier}} $$
            """);
 
        await VerifyKeywordAsync($$"""
            public static class Extensions
            {
                public static void Extension({{modifier}} $$ object obj, int x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterOutKeyword_InClass()
    {
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public static void Extension(out $$
            """);
 
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public static void Extension(out $$ object obj, int x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_SecondParameter_AfterRefKeyword_InClass()
    {
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public static void Extension(int x, ref $$
            """);
 
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public static void Extension(int x, ref $$ object obj) { }
            }
            """);
    }
 
    [Theory, CombinatorialData]
    public async Task TestExtensionMethods_SecondParameter_AfterInKeyword_InClass([CombinatorialValues("in", "ref readonly")] string modifier)
    {
        await VerifyAbsenceAsync($$"""
            public static class Extensions
            {
                public static void Extension(int x, {{modifier}} $$
            """);
 
        await VerifyAbsenceAsync($$"""
            public static class Extensions
            {
                public static void Extension(int x, {{modifier}} $$ object obj) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_SecondParameter_AfterOutKeyword_InClass()
    {
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public static void Extension(int x, out $$
            """);
 
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public static void Extension(int x, out $$ object obj) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterRefKeyword_OutsideClass()
    {
        await VerifyAbsenceAsync("public static void Extension(ref $$");
 
        await VerifyAbsenceAsync("public static void Extension(ref $$ object obj, int x) { }");
    }
 
    [Theory, CombinatorialData]
    public async Task TestExtensionMethods_FirstParameter_AfterInKeyword_OutsideClass([CombinatorialValues("in", "ref readonly")] string modifier)
    {
        await VerifyAbsenceAsync($"public static void Extension({modifier} $$");
 
        await VerifyAbsenceAsync($"public static void Extension({modifier} $$ object obj, int x) {{ }}");
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterOutKeyword_OutsideClass()
    {
        await VerifyAbsenceAsync("public static void Extension(out $$");
 
        await VerifyAbsenceAsync("public static void Extension(out $$ object obj, int x) { }");
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterRefKeyword_NonStaticClass()
    {
        await VerifyAbsenceAsync("""
            public class Extensions
            {
                public static void Extension(ref $$
            """);
 
        await VerifyAbsenceAsync("""
            public class Extensions
            {
                public static void Extension(ref $$ object obj, int x) { }
            }
            """);
    }
 
    [Theory, CombinatorialData]
    public async Task TestExtensionMethods_FirstParameter_AfterInKeyword_NonStaticClass([CombinatorialValues("in", "ref readonly")] string modifier)
    {
        await VerifyAbsenceAsync($$"""
            public class Extensions
            {
                public static void Extension({{modifier}} $$
            """);
 
        await VerifyAbsenceAsync($$"""
            public class Extensions
            {
                public static void Extension({{modifier}} $$ object obj, int x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterOutKeyword_NonStaticClass()
    {
        await VerifyAbsenceAsync("""
            public class Extensions
            {
                public static void Extension(out $$
            """);
 
        await VerifyAbsenceAsync("""
            public class Extensions
            {
                public static void Extension(out $$ object obj, int x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterRefKeyword_NonStaticMethod()
    {
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public void Extension(ref $$
            """);
 
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public void Extension(ref $$ object obj, int x) { }
            }
            """);
    }
 
    [Theory, CombinatorialData]
    public async Task TestExtensionMethods_FirstParameter_AfterInKeyword_NonStaticMethod([CombinatorialValues("in", "ref readonly")] string modifier)
    {
        await VerifyAbsenceAsync($$"""
            public static class Extensions
            {
                public void Extension({{modifier}} $$
            """);
 
        await VerifyAbsenceAsync($$"""
            public static class Extensions
            {
                public void Extension({{modifier}} $$ object obj, int x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestExtensionMethods_FirstParameter_AfterOutKeyword_NonStaticMethod()
    {
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public void Extension(out $$
            """);
 
        await VerifyAbsenceAsync("""
            public static class Extensions
            {
                public void Extension(out $$ object obj, int x) { }
            }
            """);
    }
 
    [Fact]
    public async Task TestAfterRefExpression()
    {
        await VerifyKeywordAsync(AddInsideMethod(
@"ref int x = ref $$"));
    }
 
    #region Collection expressions
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_BeforeFirstElementToVar()
    {
        await VerifyKeywordAsync(AddInsideMethod(
            """
            var x = [$$
            """));
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_BeforeFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [$$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_AfterFirstElementToVar()
    {
        await VerifyKeywordAsync(AddInsideMethod(
            """
            var x = [new object(), $$
            """));
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_AfterFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [string.Empty, $$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_SpreadBeforeFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [.. $$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_SpreadAfterFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [string.Empty, .. $$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_ParenAtFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [($$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_ParenAfterFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [string.Empty, ($$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_ParenSpreadAtFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [.. ($$
            }
            """);
    }
 
    [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/70677")]
    public async Task TestInCollectionExpressions_ParenSpreadAfterFirstElementToReturn()
    {
        await VerifyKeywordAsync(
            """
            class C
            {
                IEnumerable<string> M() => [string.Empty, .. ($$
            }
            """);
    }
 
    #endregion
}