/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/CSharpTest2/Recommendations/IsKeywordRecommenderTests.cs
319 строк
8 KB
Cyrus Najmabadi
Fix 'switch' keyword recomendations after an expression
22 июл 2025, 16:09
22 июл 2025, 16:09
078829b
Код
Авторство
О чём код?
// 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 IsKeywordRecommenderTests : KeywordRecommenderTests { [Fact] public Task TestNotAtRoot_Interactive() => VerifyAbsenceAsync(SourceCodeKind.Script, @"$$"); [Fact] public Task TestNotAfterClass_Interactive() => VerifyAbsenceAsync(SourceCodeKind.Script, """ class C { } $$ """); [Fact] public Task TestNotAfterGlobalStatement_Interactive() => VerifyAbsenceAsync(SourceCodeKind.Script, """ System.Console.WriteLine(); $$ """); [Fact] public Task TestNotAfterGlobalVariableDeclaration_Interactive() => VerifyAbsenceAsync(SourceCodeKind.Script, """ int i = 0; $$ """); [Fact] public Task TestNotInUsingAlias() => VerifyAbsenceAsync( @"using Goo = $$"); [Fact] public Task TestNotInGlobalUsingAlias() => VerifyAbsenceAsync( @"global using Goo = $$"); [Fact] public Task TestNotInEmptyStatement() => VerifyAbsenceAsync(AddInsideMethod( @"$$")); [Fact] public Task TestAfterExpr() => VerifyKeywordAsync(AddInsideMethod( @"var q = goo $$")); [Fact] public Task TestNotAfterVoid() => VerifyAbsenceAsync( """ class C { void $$ """); [Fact] public Task TestNotInForeach() => VerifyAbsenceAsync(AddInsideMethod( @"foreach (var v $$")); [Fact] public Task TestNotInFrom() => VerifyAbsenceAsync(AddInsideMethod( @"var q = from a $$")); [Fact] public Task TestNotInJoin() => VerifyAbsenceAsync(AddInsideMethod( """ var q = from a in b join x $$ """)); [Fact] public Task TestNotAfterType1() => VerifyAbsenceAsync(AddInsideMethod( @"int $$")); [Fact] public Task TestNotAfterType2() => VerifyAbsenceAsync(AddInsideMethod( @"Goo $$")); [Fact] public Task TestNotAfterType3() => VerifyAbsenceAsync(AddInsideMethod( @"Goo<Bar> $$")); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543041")] public Task TestNotAfterVarInForLoop() => VerifyAbsenceAsync(AddInsideMethod( @"for (var $$")); [Fact] public async Task TestNotAfterVarInOutArgument() { var experimentalFeatures = new System.Collections.Generic.Dictionary<string, string>(); // no experimental features to enable await VerifyAbsenceAsync(AddInsideMethod( @"M(out var $$"), options: Options.Regular.WithFeatures(experimentalFeatures), scriptOptions: Options.Script.WithFeatures(experimentalFeatures)); } [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1064811")] public Task TestNotBeforeFirstStringHole() => VerifyAbsenceAsync(AddInsideMethod( """ var x = "\{0}$$\{1}\{2}" """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1064811")] public Task TestNotBetweenStringHoles() => VerifyAbsenceAsync(AddInsideMethod( """ var x = "\{0}\{1}$$\{2}" """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1064811")] public Task TestNotAfterStringHoles() => VerifyAbsenceAsync(AddInsideMethod( """ var x = "\{0}\{1}\{2}$$" """)); [Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1064811")] public Task TestAfterLastStringHole() => VerifyKeywordAsync(AddInsideMethod( @"var x = ""\{0}\{1}\{2}"" $$")); [Fact] public Task TestAfterExpression_InMethodWithArrowBody() => VerifyKeywordAsync(""" class C { bool M() => this $$ } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/1736")] public Task TestNotWithinNumericLiteral() => VerifyAbsenceAsync(AddInsideMethod( @"var x = .$$0;")); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/28586")] public Task TestNotAfterAsync() => VerifyAbsenceAsync( """ using System; class C { void Goo() { Bar(async $$ } void Bar(Func<int, string> f) { } } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/8319")] public Task TestNotAfterMethodReference() => VerifyAbsenceAsync( """ using System; class C { void M() { var v = Console.WriteLine $$ """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/8319")] public Task TestNotAfterAnonymousMethod() => VerifyAbsenceAsync( """ using System; class C { void M() { Action a = delegate { } $$ """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/8319")] public Task TestNotAfterLambda1() => VerifyAbsenceAsync( """ using System; class C { void M() { Action b = (() => 0) $$ """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/8319")] public Task TestNotAfterLambda2() => VerifyAbsenceAsync( """ using System; class C { void M() { Action b = () => {} $$ """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/48573")] public Task TestMissingAfterNumericLiteral() => VerifyAbsenceAsync( """ class C { void M() { var x = 1$$ } } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/48573")] public Task TestMissingAfterNumericLiteralAndDot() => VerifyAbsenceAsync( """ class C { void M() { var x = 1.$$ } } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/48573")] public Task TestMissingAfterNumericLiteralDotAndSpace() => VerifyAbsenceAsync( """ class C { void M() { var x = 1. $$ } } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/31367")] public Task TestMissingInCaseClause1() => VerifyAbsenceAsync( """ class A { } class C { void M(object o) { switch (o) { case A $$ } } } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/31367")] public Task TestMissingInCaseClause2() => VerifyAbsenceAsync( """ namespace N { class A { } } class C { void M(object o) { switch (o) { case N.A $$ } } } """); [Fact, WorkItem("https://github.com/dotnet/roslyn/issues/78800")] public Task TestAfterReturnExpression() => VerifyKeywordAsync( """ class C { public static string EvaluateRangeVariable() { return RandomValue() $$ } public int RandomValue() => 0; } """); }