diff --git a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs index ca2538a7211dbc4798fffe712d3f0bfb7af06624..0f1c2e1856da0a86ea73067f8185070ccd00dae9 100644 --- a/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs +++ b/src/EditorFeatures/CSharpTest/Completion/CompletionProviders/SymbolCompletionProviderTests.cs @@ -8934,6 +8934,50 @@ void M() await Local<$$"; await VerifyAnyItemExistsAsync(markup); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public async Task TupleTypeAtMemberLevel1() + { + await VerifyItemExistsAsync(@" +class C +{ + ($$ +}", "C"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public async Task TupleTypeAtMemberLevel2() + { + await VerifyItemExistsAsync(@" +class C +{ + ($$) +}", "C"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public async Task TupleTypeAtMemberLevel3() + { + await VerifyItemExistsAsync(@" +class C +{ + (C, +}", "C"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.Completion)] + public async Task TupleTypeAtMemberLevel4() + { + await VerifyItemExistsAsync(@" +class C +{ + (C, $$) +}", "C"); } } } \ No newline at end of file diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/BoolKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/BoolKeywordRecommenderTests.cs index 0677f24db65cd4205af9ed9b0f27d5477772c28f..c81230510fcd2ade3bb04293a50e214e1dd6f8c9 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/BoolKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/BoolKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/ByteKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/ByteKeywordRecommenderTests.cs index 21bafb96ac36a0f569aba2aae283eb17fb0c6d59..64351b68d484f2dfeaf530dac5045bcf6a28453d 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/ByteKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/ByteKeywordRecommenderTests.cs @@ -624,5 +624,31 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } + diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/CharKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/CharKeywordRecommenderTests.cs index f61a933c1fc9aa8d8b4762f8fcb65e7e5a42c733..9442ee04085d00107fd788221543d29dcf09cf7d 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/CharKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/CharKeywordRecommenderTests.cs @@ -676,5 +676,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/DecimalKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/DecimalKeywordRecommenderTests.cs index 79a9529065e130129173b5d6c72bb8840684f2cb..796f6ec195a16a99fe6294c263c31a379ff33e2b 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/DecimalKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/DecimalKeywordRecommenderTests.cs @@ -624,5 +624,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ } -} +}"); + } + } +} \ No newline at end of file diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/DoubleKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/DoubleKeywordRecommenderTests.cs index 2a7f56376fab457531859a3f0a72bf9a3092556a..b47d4dbf04871b6361603dbc205e8d72fac09fb7 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/DoubleKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/DoubleKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/FloatKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/FloatKeywordRecommenderTests.cs index 33adae35ab1929313c45e63ae2c2b03a5d319648..e067568ad224579f9b3bede152d240d74a453b95 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/FloatKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/FloatKeywordRecommenderTests.cs @@ -596,5 +596,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ } -} +}"); + } + } +} \ No newline at end of file diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/IntKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/IntKeywordRecommenderTests.cs index bc32f0e6098a17b7ae5621d126dcd691ace5cb31..f4dcc39986d1c442cf7002c9b12756f3601628d9 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/IntKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/IntKeywordRecommenderTests.cs @@ -692,5 +692,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/LongKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/LongKeywordRecommenderTests.cs index 27b9b174bfcce16d7d8c705c8871e697f7722373..8c0a7eab02f1d89ee5ade2e5223434546bd73fa5 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/LongKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/LongKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/ObjectKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/ObjectKeywordRecommenderTests.cs index 0fef71c5122649adf2c582af772fc7931c2da378..97e84d5061473be824307db2f8cb3aadfb5c6116 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/ObjectKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/ObjectKeywordRecommenderTests.cs @@ -630,5 +630,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/SByteKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/SByteKeywordRecommenderTests.cs index 39b642f60287c47ffcb920f2be530187b1845880..0fe76839e08b54d20eeb90d38b5616d82c1e2b3d 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/SByteKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/SByteKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/ShortKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/ShortKeywordRecommenderTests.cs index b8fabdb0d94b5a8179934ef491fb045edcfc21f1..fc2d97d2cd7a1d2a14a2806e46a06c6583aa293e 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/ShortKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/ShortKeywordRecommenderTests.cs @@ -617,5 +617,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/StringKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/StringKeywordRecommenderTests.cs index 4d33c178686688b97c35884a3b03e89d75bec833..57c10f7bca1d64f107cf2d100cf1f8a53a1fd4fa 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/StringKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/StringKeywordRecommenderTests.cs @@ -657,5 +657,30 @@ public async Task TestNotInCrefTypeParameter() class C { } "); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/UIntKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/UIntKeywordRecommenderTests.cs index aa9fcc99f622b7c1520105dc09a4b070de4cae98..12e09428fd199e6ee2c62195055da5a3368fb486 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/UIntKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/UIntKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/ULongKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/ULongKeywordRecommenderTests.cs index d36132d56027e4cc9b1d2ebb12707fb174a960cd..5b573aa28331bca946724e9b2440403742e3ff94 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/ULongKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/ULongKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/EditorFeatures/CSharpTest2/Recommendations/UShortKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest2/Recommendations/UShortKeywordRecommenderTests.cs index 1fd36adc113ce64aa4ad2538ce67f9e5ca420c81..33b31766c18944da5334c2b8b1e491e80a2ed870 100644 --- a/src/EditorFeatures/CSharpTest2/Recommendations/UShortKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest2/Recommendations/UShortKeywordRecommenderTests.cs @@ -623,5 +623,30 @@ static void Main(string[] args) } ", matchPriority: SymbolMatchPriority.Keyword); } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinType() + { + await VerifyKeywordAsync(@" +class Program +{ + ($$ +}"); + } + + [WorkItem(14127, "https://github.com/dotnet/roslyn/issues/14127")] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public async Task TestInTupleWithinMember() + { + await VerifyKeywordAsync(@" +class Program +{ + void Method() + { + ($$ + } +}"); + } } } diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/BoolKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/BoolKeywordRecommender.cs index a341eaa9f8ab023f1f984a32e40856b5a2abdfb8..d7d61de4460d9589ba7bf43c408dde4a9e864845 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/BoolKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/BoolKeywordRecommender.cs @@ -38,6 +38,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ByteKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ByteKeywordRecommender.cs index f903e1b2f6a0c1783b34517669ce22c827b09b71..b31a4fce2a1f9e570f0dd16fd1ac1d306b22caa4 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ByteKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ByteKeywordRecommender.cs @@ -40,6 +40,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/CharKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/CharKeywordRecommender.cs index e3df28b483dbdd617c31605f2d1eb7768da3db01..5b91e72349f4b406677d9a84b9cbbb847b53463c 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/CharKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/CharKeywordRecommender.cs @@ -38,6 +38,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DecimalKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DecimalKeywordRecommender.cs index 68fde4d69fe06b676109954d14f33580e6c49823..8b9e699ce5e506298e6f91f8251988c1e37d50a6 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DecimalKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DecimalKeywordRecommender.cs @@ -38,6 +38,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DoubleKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DoubleKeywordRecommender.cs index 76f1e26e23ae08d21ea40fbd219f4bd6c4712ec4..695d585b6f11b2bac05f0c67ffd2ad6e4fe8c0e6 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DoubleKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/DoubleKeywordRecommender.cs @@ -38,6 +38,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/FloatKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/FloatKeywordRecommender.cs index 1bf96921dd2c69bd289ba7beca0ad3e058439676..b90f4c94b4477b0c7485e55d008e2e164a98ba4e 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/FloatKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/FloatKeywordRecommender.cs @@ -38,6 +38,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/IntKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/IntKeywordRecommender.cs index 78c2be511ec3571a4b37485d77e9e93c972b3c16..4eb72160998fe4ea1de24c79edb4343df8bec68a 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/IntKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/IntKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/LongKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/LongKeywordRecommender.cs index 465a09f96148410a6a70149c2fe5861add12eb1d..37a7fcaf1647b5651bca105f6b178dbf91715562 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/LongKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/LongKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/SByteKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/SByteKeywordRecommender.cs index a59455691bed167fbba42631b1847cecfd0b4c79..98e7e9459baab6bb2699bd72c5c2a34517978999 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/SByteKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/SByteKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ShortKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ShortKeywordRecommender.cs index f6604f9c02de3c2428f1429d3e39fa4c6db0adab..0b003399ada34e29dc81fb06f86988474fb8ae4d 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ShortKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ShortKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/StringKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/StringKeywordRecommender.cs index 863232a7ac2cfe8ef3284d9e8f12559dfe9bd892..83f57450274615cd3382429c18fe18c768f798ff 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/StringKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/StringKeywordRecommender.cs @@ -36,7 +36,9 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsDefaultExpressionContext(position, context.LeftToken, cancellationToken) || syntaxTree.IsAfterKeyword(position, SyntaxKind.ConstKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || + context.IsPossibleTupleContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UIntKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UIntKeywordRecommender.cs index c9936c4e663ef5eb57cd05e6136bdbed1df59089..af3e0c73c69f126495668f9f254d365ce02a80fe 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UIntKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UIntKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ULongKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ULongKeywordRecommender.cs index b98a9b2f2baf1d9a243e85983d5eb4992038ab7d..b2144e4063c4cb7248422b9fcb2042eb4fcb1011 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ULongKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/ULongKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UShortKeywordRecommender.cs b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UShortKeywordRecommender.cs index b7923aaf71cd09228e2c68a0ef29e4e8c5a365bf..4c5e7039fbc827b5017a08894f18d07ac71f1a5a 100644 --- a/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UShortKeywordRecommender.cs +++ b/src/Features/CSharp/Portable/Completion/KeywordRecommenders/UShortKeywordRecommender.cs @@ -39,6 +39,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context syntaxTree.IsAfterKeyword(position, SyntaxKind.StackAllocKeyword, cancellationToken) || context.IsDelegateReturnTypeContext || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + context.IsPossibleTupleContext || context.IsMemberDeclarationContext( validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, diff --git a/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs b/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs index 4200678823f212bd31ddcad15e1404cfa371d14d..2ca95048b9a40e7c50f5cc40b30f75b8a86e41e4 100644 --- a/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs +++ b/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs @@ -684,6 +684,7 @@ public static bool IsDefinitelyNotTypeContext(this SyntaxTree syntaxTree, int po syntaxTree.IsUsingAliasContext(position, cancellationToken) || syntaxTree.IsUsingStaticContext(position, cancellationToken) || syntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) || + syntaxTree.IsPossibleTupleContext(tokenOnLeftOfPosition, position) || syntaxTree.IsMemberDeclarationContext( position, contextOpt: null,