diff --git a/src/Features/CSharp/Portable/CodeRefactorings/EnableNullable/EnableNullableCodeRefactoringProvider.FixAllProvider.cs b/src/Features/CSharp/Portable/CodeRefactorings/EnableNullable/EnableNullableCodeRefactoringProvider.FixAllProvider.cs index 839ef19d05b14..03f545b781379 100644 --- a/src/Features/CSharp/Portable/CodeRefactorings/EnableNullable/EnableNullableCodeRefactoringProvider.FixAllProvider.cs +++ b/src/Features/CSharp/Portable/CodeRefactorings/EnableNullable/EnableNullableCodeRefactoringProvider.FixAllProvider.cs @@ -30,10 +30,10 @@ private RefactorAllProvider() public override IEnumerable GetSupportedRefactorAllScopes() => [RefactorAllScope.Solution]; - public override Task GetRefactoringAsync(RefactorAllContext fixAllContext) + public override async Task GetRefactoringAsync(RefactorAllContext fixAllContext) { Debug.Assert(fixAllContext.Scope == RefactorAllScope.Solution); - return Task.FromResult(new FixAllCodeAction(EnableNullableReferenceTypesInSolutionAsync)); + return new FixAllCodeAction(EnableNullableReferenceTypesInSolutionAsync); async Task EnableNullableReferenceTypesInSolutionAsync( CodeActionPurpose purpose, IProgress progress, CancellationToken cancellationToken) diff --git a/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/UseImplicitTypeCodeRefactoringProvider.cs b/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/UseImplicitTypeCodeRefactoringProvider.cs index 8567987595b96..d5bbe6f0f664c 100644 --- a/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/UseImplicitTypeCodeRefactoringProvider.cs +++ b/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/UseImplicitTypeCodeRefactoringProvider.cs @@ -32,9 +32,8 @@ protected override TypeSyntax FindAnalyzableType(SyntaxNode node, SemanticModel protected override TypeStyleResult AnalyzeTypeName(TypeSyntax typeName, SemanticModel semanticModel, CSharpSimplifierOptions options, CancellationToken cancellationToken) => CSharpUseImplicitTypeHelper.Instance.AnalyzeTypeName(typeName, semanticModel, options, cancellationToken); - protected override Task HandleDeclarationAsync(Document document, SyntaxEditor editor, TypeSyntax type, CancellationToken cancellationToken) + protected override async Task HandleDeclarationAsync(Document document, SyntaxEditor editor, TypeSyntax type, CancellationToken cancellationToken) { UseImplicitTypeCodeFixProvider.ReplaceTypeWithVar(editor, type); - return Task.CompletedTask; } } diff --git a/src/Features/CSharp/Portable/CodeRefactorings/UseRecursivePatterns/UseRecursivePatternsCodeRefactoringProvider.cs b/src/Features/CSharp/Portable/CodeRefactorings/UseRecursivePatterns/UseRecursivePatternsCodeRefactoringProvider.cs index ca1c863dbf3ac..82627f28ab148 100644 --- a/src/Features/CSharp/Portable/CodeRefactorings/UseRecursivePatterns/UseRecursivePatternsCodeRefactoringProvider.cs +++ b/src/Features/CSharp/Portable/CodeRefactorings/UseRecursivePatterns/UseRecursivePatternsCodeRefactoringProvider.cs @@ -65,7 +65,7 @@ public override async Task ComputeRefactoringsAsync(CodeRefactoringContext conte context.RegisterRefactoring( CodeAction.Create( CSharpFeaturesResources.Use_recursive_patterns, - _ => Task.FromResult(document.WithSyntaxRoot(replacementFunc(root))), + async _ => document.WithSyntaxRoot(replacementFunc(root)), nameof(CSharpFeaturesResources.Use_recursive_patterns))); } diff --git a/src/Features/CSharp/Portable/Completion/CSharpCompletionService.cs b/src/Features/CSharp/Portable/Completion/CSharpCompletionService.cs index dc1efe67c8b1b..b0507828f831c 100644 --- a/src/Features/CSharp/Portable/Completion/CSharpCompletionService.cs +++ b/src/Features/CSharp/Portable/Completion/CSharpCompletionService.cs @@ -68,7 +68,7 @@ internal override CompletionRules GetRules(CompletionOptions options) return newRules; } - internal override async Task IsSpeculativeTypeParameterContextAsync(Document document, int position, CancellationToken cancellationToken) + internal override async ValueTask IsSpeculativeTypeParameterContextAsync(Document document, int position, CancellationToken cancellationToken) { var syntaxTree = await document.GetRequiredSyntaxTreeAsync(cancellationToken).ConfigureAwait(false); diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/AttributeNamedParameterCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/AttributeNamedParameterCompletionProvider.cs index e525d687a4d53..ebd313850f93b 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/AttributeNamedParameterCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/AttributeNamedParameterCompletionProvider.cs @@ -243,8 +243,8 @@ private static IEnumerable GetAttributeNamedParameters( return attributeType.GetAttributeNamedParameters(semanticModel.Compilation, within); } - protected override Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) - => Task.FromResult(GetTextChange(selectedItem, ch)); + protected override async Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + => GetTextChange(selectedItem, ch); private static TextChange? GetTextChange(CompletionItem selectedItem, char? ch) { diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/CrefCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/CrefCompletionProvider.cs index 3281aeda172f5..50f65ccd6d3d3 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/CrefCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/CrefCompletionProvider.cs @@ -365,14 +365,14 @@ private static CompletionItemRules GetRules(string displayText) } } - protected override Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + protected override async Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) { if (!SymbolCompletionItem.TryGetInsertionText(selectedItem, out var insertionText)) { insertionText = selectedItem.DisplayText; } - return Task.FromResult(new TextChange(selectedItem.Span, insertionText)); + return new TextChange(selectedItem.Span, insertionText); } internal TestAccessor GetTestAccessor() diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProvider.cs index 65a62f5b1d49b..e7cf6c02234cf 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProvider.cs @@ -61,14 +61,14 @@ public override async Task ProvideCompletionsAsync(CompletionContext context) } } - protected override Task> GetSymbolsAsync( + protected override async Task> GetSymbolsAsync( CompletionContext? completionContext, CSharpSyntaxContext context, int position, CompletionOptions options, CancellationToken cancellationToken) { var targetToken = context.TargetToken; // Don't want to offer this after "async" (even though the compiler may parse that as a type). if (SyntaxFacts.GetContextualKeywordKind(targetToken.ValueText) == SyntaxKind.AsyncKeyword) - return SpecializedTasks.EmptyImmutableArray(); + return []; var potentialTypeNode = targetToken.Parent; if (targetToken.IsKind(SyntaxKind.GreaterThanToken) && potentialTypeNode is TypeArgumentListSyntax typeArgumentList) @@ -89,17 +89,17 @@ protected override Task> GetSymbolsAsync( } if (typeNode == null) - return SpecializedTasks.EmptyImmutableArray(); + return []; // We weren't after something that looked like a type. var tokenBeforeType = typeNode.GetFirstToken().GetPreviousToken(); if (!IsPreviousTokenValid(tokenBeforeType)) - return SpecializedTasks.EmptyImmutableArray(); + return []; var typeDeclaration = typeNode.GetAncestor(); if (typeDeclaration == null) - return SpecializedTasks.EmptyImmutableArray(); + return []; // Looks syntactically good. See what interfaces our containing class/struct/interface has Debug.Assert(IsClassOrStructOrInterfaceOrRecord(typeDeclaration)); @@ -115,7 +115,7 @@ protected override Task> GetSymbolsAsync( interfaceSet.AddRange(directInterface.AllInterfaces); } - return Task.FromResult(interfaceSet.SelectAsArray(t => new SymbolAndSelectionInfo(Symbol: t, Preselect: false))); + return interfaceSet.SelectAsArray(t => new SymbolAndSelectionInfo(Symbol: t, Preselect: false)); } private static bool IsPreviousTokenValid(SyntaxToken tokenBeforeType) diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/ImportCompletion/ExtensionMemberImportCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/ImportCompletion/ExtensionMemberImportCompletionProvider.cs index 85b8c0c52f911..e665f235033e8 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/ImportCompletion/ExtensionMemberImportCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/ImportCompletion/ExtensionMemberImportCompletionProvider.cs @@ -46,7 +46,7 @@ protected override bool IsFinalSemicolonOfUsingOrExtern(SyntaxNode directive, Sy }; } - protected override Task ShouldProvideParenthesisCompletionAsync( + protected override async Task ShouldProvideParenthesisCompletionAsync( Document document, CompletionItem item, char? commitKey, @@ -57,7 +57,7 @@ protected override Task ShouldProvideParenthesisCompletionAsync( // it can only be used as like: bar.ToInt(); // Func x = bar.ToInt or Func x = bar.ToInt is illegal. It can't be assign to delegate. // Therefore at here we always assume the user always wants to add parenthesis. - => Task.FromResult(commitKey is ';' or '.'); + => commitKey is ';' or '.'; protected override (ITypeSymbol? receiverTypeSymbol, bool isStatic) TryGetReceiverTypeSymbol( SemanticModel semanticModel, diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/NamedParameterCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/NamedParameterCompletionProvider.cs index ea2d30a4250d0..4a423e7237ec5 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/NamedParameterCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/NamedParameterCompletionProvider.cs @@ -277,12 +277,12 @@ bool IEqualityComparer.Equals(IParameterSymbol? x, IParameterS int IEqualityComparer.GetHashCode(IParameterSymbol obj) => obj.Name.GetHashCode(); - protected override Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + protected override async Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) { - return Task.FromResult(new TextChange( + return new TextChange( selectedItem.Span, // Insert extra colon if committing with '(' only: "method(parameter:(" is preferred to "method(parameter(". // In all other cases, do not add extra colon. Note that colon is already added if committing with ':'. - ch == '(' ? selectedItem.GetEntireDisplayText() : selectedItem.DisplayText)); + ch == '(' ? selectedItem.GetEntireDisplayText() : selectedItem.DisplayText); } } diff --git a/src/Features/CSharp/Portable/Completion/CompletionProviders/TupleNameCompletionProvider.cs b/src/Features/CSharp/Portable/Completion/CompletionProviders/TupleNameCompletionProvider.cs index 9a6d275f073a8..7e8eb091f0b62 100644 --- a/src/Features/CSharp/Portable/Completion/CompletionProviders/TupleNameCompletionProvider.cs +++ b/src/Features/CSharp/Portable/Completion/CompletionProviders/TupleNameCompletionProvider.cs @@ -113,11 +113,11 @@ private static void AddItems(ImmutableArray inferredTypes, int } } - protected override Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + protected override async Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) { - return Task.FromResult(new TextChange( + return new TextChange( selectedItem.Span, - selectedItem.DisplayText)); + selectedItem.DisplayText); } public override ImmutableHashSet TriggerCharacters => []; diff --git a/src/Features/CSharp/Portable/Completion/Providers/DefaultArgumentProvider.cs b/src/Features/CSharp/Portable/Completion/Providers/DefaultArgumentProvider.cs index 678c1d7046b04..aed957642f6c3 100644 --- a/src/Features/CSharp/Portable/Completion/Providers/DefaultArgumentProvider.cs +++ b/src/Features/CSharp/Portable/Completion/Providers/DefaultArgumentProvider.cs @@ -22,7 +22,7 @@ public DefaultArgumentProvider() { } - public override Task ProvideArgumentAsync(ArgumentContext context) + public override async Task ProvideArgumentAsync(ArgumentContext context) { if (context.PreviousValue is { }) { @@ -52,7 +52,5 @@ public override Task ProvideArgumentAsync(ArgumentContext context) _ => "default", }; } - - return Task.CompletedTask; } } diff --git a/src/Features/CSharp/Portable/Completion/Providers/OutVariableArgumentProvider.cs b/src/Features/CSharp/Portable/Completion/Providers/OutVariableArgumentProvider.cs index 00cf305a680e5..1075a6e961e0b 100644 --- a/src/Features/CSharp/Portable/Completion/Providers/OutVariableArgumentProvider.cs +++ b/src/Features/CSharp/Portable/Completion/Providers/OutVariableArgumentProvider.cs @@ -24,18 +24,18 @@ public OutVariableArgumentProvider() { } - public override Task ProvideArgumentAsync(ArgumentContext context) + public override async Task ProvideArgumentAsync(ArgumentContext context) { if (context.PreviousValue is not null) { // This argument provider does not attempt to replace arguments already in code. - return Task.CompletedTask; + return; } if (context.Parameter.RefKind != RefKind.Out) { // This argument provider only considers 'out' parameters. - return Task.CompletedTask; + return; } // Since tihs provider runs after ContextVariableArgumentProvider, we know there is no suitable target in @@ -60,6 +60,5 @@ public override Task ProvideArgumentAsync(ArgumentContext context) [])))); context.DefaultValue = syntax.NormalizeWhitespace().ToFullString(); - return Task.CompletedTask; } } diff --git a/src/Features/CSharp/Portable/Copilot/CSharpCopilotCodeFixProvider.DismissChangesCodeAction.cs b/src/Features/CSharp/Portable/Copilot/CSharpCopilotCodeFixProvider.DismissChangesCodeAction.cs index aaee437c94516..a5beb9785fa38 100644 --- a/src/Features/CSharp/Portable/Copilot/CSharpCopilotCodeFixProvider.DismissChangesCodeAction.cs +++ b/src/Features/CSharp/Portable/Copilot/CSharpCopilotCodeFixProvider.DismissChangesCodeAction.cs @@ -22,12 +22,11 @@ private sealed class CopilotDismissChangesCodeAction(SyntaxNode originalMethodNo { public override string Title => FeaturesResources.Dismiss; - protected override Task> ComputePreviewOperationsAsync(CancellationToken cancellationToken) - => Task.FromResult>(null!); + protected override async Task> ComputePreviewOperationsAsync(CancellationToken cancellationToken) + => null!; - protected override Task> ComputeOperationsAsync(CancellationToken cancellationToken) - => Task.FromResult>( - [new TriggerDismissalCodeActionOperation(originalMethodNode, diagnostic)]); + protected override async Task> ComputeOperationsAsync(CancellationToken cancellationToken) + => [new TriggerDismissalCodeActionOperation(originalMethodNode, diagnostic)]; private sealed class TriggerDismissalCodeActionOperation(SyntaxNode originalMethodNode, Diagnostic diagnostic) : CodeActionOperation { diff --git a/src/Features/CSharp/Portable/DocumentHighlighting/CSharpDocumentHighlightsService.cs b/src/Features/CSharp/Portable/DocumentHighlighting/CSharpDocumentHighlightsService.cs index d8ff380709b28..a08bdb4e4294d 100644 --- a/src/Features/CSharp/Portable/DocumentHighlighting/CSharpDocumentHighlightsService.cs +++ b/src/Features/CSharp/Portable/DocumentHighlighting/CSharpDocumentHighlightsService.cs @@ -31,7 +31,7 @@ internal sealed class CSharpDocumentHighlightsService( CSharpSyntaxKinds.Instance, services) { - protected override async Task> GetAdditionalReferencesAsync( + protected override async ValueTask> GetAdditionalReferencesAsync( Document document, ISymbol symbol, CancellationToken cancellationToken) { // The FindRefs engine won't find references through 'var' for performance reasons. diff --git a/src/Features/CSharp/Portable/ExtractInterface/CSharpExtractInterfaceService.cs b/src/Features/CSharp/Portable/ExtractInterface/CSharpExtractInterfaceService.cs index 36b10c8df0b20..6fdd8560c3cbe 100644 --- a/src/Features/CSharp/Portable/ExtractInterface/CSharpExtractInterfaceService.cs +++ b/src/Features/CSharp/Portable/ExtractInterface/CSharpExtractInterfaceService.cs @@ -63,7 +63,7 @@ internal override bool ShouldIncludeAccessibilityModifier(SyntaxNode typeNode) return typeDeclaration.Modifiers.Any(m => SyntaxFacts.IsAccessibilityModifier(m.Kind())); } - protected override Task UpdateMembersWithExplicitImplementationsAsync( + protected override async Task UpdateMembersWithExplicitImplementationsAsync( Solution unformattedSolution, IReadOnlyList documentIds, INamedTypeSymbol extractedInterface, INamedTypeSymbol typeToExtractFrom, IEnumerable includedMembers, ImmutableDictionary symbolToDeclarationMap, @@ -72,6 +72,6 @@ protected override Task UpdateMembersWithExplicitImplementationsAsync( // In C#, member implementations do not always need // to be explicitly added. It's safe enough to return // the passed in solution - return Task.FromResult(unformattedSolution); + return unformattedSolution; } } diff --git a/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.MultipleStatementsCodeGenerator.cs b/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.MultipleStatementsCodeGenerator.cs index 842a16f5c4305..ac9232df581a6 100644 --- a/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.MultipleStatementsCodeGenerator.cs +++ b/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.MultipleStatementsCodeGenerator.cs @@ -83,10 +83,10 @@ protected override SyntaxNode GetFirstStatementOrInitializerSelectedAtCallSite() protected override SyntaxNode GetLastStatementOrInitializerSelectedAtCallSite() => this.SelectionResult.GetLastStatementUnderContainer(); - protected override Task GetStatementOrInitializerContainingInvocationToExtractedMethodAsync(CancellationToken cancellationToken) + protected override async Task GetStatementOrInitializerContainingInvocationToExtractedMethodAsync(CancellationToken cancellationToken) { var statement = GetStatementContainingInvocationToExtractedMethodWorker(); - return Task.FromResult(statement.WithAdditionalAnnotations(CallSiteAnnotation)); + return statement.WithAdditionalAnnotations(CallSiteAnnotation); } } } diff --git a/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.SingleStatementCodeGenerator.cs b/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.SingleStatementCodeGenerator.cs index befaafb31ffc3..cadfe83c8c745 100644 --- a/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.SingleStatementCodeGenerator.cs +++ b/src/Features/CSharp/Portable/ExtractMethod/CSharpMethodExtractor.CSharpCodeGenerator.SingleStatementCodeGenerator.cs @@ -44,10 +44,10 @@ protected override SyntaxNode GetLastStatementOrInitializerSelectedAtCallSite() return this.SelectionResult.GetFirstStatement(); } - protected override Task GetStatementOrInitializerContainingInvocationToExtractedMethodAsync(CancellationToken cancellationToken) + protected override async Task GetStatementOrInitializerContainingInvocationToExtractedMethodAsync(CancellationToken cancellationToken) { var statement = GetStatementContainingInvocationToExtractedMethodWorker(); - return Task.FromResult(statement.WithAdditionalAnnotations(CallSiteAnnotation)); + return statement.WithAdditionalAnnotations(CallSiteAnnotation); } } } diff --git a/src/Features/CSharp/Portable/GoToDefinition/CSharpGoToDefinitionSymbolService.cs b/src/Features/CSharp/Portable/GoToDefinition/CSharpGoToDefinitionSymbolService.cs index af747c6470b09..a0b5f2f03af54 100644 --- a/src/Features/CSharp/Portable/GoToDefinition/CSharpGoToDefinitionSymbolService.cs +++ b/src/Features/CSharp/Portable/GoToDefinition/CSharpGoToDefinitionSymbolService.cs @@ -22,8 +22,8 @@ namespace Microsoft.CodeAnalysis.CSharp.GoToDefinition; [method: Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] internal sealed class CSharpGoToDefinitionSymbolService() : AbstractGoToDefinitionSymbolService { - protected override Task FindRelatedExplicitlyDeclaredSymbolAsync(Project project, ISymbol symbol, CancellationToken cancellationToken) - => Task.FromResult(symbol); + protected override async Task FindRelatedExplicitlyDeclaredSymbolAsync(Project project, ISymbol symbol, CancellationToken cancellationToken) + => symbol; protected override int? GetTargetPositionIfControlFlow(SemanticModel semanticModel, SyntaxToken token) { diff --git a/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceVariableService_IntroduceField.cs b/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceVariableService_IntroduceField.cs index 3a051264177cf..e63edc15a02ab 100644 --- a/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceVariableService_IntroduceField.cs +++ b/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceVariableService_IntroduceField.cs @@ -22,7 +22,7 @@ namespace Microsoft.CodeAnalysis.CSharp.IntroduceVariable; internal sealed partial class CSharpIntroduceVariableService { - protected override Task IntroduceFieldAsync( + protected override async Task IntroduceFieldAsync( SemanticDocument document, ExpressionSyntax expression, bool allOccurrences, @@ -68,7 +68,7 @@ protected override Task IntroduceFieldAsync( var finalTypeDeclaration = InsertMember(newTypeDeclaration, newFieldDeclaration, insertionIndex); var newRoot = document.Root.ReplaceNode(oldTypeDeclaration, finalTypeDeclaration); - return Task.FromResult(document.Document.WithSyntaxRoot(newRoot)); + return document.Document.WithSyntaxRoot(newRoot); } else { @@ -81,7 +81,7 @@ protected override Task IntroduceFieldAsync( : DetermineFieldInsertPosition(oldCompilationUnit.Members, newCompilationUnit.Members); var newRoot = newCompilationUnit.WithMembers(newCompilationUnit.Members.Insert(insertionIndex, newFieldDeclaration)); - return Task.FromResult(document.Document.WithSyntaxRoot(newRoot)); + return document.Document.WithSyntaxRoot(newRoot); } } diff --git a/src/Features/CSharp/Portable/LanguageServices/CSharpSymbolDisplayService.SymbolDescriptionBuilder.cs b/src/Features/CSharp/Portable/LanguageServices/CSharpSymbolDisplayService.SymbolDescriptionBuilder.cs index 7d26c03d7f728..71e5dd9c5b902 100644 --- a/src/Features/CSharp/Portable/LanguageServices/CSharpSymbolDisplayService.SymbolDescriptionBuilder.cs +++ b/src/Features/CSharp/Portable/LanguageServices/CSharpSymbolDisplayService.SymbolDescriptionBuilder.cs @@ -92,24 +92,24 @@ protected override void AddEnumUnderlyingTypeSeparator() Space()); } - protected override Task> GetInitializerSourcePartsAsync( + protected override async Task> GetInitializerSourcePartsAsync( ISymbol symbol) { // Actually check for C# symbol types here. if (symbol is IParameterSymbol parameter) { - return GetInitializerSourcePartsAsync(parameter); + return await GetInitializerSourcePartsAsync(parameter).ConfigureAwait(false); } else if (symbol is ILocalSymbol local) { - return GetInitializerSourcePartsAsync(local); + return await GetInitializerSourcePartsAsync(local).ConfigureAwait(false); } else if (symbol is IFieldSymbol field) { - return GetInitializerSourcePartsAsync(field); + return await GetInitializerSourcePartsAsync(field).ConfigureAwait(false); } - return SpecializedTasks.EmptyImmutableArray(); + return []; } protected override ImmutableArray ToMinimalDisplayParts(ISymbol symbol, SemanticModel semanticModel, int position, SymbolDisplayFormat format) diff --git a/src/Features/CSharp/Portable/QuickInfo/CSharpDiagnosticAnalyzerQuickInfoProvider.cs b/src/Features/CSharp/Portable/QuickInfo/CSharpDiagnosticAnalyzerQuickInfoProvider.cs index c13f4d3f7e28b..eaecc0fa61d38 100644 --- a/src/Features/CSharp/Portable/QuickInfo/CSharpDiagnosticAnalyzerQuickInfoProvider.cs +++ b/src/Features/CSharp/Portable/QuickInfo/CSharpDiagnosticAnalyzerQuickInfoProvider.cs @@ -38,13 +38,13 @@ await GetQuickinfoForPragmaWarningAsync(document, token, cancellationToken).Conf await GetQuickInfoForSuppressMessageAttributeAsync(document, token, cancellationToken).ConfigureAwait(false); } - protected override Task BuildQuickInfoAsync( + protected override async Task BuildQuickInfoAsync( CommonQuickInfoContext context, SyntaxToken token) { // TODO: This provider currently needs access to Document/Project to compute applicable analyzers // and provide quick info, which is not available in CommonQuickInfoContext. - return Task.FromResult(null); + return null; } private static async Task GetQuickinfoForPragmaWarningAsync( diff --git a/src/Features/CSharp/Portable/QuickInfo/CSharpSyntacticQuickInfoProvider.cs b/src/Features/CSharp/Portable/QuickInfo/CSharpSyntacticQuickInfoProvider.cs index 4a8c56fd6b141..f34c4994ae03c 100644 --- a/src/Features/CSharp/Portable/QuickInfo/CSharpSyntacticQuickInfoProvider.cs +++ b/src/Features/CSharp/Portable/QuickInfo/CSharpSyntacticQuickInfoProvider.cs @@ -23,15 +23,15 @@ namespace Microsoft.CodeAnalysis.CSharp.QuickInfo; [method: SuppressMessage("RoslynDiagnosticsReliability", "RS0033:Importing constructor should be [Obsolete]", Justification = "Used in test code: https://github.com/dotnet/roslyn/issues/42814")] internal sealed class CSharpSyntacticQuickInfoProvider() : CommonQuickInfoProvider { - protected override Task BuildQuickInfoAsync( + protected override async Task BuildQuickInfoAsync( QuickInfoContext context, SyntaxToken token) - => Task.FromResult(BuildQuickInfo(token, context.CancellationToken)); + => BuildQuickInfo(token, context.CancellationToken); - protected override Task BuildQuickInfoAsync( + protected override async Task BuildQuickInfoAsync( CommonQuickInfoContext context, SyntaxToken token) - => Task.FromResult(BuildQuickInfo(token, context.CancellationToken)); + => BuildQuickInfo(token, context.CancellationToken); private static QuickInfoItem? BuildQuickInfo(SyntaxToken token, CancellationToken cancellationToken) { diff --git a/src/Features/CSharp/Portable/SignatureHelp/InvocationExpressionSignatureHelpProviderBase_MethodGroup.cs b/src/Features/CSharp/Portable/SignatureHelp/InvocationExpressionSignatureHelpProviderBase_MethodGroup.cs index 5b2a83eecbef4..d89891c0fd99d 100644 --- a/src/Features/CSharp/Portable/SignatureHelp/InvocationExpressionSignatureHelpProviderBase_MethodGroup.cs +++ b/src/Features/CSharp/Portable/SignatureHelp/InvocationExpressionSignatureHelpProviderBase_MethodGroup.cs @@ -17,7 +17,7 @@ namespace Microsoft.CodeAnalysis.CSharp.SignatureHelp; internal abstract partial class InvocationExpressionSignatureHelpProviderBase { - internal virtual Task<(ImmutableArray items, int? selectedItemIndex)> GetMethodGroupItemsAndSelectionAsync( + internal virtual async Task<(ImmutableArray items, int? selectedItemIndex)> GetMethodGroupItemsAndSelectionAsync( ImmutableArray accessibleMethods, Document document, InvocationExpressionSyntax invocationExpression, @@ -29,7 +29,7 @@ internal abstract partial class InvocationExpressionSignatureHelpProviderBase var items = accessibleMethods.SelectAsArray(method => ConvertMethodGroupMethod( document, method, invocationExpression.SpanStart, semanticModel)); var selectedItemIndex = TryGetSelectedIndex(accessibleMethods, currentSymbol); - return Task.FromResult((items, selectedItemIndex)); + return (items, selectedItemIndex); } private static ImmutableArray GetAccessibleMethods( diff --git a/src/Features/CSharp/Portable/Snippets/AbstractCSharpAutoPropertySnippetProvider.cs b/src/Features/CSharp/Portable/Snippets/AbstractCSharpAutoPropertySnippetProvider.cs index 3068e293019c9..dbd917f054aab 100644 --- a/src/Features/CSharp/Portable/Snippets/AbstractCSharpAutoPropertySnippetProvider.cs +++ b/src/Features/CSharp/Portable/Snippets/AbstractCSharpAutoPropertySnippetProvider.cs @@ -75,16 +75,16 @@ protected override async Task GenerateSnippetSyntaxAs protected override int GetTargetCaretPosition(PropertyDeclarationSyntax propertyDeclaration, SourceText sourceText) => propertyDeclaration.AccessorList!.CloseBraceToken.Span.End; - protected override ValueTask> GetPlaceHolderLocationsListAsync( + protected override async ValueTask> GetPlaceHolderLocationsListAsync( Document document, PropertyDeclarationSyntax propertyDeclaration, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) { var identifier = propertyDeclaration.Identifier; var type = propertyDeclaration.Type; - return new([ + return [ new SnippetPlaceholder(type.ToString(), type.SpanStart), new SnippetPlaceholder(identifier.ValueText, identifier.SpanStart), - ]); + ]; } protected override PropertyDeclarationSyntax? FindAddedSnippetSyntaxNode(SyntaxNode root, int position) diff --git a/src/Features/CSharp/Portable/Snippets/AbstractCSharpForLoopSnippetProvider.cs b/src/Features/CSharp/Portable/Snippets/AbstractCSharpForLoopSnippetProvider.cs index 489b8af6abeb4..f02eacb351808 100644 --- a/src/Features/CSharp/Portable/Snippets/AbstractCSharpForLoopSnippetProvider.cs +++ b/src/Features/CSharp/Portable/Snippets/AbstractCSharpForLoopSnippetProvider.cs @@ -45,14 +45,14 @@ internal abstract class AbstractCSharpForLoopSnippetProvider : AbstractForLoopSn protected override bool CanInsertStatementAfterToken(SyntaxToken token) => token.IsBeginningOfStatementContext() || token.IsBeginningOfGlobalStatementContext(); - protected override ValueTask AdjustSnippetExpressionAsync( + protected override async ValueTask AdjustSnippetExpressionAsync( Document document, ForStatementSyntax snippetExpressionNode, CancellationToken cancellationToken) { var editor = new SyntaxEditor(snippetExpressionNode, document.Project.Solution.Services); foreach (var node in snippetExpressionNode.Declaration!.DescendantNodesAndSelf().Reverse()) editor.ReplaceNode(node, (node, _) => node.WithAdditionalAnnotations(Simplifier.Annotation)); - return new((ForStatementSyntax)editor.GetChangedRoot()); + return (ForStatementSyntax)editor.GetChangedRoot(); } protected override ForStatementSyntax GenerateStatement( @@ -108,7 +108,7 @@ protected override ForStatementSyntax GenerateStatement( } } - protected override ValueTask> GetPlaceHolderLocationsListAsync( + protected override async ValueTask> GetPlaceHolderLocationsListAsync( Document document, ForStatementSyntax forStatement, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) { using var _ = ArrayBuilder.GetInstance(out var result); @@ -133,7 +133,7 @@ protected override ValueTask> GetPlaceHolderL foreach (var (key, value) in placeholderBuilder) result.Add(new(key, [.. value])); - return new(result.ToImmutableAndClear()); + return result.ToImmutableAndClear(); } protected override int GetTargetCaretPosition(ForStatementSyntax forStatement, SourceText sourceText) diff --git a/src/Features/CSharp/Portable/Snippets/CSharpElseSnippetProvider.cs b/src/Features/CSharp/Portable/Snippets/CSharpElseSnippetProvider.cs index a720e79571b8d..867c740ee82fc 100644 --- a/src/Features/CSharp/Portable/Snippets/CSharpElseSnippetProvider.cs +++ b/src/Features/CSharp/Portable/Snippets/CSharpElseSnippetProvider.cs @@ -54,10 +54,10 @@ protected override bool IsValidSnippetLocationCore(SnippetContext context, Cance return isAfterIfStatement && base.IsValidSnippetLocationCore(context, cancellationToken); } - protected override Task GenerateSnippetTextChangeAsync(Document document, int position, CancellationToken cancellationToken) + protected override async Task GenerateSnippetTextChangeAsync(Document document, int position, CancellationToken cancellationToken) { var elseClause = SyntaxFactory.ElseClause(SyntaxFactory.Block()); - return Task.FromResult(new TextChange(TextSpan.FromBounds(position, position), elseClause.ToFullString())); + return new TextChange(TextSpan.FromBounds(position, position), elseClause.ToFullString()); } protected override int GetTargetCaretPosition(ElseClauseSyntax elseClause, SourceText sourceText) diff --git a/src/Features/CSharp/Portable/Snippets/CSharpForEachLoopSnippetProvider.cs b/src/Features/CSharp/Portable/Snippets/CSharpForEachLoopSnippetProvider.cs index fa3e97345f88c..259a436d11a8c 100644 --- a/src/Features/CSharp/Portable/Snippets/CSharpForEachLoopSnippetProvider.cs +++ b/src/Features/CSharp/Portable/Snippets/CSharpForEachLoopSnippetProvider.cs @@ -111,7 +111,7 @@ protected override ForEachStatementSyntax GenerateStatement( /// Goes through each piece of the foreach statement and extracts the identifiers /// as well as their locations to create SnippetPlaceholder's of each. /// - protected override ValueTask> GetPlaceHolderLocationsListAsync( + protected override async ValueTask> GetPlaceHolderLocationsListAsync( Document document, ForEachStatementSyntax node, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) { using var _ = ArrayBuilder.GetInstance(out var arrayBuilder); @@ -120,7 +120,7 @@ protected override ValueTask> GetPlaceHolderL if (!ConstructedFromInlineExpression) arrayBuilder.Add(new SnippetPlaceholder(node.Expression.ToString(), node.Expression.SpanStart)); - return new(arrayBuilder.ToImmutableAndClear()); + return arrayBuilder.ToImmutableAndClear(); } protected override int GetTargetCaretPosition(ForEachStatementSyntax forEachStatement, SourceText sourceText) diff --git a/src/Features/CSharp/Portable/Snippets/CSharpLockSnippetProvider.cs b/src/Features/CSharp/Portable/Snippets/CSharpLockSnippetProvider.cs index 10a6b9d6620cc..eb433a3aa0ae9 100644 --- a/src/Features/CSharp/Portable/Snippets/CSharpLockSnippetProvider.cs +++ b/src/Features/CSharp/Portable/Snippets/CSharpLockSnippetProvider.cs @@ -25,11 +25,11 @@ internal sealed class CSharpLockSnippetProvider() : AbstractLockSnippetProvider< public override string Description => CSharpFeaturesResources.lock_statement; - protected override ValueTask> GetPlaceHolderLocationsListAsync( + protected override async ValueTask> GetPlaceHolderLocationsListAsync( Document document, LockStatementSyntax node, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) { var expression = node.Expression; - return new([new SnippetPlaceholder(expression.ToString(), expression.SpanStart)]); + return [new SnippetPlaceholder(expression.ToString(), expression.SpanStart)]; } protected override int GetTargetCaretPosition(LockStatementSyntax lockStatement, SourceText sourceText) diff --git a/src/Features/CSharp/Portable/Snippets/CSharpUsingSnippetProvider.cs b/src/Features/CSharp/Portable/Snippets/CSharpUsingSnippetProvider.cs index 43f6e9f7a3ee1..1cb0ae592b30c 100644 --- a/src/Features/CSharp/Portable/Snippets/CSharpUsingSnippetProvider.cs +++ b/src/Features/CSharp/Portable/Snippets/CSharpUsingSnippetProvider.cs @@ -25,11 +25,11 @@ internal sealed class CSharpUsingSnippetProvider() : AbstractUsingSnippetProvide public override string Description => CSharpFeaturesResources.using_statement; - protected override ValueTask> GetPlaceHolderLocationsListAsync( + protected override async ValueTask> GetPlaceHolderLocationsListAsync( Document document, UsingStatementSyntax node, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) { var expression = node.Expression!; - return new([new SnippetPlaceholder(expression.ToString(), expression.SpanStart)]); + return [new SnippetPlaceholder(expression.ToString(), expression.SpanStart)]; } protected override int GetTargetCaretPosition(UsingStatementSyntax usingStatement, SourceText sourceText) diff --git a/src/Features/CSharp/Portable/UsePatternMatching/CSharpIsAndCastCheckWithoutNameCodeFixProvider.cs b/src/Features/CSharp/Portable/UsePatternMatching/CSharpIsAndCastCheckWithoutNameCodeFixProvider.cs index 7c224bfc4c712..26c700c5a46a9 100644 --- a/src/Features/CSharp/Portable/UsePatternMatching/CSharpIsAndCastCheckWithoutNameCodeFixProvider.cs +++ b/src/Features/CSharp/Portable/UsePatternMatching/CSharpIsAndCastCheckWithoutNameCodeFixProvider.cs @@ -27,10 +27,9 @@ internal sealed partial class CSharpIsAndCastCheckWithoutNameCodeFixProvider() public override ImmutableArray FixableDiagnosticIds => [IDEDiagnosticIds.InlineIsTypeWithoutNameCheckDiagnosticsId]; - public override Task RegisterCodeFixesAsync(CodeFixContext context) + public override async Task RegisterCodeFixesAsync(CodeFixContext context) { RegisterCodeFix(context, CSharpAnalyzersResources.Use_pattern_matching, nameof(CSharpAnalyzersResources.Use_pattern_matching), CodeActionPriority.Low); - return Task.CompletedTask; } protected override async Task FixAllAsync( diff --git a/src/Features/CSharpTest/Copilot/CSharpImplementNotImplementedExceptionFixProviderTests.cs b/src/Features/CSharpTest/Copilot/CSharpImplementNotImplementedExceptionFixProviderTests.cs index 0d937ea4b9e77..8b3718486997a 100644 --- a/src/Features/CSharpTest/Copilot/CSharpImplementNotImplementedExceptionFixProviderTests.cs +++ b/src/Features/CSharpTest/Copilot/CSharpImplementNotImplementedExceptionFixProviderTests.cs @@ -568,7 +568,7 @@ private sealed class CustomCompositionCSharpTest : VerifyCS.Test private TestWorkspace? _testWorkspace; private Action? _copilotServiceSetupAction; - protected override Task CreateWorkspaceImplAsync() + protected override async Task CreateWorkspaceImplAsync() { _testComposition = FeaturesTestCompositions.Features .AddParts([typeof(TestCopilotOptionsService), typeof(TestCopilotCodeAnalysisService)]); @@ -576,7 +576,7 @@ protected override Task CreateWorkspaceImplAsync() // Trigger the action if it's set _copilotServiceSetupAction?.Invoke(GetCopilotService(_testWorkspace)); - return Task.FromResult(_testWorkspace); + return _testWorkspace; } public CustomCompositionCSharpTest WithMockCopilotService(Action setup) @@ -608,20 +608,20 @@ private sealed class TestCopilotOptionsService : ICopilotOptionsService [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] public TestCopilotOptionsService() { } - public Task IsRefineOptionEnabledAsync() - => Task.FromResult(true); + public async Task IsRefineOptionEnabledAsync() + => true; - public Task IsCodeAnalysisOptionEnabledAsync() - => Task.FromResult(true); + public async Task IsCodeAnalysisOptionEnabledAsync() + => true; - public Task IsOnTheFlyDocsOptionEnabledAsync() - => Task.FromResult(true); + public async Task IsOnTheFlyDocsOptionEnabledAsync() + => true; - public Task IsGenerateDocumentationCommentOptionEnabledAsync() - => Task.FromResult(true); + public async Task IsGenerateDocumentationCommentOptionEnabledAsync() + => true; - public Task IsImplementNotImplementedExceptionEnabledAsync() - => Task.FromResult(true); + public async Task IsImplementNotImplementedExceptionEnabledAsync() + => true; } [ExportLanguageService(typeof(ICopilotCodeAnalysisService), LanguageNames.CSharp), Shared, PartNotDiscoverable] @@ -649,8 +649,8 @@ public Task> GetCachedDocumentDiagnosticsAsync(Docume public Task<(string responseString, bool isQuotaExceeded)> GetOnTheFlyDocsAsync(string symbolSignature, ImmutableArray declarationCode, string language, CancellationToken cancellationToken) => throw new NotImplementedException(); - public Task IsAvailableAsync(CancellationToken cancellationToken) - => Task.FromResult(true); + public async Task IsAvailableAsync(CancellationToken cancellationToken) + => true; public Task IsFileExcludedAsync(string filePath, CancellationToken cancellationToken) => throw new NotImplementedException(); @@ -661,22 +661,22 @@ public Task StartRefinementSessionAsync(Document oldDocument, Document newDocume Task<(Dictionary? responseDictionary, bool isQuotaExceeded)> ICopilotCodeAnalysisService.GetDocumentationCommentAsync(DocumentationCommentProposal proposal, CancellationToken cancellationToken) => throw new NotImplementedException(); - public Task> ImplementNotImplementedExceptionsAsync( + public async Task> ImplementNotImplementedExceptionsAsync( Document document, ImmutableDictionary> methodOrProperties, CancellationToken cancellationToken) { if (SetupFixAll != null) { - return Task.FromResult(SetupFixAll.Invoke(document, methodOrProperties, cancellationToken)); + return SetupFixAll.Invoke(document, methodOrProperties, cancellationToken); } if (PrepareUsingSingleFakeResult != null) { - return Task.FromResult(CreateSingleNodeResult(methodOrProperties, PrepareUsingSingleFakeResult)); + return CreateSingleNodeResult(methodOrProperties, PrepareUsingSingleFakeResult); } - return Task.FromResult(ImmutableDictionary.Empty); + return ImmutableDictionary.Empty; } private static ImmutableDictionary CreateSingleNodeResult( @@ -692,9 +692,9 @@ private static ImmutableDictionary CreateSing return resultsBuilder.ToImmutable(); } - public Task IsImplementNotImplementedExceptionsAvailableAsync(CancellationToken cancellationToken) + public async Task IsImplementNotImplementedExceptionsAvailableAsync(CancellationToken cancellationToken) { - return Task.FromResult(true); + return true; } public Task GetOnTheFlyDocsPromptAsync(OnTheFlyDocsInfo onTheFlyDocsInfo, CancellationToken cancellationToken) diff --git a/src/Features/CSharpTest/ExtractClass/ExtractClassTests.cs b/src/Features/CSharpTest/ExtractClass/ExtractClassTests.cs index 7ca3b8ac3e7c9..97d7a938fcb34 100644 --- a/src/Features/CSharpTest/ExtractClass/ExtractClassTests.cs +++ b/src/Features/CSharpTest/ExtractClass/ExtractClassTests.cs @@ -46,11 +46,11 @@ protected override IEnumerable GetCodeRefactoringProvid return [new CSharpExtractClassCodeRefactoringProvider(service)]; } - protected override Task CreateWorkspaceImplAsync() + protected override async Task CreateWorkspaceImplAsync() { var unusedCompilationOptions = new CSharpCompilationOptions(OutputKind.NetModule); var unusedParseOptions = new CSharpParseOptions(LanguageVersion.CSharp1); - return Task.FromResult(TestWorkspace.Create(WorkspaceKind, LanguageNames.CSharp, unusedCompilationOptions, unusedParseOptions)); + return TestWorkspace.Create(WorkspaceKind, LanguageNames.CSharp, unusedCompilationOptions, unusedParseOptions); } } diff --git a/src/Features/Core/Portable/AddImport/CodeActions/AssemblyReferenceCodeAction.cs b/src/Features/Core/Portable/AddImport/CodeActions/AssemblyReferenceCodeAction.cs index 1403c022fbd82..2676ce6666df3 100644 --- a/src/Features/Core/Portable/AddImport/CodeActions/AssemblyReferenceCodeAction.cs +++ b/src/Features/Core/Portable/AddImport/CodeActions/AssemblyReferenceCodeAction.cs @@ -78,14 +78,14 @@ public override void Apply(Workspace workspace, CancellationToken cancellationTo operation.Apply(workspace, cancellationToken); } - internal override Task TryApplyAsync( + internal override async Task TryApplyAsync( Workspace workspace, Solution originalSolution, IProgress progressTracker, CancellationToken cancellationToken) { var operation = GetApplyChangesOperation(workspace); if (operation is null) - return SpecializedTasks.False; + return false; - return operation.TryApplyAsync(workspace, originalSolution, progressTracker, cancellationToken); + return await operation.TryApplyAsync(workspace, originalSolution, progressTracker, cancellationToken).ConfigureAwait(false); } private ApplyChangesOperation? GetApplyChangesOperation(Workspace workspace) diff --git a/src/Features/Core/Portable/AddImport/CodeActions/InstallWithPackageManagerCodeAction.cs b/src/Features/Core/Portable/AddImport/CodeActions/InstallWithPackageManagerCodeAction.cs index 9d1f04f95a08d..04fa3b484b4c4 100644 --- a/src/Features/Core/Portable/AddImport/CodeActions/InstallWithPackageManagerCodeAction.cs +++ b/src/Features/Core/Portable/AddImport/CodeActions/InstallWithPackageManagerCodeAction.cs @@ -22,11 +22,11 @@ private sealed class InstallWithPackageManagerCodeAction( public override string Title => FeaturesResources.Install_with_package_manager; - protected override Task> ComputeOperationsAsync( + protected override async Task> ComputeOperationsAsync( IProgress progress, CancellationToken cancellationToken) { - return Task.FromResult(ImmutableArray.Create( - new InstallWithPackageManagerCodeActionOperation(_installerService, _packageName))); + return ImmutableArray.Create( + new InstallWithPackageManagerCodeActionOperation(_installerService, _packageName)); } private sealed class InstallWithPackageManagerCodeActionOperation( diff --git a/src/Features/Core/Portable/AddImport/CodeActions/MetadataSymbolReferenceCodeAction.cs b/src/Features/Core/Portable/AddImport/CodeActions/MetadataSymbolReferenceCodeAction.cs index e2e3601ee0b2c..1e77a938c9a3a 100644 --- a/src/Features/Core/Portable/AddImport/CodeActions/MetadataSymbolReferenceCodeAction.cs +++ b/src/Features/Core/Portable/AddImport/CodeActions/MetadataSymbolReferenceCodeAction.cs @@ -24,14 +24,14 @@ public MetadataSymbolReferenceCodeAction(Document originalDocument, AddImportFix Contract.ThrowIfFalse(fixData.Kind == AddImportFixKind.MetadataSymbol); } - protected override Task UpdateProjectAsync(Project project, bool isPreview, CancellationToken cancellationToken) + protected override async Task UpdateProjectAsync(Project project, bool isPreview, CancellationToken cancellationToken) { var projectWithReference = project.Solution.GetRequiredProject(FixData.PortableExecutableReferenceProjectId); var reference = projectWithReference.MetadataReferences .OfType() .First(pe => pe.FilePath == FixData.PortableExecutableReferenceFilePathToAdd); - return Task.FromResult(new ApplyChangesOperation(project.AddMetadataReference(reference).Solution)); + return new ApplyChangesOperation(project.AddMetadataReference(reference).Solution); } } } diff --git a/src/Features/Core/Portable/AddImport/CodeActions/ProjectSymbolReferenceCodeAction.cs b/src/Features/Core/Portable/AddImport/CodeActions/ProjectSymbolReferenceCodeAction.cs index 30318b4a371b2..fff46496e5f09 100644 --- a/src/Features/Core/Portable/AddImport/CodeActions/ProjectSymbolReferenceCodeAction.cs +++ b/src/Features/Core/Portable/AddImport/CodeActions/ProjectSymbolReferenceCodeAction.cs @@ -37,19 +37,19 @@ public ProjectSymbolReferenceCodeAction( private static bool ShouldAddProjectReference(Document originalDocument, AddImportFixData fixData) => fixData.ProjectReferenceToAdd != null && fixData.ProjectReferenceToAdd != originalDocument.Project.Id; - protected override Task UpdateProjectAsync(Project project, bool isPreview, CancellationToken cancellationToken) + protected override async Task UpdateProjectAsync(Project project, bool isPreview, CancellationToken cancellationToken) { if (!ShouldAddProjectReference(this.OriginalDocument, this.FixData)) - return SpecializedTasks.Null(); + return null; var projectWithAddedReference = project.AddProjectReference(new ProjectReference(FixData.ProjectReferenceToAdd)); var applyOperation = new ApplyChangesOperation(projectWithAddedReference.Solution); if (isPreview) { - return Task.FromResult(applyOperation); + return applyOperation; } - return Task.FromResult(new AddProjectReferenceCodeActionOperation(OriginalDocument.Project.Id, FixData.ProjectReferenceToAdd, applyOperation)); + return new AddProjectReferenceCodeActionOperation(OriginalDocument.Project.Id, FixData.ProjectReferenceToAdd, applyOperation); } private sealed class AddProjectReferenceCodeActionOperation(ProjectId referencingProject, ProjectId referencedProject, ApplyChangesOperation applyOperation) : CodeActionOperation @@ -68,13 +68,13 @@ public override void Apply(Workspace workspace, CancellationToken cancellationTo _applyOperation.Apply(workspace, cancellationToken); } - internal override Task TryApplyAsync( + internal override async Task TryApplyAsync( Workspace workspace, Solution originalSolution, IProgress progressTracker, CancellationToken cancellationToken) { if (!CanApply(workspace)) - return SpecializedTasks.False; + return false; - return _applyOperation.TryApplyAsync(workspace, originalSolution, progressTracker, cancellationToken); + return await _applyOperation.TryApplyAsync(workspace, originalSolution, progressTracker, cancellationToken).ConfigureAwait(false); } private bool CanApply(Workspace workspace) diff --git a/src/Features/Core/Portable/AddMissingReference/AddMissingReferenceCodeAction.cs b/src/Features/Core/Portable/AddMissingReference/AddMissingReferenceCodeAction.cs index d3662d9de4712..2f2bbaea89636 100644 --- a/src/Features/Core/Portable/AddMissingReference/AddMissingReferenceCodeAction.cs +++ b/src/Features/Core/Portable/AddMissingReference/AddMissingReferenceCodeAction.cs @@ -70,22 +70,22 @@ public static async Task CreateAsync(Project project, AssemblyIdenti return new AddMissingReferenceCodeAction(project, description, null, missingAssemblyIdentity); } - protected override Task> ComputeOperationsAsync( + protected override async Task> ComputeOperationsAsync( IProgress progress, CancellationToken cancellationToken) { // If we have a project reference to add, then add it if (_projectReferenceToAdd != null) { // note: no need to post process since we are just adding a project reference and not making any code changes. - return Task.FromResult(ImmutableArray.Create( - new ApplyChangesOperation(_project.AddProjectReference(_projectReferenceToAdd).Solution))); + return ImmutableArray.Create( + new ApplyChangesOperation(_project.AddProjectReference(_projectReferenceToAdd).Solution)); } else { // We didn't have any project, so we need to try adding a metadata reference var factoryService = _project.Solution.Services.GetRequiredService(); var operation = factoryService.CreateAddMetadataReferenceOperation(_project.Id, _missingAssemblyIdentity); - return Task.FromResult(ImmutableArray.Create(operation)); + return ImmutableArray.Create(operation); } } } diff --git a/src/Features/Core/Portable/AddPackage/InstallPackageDirectlyCodeAction.cs b/src/Features/Core/Portable/AddPackage/InstallPackageDirectlyCodeAction.cs index 3489f4c596dc1..036aa84ba4bb1 100644 --- a/src/Features/Core/Portable/AddPackage/InstallPackageDirectlyCodeAction.cs +++ b/src/Features/Core/Portable/AddPackage/InstallPackageDirectlyCodeAction.cs @@ -30,6 +30,6 @@ internal sealed class InstallPackageDirectlyCodeAction( ? string.Format(FeaturesResources.Use_local_version_0, versionOpt) : string.Format(FeaturesResources.Install_version_0, versionOpt); - protected override Task> ComputeOperationsAsync(IProgress progress, CancellationToken cancellationToken) - => Task.FromResult(ImmutableArray.Create(_installPackageOperation)); + protected override async Task> ComputeOperationsAsync(IProgress progress, CancellationToken cancellationToken) + => ImmutableArray.Create(_installPackageOperation); } diff --git a/src/Features/Core/Portable/AddPackage/InstallWithPackageManagerCodeAction.cs b/src/Features/Core/Portable/AddPackage/InstallWithPackageManagerCodeAction.cs index 9bdda9c841eea..5309ff40e418b 100644 --- a/src/Features/Core/Portable/AddPackage/InstallWithPackageManagerCodeAction.cs +++ b/src/Features/Core/Portable/AddPackage/InstallWithPackageManagerCodeAction.cs @@ -19,11 +19,11 @@ internal sealed class InstallWithPackageManagerCodeAction( public override string Title => FeaturesResources.Install_with_package_manager; - protected override Task> ComputeOperationsAsync( + protected override async Task> ComputeOperationsAsync( IProgress progress, CancellationToken cancellationToken) { - return Task.FromResult(ImmutableArray.Create( - new InstallWithPackageManagerCodeActionOperation(this))); + return ImmutableArray.Create( + new InstallWithPackageManagerCodeActionOperation(this)); } private sealed class InstallWithPackageManagerCodeActionOperation( diff --git a/src/Features/Core/Portable/BraceCompletion/AbstractBraceCompletionService.cs b/src/Features/Core/Portable/BraceCompletion/AbstractBraceCompletionService.cs index b467249f4a070..32dd9baa90412 100644 --- a/src/Features/Core/Portable/BraceCompletion/AbstractBraceCompletionService.cs +++ b/src/Features/Core/Portable/BraceCompletion/AbstractBraceCompletionService.cs @@ -38,19 +38,19 @@ internal abstract class AbstractBraceCompletionService : IBraceCompletionService public abstract bool AllowOverType(BraceCompletionContext braceCompletionContext, CancellationToken cancellationToken); - public ValueTask HasBraceCompletionAsync(BraceCompletionContext context, Document document, CancellationToken cancellationToken) + public async ValueTask HasBraceCompletionAsync(BraceCompletionContext context, Document document, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (!context.HasCompletionForOpeningBrace(OpeningBrace)) - return ValueTask.FromResult(false); + return false; var openingToken = context.GetOpeningToken(); if (!NeedsSemantics) - return ValueTask.FromResult(IsValidOpenBraceTokenAtPosition(context.Document.Text, openingToken, context.OpeningPoint)); + return IsValidOpenBraceTokenAtPosition(context.Document.Text, openingToken, context.OpeningPoint); // Pass along a document with frozen partial semantics. Brace completion is a highly latency sensitive // operation. We don't want to wait on things like source generators to figure things out. - return IsValidOpenBraceTokenAtPositionAsync(document.WithFrozenPartialSemantics(cancellationToken), openingToken, context.OpeningPoint, cancellationToken); + return await IsValidOpenBraceTokenAtPositionAsync(document.WithFrozenPartialSemantics(cancellationToken), openingToken, context.OpeningPoint, cancellationToken).ConfigureAwait(false); } public BraceCompletionResult GetBraceCompletion(BraceCompletionContext context) diff --git a/src/Features/Core/Portable/ChangeSignature/DelegateInvokeMethodReferenceFinder.cs b/src/Features/Core/Portable/ChangeSignature/DelegateInvokeMethodReferenceFinder.cs index 832571f7667e0..7c89b81cbd770 100644 --- a/src/Features/Core/Portable/ChangeSignature/DelegateInvokeMethodReferenceFinder.cs +++ b/src/Features/Core/Portable/ChangeSignature/DelegateInvokeMethodReferenceFinder.cs @@ -64,7 +64,7 @@ protected override async ValueTask> DetermineCascadedSym return result.ToImmutableAndClear(); } - protected override Task DetermineDocumentsToSearchAsync( + protected override async Task DetermineDocumentsToSearchAsync( IMethodSymbol symbol, HashSet? globalAliases, Project project, @@ -76,8 +76,6 @@ protected override Task DetermineDocumentsToSearchAsync( { foreach (var document in project.Documents) processResult(document, processResultData); - - return Task.CompletedTask; } protected override void FindReferencesInDocument( diff --git a/src/Features/Core/Portable/CodeFixes/CodeFixCollection.cs b/src/Features/Core/Portable/CodeFixes/CodeFixCollection.cs index a5d813b79a1f4..249f4e6c6a875 100644 --- a/src/Features/Core/Portable/CodeFixes/CodeFixCollection.cs +++ b/src/Features/Core/Portable/CodeFixes/CodeFixCollection.cs @@ -2,7 +2,6 @@ // 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; using System.Collections.Immutable; using Microsoft.CodeAnalysis.Text; diff --git a/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureCodeStyle/ConfigureCodeStyleOptionCodeFixProvider.cs b/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureCodeStyle/ConfigureCodeStyleOptionCodeFixProvider.cs index 836235535dff4..f8a3c696bdf63 100644 --- a/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureCodeStyle/ConfigureCodeStyleOptionCodeFixProvider.cs +++ b/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureCodeStyle/ConfigureCodeStyleOptionCodeFixProvider.cs @@ -52,11 +52,11 @@ public bool IsFixableDiagnostic(Diagnostic diagnostic) public FixAllProvider? GetFixAllProvider() => null; - public Task> GetFixesAsync(TextDocument document, TextSpan span, IEnumerable diagnostics, CancellationToken cancellationToken) - => Task.FromResult(GetConfigurations(document.Project, diagnostics)); + public async Task> GetFixesAsync(TextDocument document, TextSpan span, IEnumerable diagnostics, CancellationToken cancellationToken) + => GetConfigurations(document.Project, diagnostics); - public Task> GetFixesAsync(Project project, IEnumerable diagnostics, CancellationToken cancellationToken) - => Task.FromResult(GetConfigurations(project, diagnostics)); + public async Task> GetFixesAsync(Project project, IEnumerable diagnostics, CancellationToken cancellationToken) + => GetConfigurations(project, diagnostics); private static ImmutableArray GetConfigurations(Project project, IEnumerable diagnostics) { diff --git a/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureSeverity/ConfigureSeverityLevelCodeFixProvider.cs b/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureSeverity/ConfigureSeverityLevelCodeFixProvider.cs index 3a3d88501982b..74c7d6c3074c4 100644 --- a/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureSeverity/ConfigureSeverityLevelCodeFixProvider.cs +++ b/src/Features/Core/Portable/CodeFixes/Configuration/ConfigureSeverity/ConfigureSeverityLevelCodeFixProvider.cs @@ -44,11 +44,11 @@ public bool IsFixableDiagnostic(Diagnostic diagnostic) public FixAllProvider? GetFixAllProvider() => null; - public Task> GetFixesAsync(TextDocument document, TextSpan span, IEnumerable diagnostics, CancellationToken cancellationToken) - => Task.FromResult(GetConfigurations(document.Project, diagnostics, cancellationToken)); + public async Task> GetFixesAsync(TextDocument document, TextSpan span, IEnumerable diagnostics, CancellationToken cancellationToken) + => GetConfigurations(document.Project, diagnostics, cancellationToken); - public Task> GetFixesAsync(Project project, IEnumerable diagnostics, CancellationToken cancellationToken) - => Task.FromResult(GetConfigurations(project, diagnostics, cancellationToken)); + public async Task> GetFixesAsync(Project project, IEnumerable diagnostics, CancellationToken cancellationToken) + => GetConfigurations(project, diagnostics, cancellationToken); private static ImmutableArray GetConfigurations(Project project, IEnumerable diagnostics, CancellationToken cancellationToken) { diff --git a/src/Features/Core/Portable/CodeFixes/Service/CodeFixService.FixAllPredefinedDiagnosticProvider.cs b/src/Features/Core/Portable/CodeFixes/Service/CodeFixService.FixAllPredefinedDiagnosticProvider.cs index 90190f331627c..bc6c93c86add6 100644 --- a/src/Features/Core/Portable/CodeFixes/Service/CodeFixService.FixAllPredefinedDiagnosticProvider.cs +++ b/src/Features/Core/Portable/CodeFixes/Service/CodeFixService.FixAllPredefinedDiagnosticProvider.cs @@ -19,13 +19,13 @@ private sealed class FixAllPredefinedDiagnosticProvider : FixAllContext.Diagnost public FixAllPredefinedDiagnosticProvider(ImmutableArray diagnostics) => _diagnostics = diagnostics; - public override Task> GetAllDiagnosticsAsync(Project project, CancellationToken cancellationToken) - => Task.FromResult>(_diagnostics); + public override async Task> GetAllDiagnosticsAsync(Project project, CancellationToken cancellationToken) + => _diagnostics; - public override Task> GetDocumentDiagnosticsAsync(Document document, CancellationToken cancellationToken) - => Task.FromResult>(_diagnostics); + public override async Task> GetDocumentDiagnosticsAsync(Document document, CancellationToken cancellationToken) + => _diagnostics; - public override Task> GetProjectDiagnosticsAsync(Project project, CancellationToken cancellationToken) - => SpecializedTasks.EmptyEnumerable(); + public override async Task> GetProjectDiagnosticsAsync(Project project, CancellationToken cancellationToken) + => []; } } diff --git a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionBatchFixAllProvider.cs b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionBatchFixAllProvider.cs index 1aa81ab578563..d8d0e75811b5c 100644 --- a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionBatchFixAllProvider.cs +++ b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionBatchFixAllProvider.cs @@ -196,12 +196,11 @@ private static Action> GetRegisterCodeFix }; } - protected virtual Task AddProjectFixesAsync( + protected virtual async Task AddProjectFixesAsync( Project project, ImmutableArray diagnostics, ConcurrentBag<(Diagnostic diagnostic, CodeAction action)> fixes, FixAllState fixAllState, CancellationToken cancellationToken) { - return Task.CompletedTask; } public virtual async Task TryGetMergedFixAsync( @@ -216,7 +215,7 @@ protected virtual Task AddProjectFixesAsync( if (newSolution != null && newSolution != solution) { var title = FixAllHelper.GetDefaultFixAllTitle(fixAllState.Scope, title: fixAllState.DiagnosticIds.First(), fixAllState.Document!, fixAllState.Project); - return CodeAction.SolutionChangeAction.Create(title, _ => Task.FromResult(newSolution), title); + return CodeAction.SolutionChangeAction.Create(title, async _ => newSolution, title); } return null; diff --git a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.GlobalSuppressMessageFixAllCodeAction.cs b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.GlobalSuppressMessageFixAllCodeAction.cs index d32c1f1e9e1df..d2b64e7d0c591 100644 --- a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.GlobalSuppressMessageFixAllCodeAction.cs +++ b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.GlobalSuppressMessageFixAllCodeAction.cs @@ -57,10 +57,10 @@ private sealed class GlobalSuppressionSolutionChangeAction( Func, CancellationToken, Task> createChangedSolution, string equivalenceKey) : SolutionChangeAction(title, createChangedSolution, equivalenceKey, CodeActionPriority.Default, CodeActionCleanup.Default) { - protected override Task PostProcessChangesAsync(Document document, CancellationToken cancellationToken) + protected override async Task PostProcessChangesAsync(Document document, CancellationToken cancellationToken) { // PERF: We don't to formatting on the entire global suppressions document, but instead do it for each attribute individual in the fixer. - return Task.FromResult(document); + return document; } } diff --git a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs index ec1584616a016..6ea562e6e40ec 100644 --- a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs +++ b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs @@ -146,7 +146,7 @@ public override async Task TryGetMergedFixAsync( var batchAttributeRemoveFix = CodeAction.Create( attributeRemoveFixes.First().Title, - createChangedSolution: ct => Task.FromResult(currentSolution), + createChangedSolution: async ct => currentSolution, equivalenceKey: fixAllState.CodeActionEquivalenceKey); newBatchOfFixes.Insert(0, (diagnostic: null, batchAttributeRemoveFix)); diff --git a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.cs b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.cs index e5e5b8521de94..a726c631255ea 100644 --- a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.cs +++ b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.cs @@ -138,13 +138,13 @@ private SyntaxToken GetAdjustedTokenForPragmaRestore(SyntaxToken token, SyntaxNo return token; } - public Task> GetFixesAsync( + public async Task> GetFixesAsync( TextDocument textDocument, TextSpan span, IEnumerable diagnostics, CancellationToken cancellationToken) { if (textDocument is not Document document) - return Task.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; - return GetSuppressionsAsync(document, span, diagnostics, skipSuppressMessage: false, skipUnsuppress: false, cancellationToken: cancellationToken); + return await GetSuppressionsAsync(document, span, diagnostics, skipSuppressMessage: false, skipUnsuppress: false, cancellationToken: cancellationToken).ConfigureAwait(false); } internal async Task> GetPragmaSuppressionsAsync(Document document, TextSpan span, IEnumerable diagnostics, CancellationToken cancellationToken) diff --git a/src/Features/Core/Portable/CodeLens/CodeLensReferencesService.cs b/src/Features/Core/Portable/CodeLens/CodeLensReferencesService.cs index 1eea7eaac7c52..1d33c509c2e16 100644 --- a/src/Features/Core/Portable/CodeLens/CodeLensReferencesService.cs +++ b/src/Features/Core/Portable/CodeLens/CodeLensReferencesService.cs @@ -91,11 +91,11 @@ public async ValueTask GetProjectCodeLensVersionAsync(Solution sol { var projectVersion = await GetProjectCodeLensVersionAsync(solution, documentId.ProjectId, cancellationToken).ConfigureAwait(false); return await FindAsync(solution, documentId, syntaxNode, - progress => Task.FromResult(new ReferenceCount( + async progress => new ReferenceCount( progress.SearchCap > 0 ? Math.Min(progress.ReferencesCount, progress.SearchCap) - : progress.ReferencesCount, progress.SearchCapReached, projectVersion.ToString())), - progress => Task.FromResult(new ReferenceCount(progress.SearchCap, IsCapped: true, projectVersion.ToString())), + : progress.ReferencesCount, progress.SearchCapReached, projectVersion.ToString()), + async progress => new ReferenceCount(progress.SearchCap, IsCapped: true, projectVersion.ToString()), maxSearchResults, cancellationToken).ConfigureAwait(false); } diff --git a/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs b/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs index 73607e6b9e236..7b0de443d6fe9 100644 --- a/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs +++ b/src/Features/Core/Portable/CodeRefactorings/MoveType/AbstractMoveTypeService.RenameFileEditor.cs @@ -28,8 +28,7 @@ public override async Task> GetOperationsAsy return [new ApplyChangesOperation(newSolution)]; } - public override Task GetModifiedSolutionAsync() - => Task.FromResult( - SemanticDocument.Project.Solution.WithDocumentName(SemanticDocument.Document.Id, FileName)); + public override async Task GetModifiedSolutionAsync() + => SemanticDocument.Project.Solution.WithDocumentName(SemanticDocument.Document.Id, FileName); } } diff --git a/src/Features/Core/Portable/Completion/CommonCompletionProvider.cs b/src/Features/Core/Portable/Completion/CommonCompletionProvider.cs index be2eabb3e952e..0cd16958e722c 100644 --- a/src/Features/Core/Portable/Completion/CommonCompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/CommonCompletionProvider.cs @@ -117,8 +117,8 @@ public override async Task GetChangeAsync(Document document, C public virtual Task GetTextChangeAsync(Document document, CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) => GetTextChangeAsync(selectedItem, ch, cancellationToken); - protected virtual Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) - => SpecializedTasks.Default(); + protected virtual async Task GetTextChangeAsync(CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + => null; protected static CompletionItem CreateSuggestionModeItem(string? displayText, string? description) { diff --git a/src/Features/Core/Portable/Completion/CompletionProvider.cs b/src/Features/Core/Portable/Completion/CompletionProvider.cs index c16459cb06398..975380a6b9c94 100644 --- a/src/Features/Core/Portable/Completion/CompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/CompletionProvider.cs @@ -60,8 +60,8 @@ internal virtual async Task IsSyntacticTriggerCharacterAsync(Document docu /// /// Gets the description of the specified item. /// - public virtual Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken) - => Task.FromResult(CompletionDescription.Empty); + public virtual async Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken) + => CompletionDescription.Empty; internal virtual Task GetDescriptionAsync(Document document, CompletionItem item, CompletionOptions options, SymbolDescriptionOptions displayOptions, CancellationToken cancellationToken) #pragma warning disable RS0030 // Do not used banned APIs @@ -74,8 +74,8 @@ internal virtual async Task IsSyntacticTriggerCharacterAsync(Document docu /// The current document. /// The item to be committed. /// The optional key character that caused the commit. - public virtual Task GetChangeAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) - => Task.FromResult(CompletionChange.Create(new TextChange(item.Span, item.DisplayText))); + public virtual async Task GetChangeAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) + => CompletionChange.Create(new TextChange(item.Span, item.DisplayText)); /// /// True if the provider produces snippet items. diff --git a/src/Features/Core/Portable/Completion/CompletionService.ProviderManager.cs b/src/Features/Core/Portable/Completion/CompletionService.ProviderManager.cs index 72ec826ec8b1c..d49fd9bbf6a7e 100644 --- a/src/Features/Core/Portable/Completion/CompletionService.ProviderManager.cs +++ b/src/Features/Core/Portable/Completion/CompletionService.ProviderManager.cs @@ -81,7 +81,7 @@ private IReadOnlyList> GetL return _lazyImportedProviders; } - private ValueTask ProcessBatchAsync(ImmutableSegmentedList> referencesList, CancellationToken cancellationToken) + private async ValueTask ProcessBatchAsync(ImmutableSegmentedList> referencesList, CancellationToken cancellationToken) { foreach (var references in referencesList) { @@ -90,8 +90,6 @@ private ValueTask ProcessBatchAsync(ImmutableSegmentedList GetCachedProjectCompletionProvidersOrQueueLoadInBackground(Project? project, CompletionOptions options) diff --git a/src/Features/Core/Portable/Completion/CompletionService.cs b/src/Features/Core/Portable/Completion/CompletionService.cs index c880d896d33f9..6d2195ce377ba 100644 --- a/src/Features/Core/Portable/Completion/CompletionService.cs +++ b/src/Features/Core/Portable/Completion/CompletionService.cs @@ -375,9 +375,9 @@ internal static bool IsAllPunctuation(string filterText) return true; } - internal virtual Task IsSpeculativeTypeParameterContextAsync(Document document, int position, CancellationToken cancellationToken) + internal virtual async ValueTask IsSpeculativeTypeParameterContextAsync(Document document, int position, CancellationToken cancellationToken) { - return SpecializedTasks.False; + return false; } /// diff --git a/src/Features/Core/Portable/Completion/Providers/AbstractKeywordCompletionProvider.cs b/src/Features/Core/Portable/Completion/Providers/AbstractKeywordCompletionProvider.cs index 2c44eb5daa37e..39136c307568d 100644 --- a/src/Features/Core/Portable/Completion/Providers/AbstractKeywordCompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/Providers/AbstractKeywordCompletionProvider.cs @@ -72,6 +72,6 @@ private async Task> RecommendKeywordsAsync( return result.ToImmutableAndClear(); } - public sealed override Task GetTextChangeAsync(Document document, CompletionItem item, char? ch, CancellationToken cancellationToken) - => Task.FromResult((TextChange?)new TextChange(item.Span, item.DisplayText)); + public sealed override async Task GetTextChangeAsync(Document document, CompletionItem item, char? ch, CancellationToken cancellationToken) + => (TextChange?)new TextChange(item.Span, item.DisplayText); } diff --git a/src/Features/Core/Portable/Completion/Providers/AbstractObjectCreationCompletionProvider.cs b/src/Features/Core/Portable/Completion/Providers/AbstractObjectCreationCompletionProvider.cs index 94e1170f2e2f9..9f754edc28a87 100644 --- a/src/Features/Core/Portable/Completion/Providers/AbstractObjectCreationCompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/Providers/AbstractObjectCreationCompletionProvider.cs @@ -44,12 +44,12 @@ protected override CompletionItem CreateItem( supportedPlatforms: supportedPlatformData); } - protected override Task> GetSymbolsAsync( + protected override async Task> GetSymbolsAsync( CompletionContext? completionContext, TSyntaxContext context, int position, CompletionOptions options, CancellationToken cancellationToken) { var newExpression = GetObjectCreationNewExpression(context.SyntaxTree, position, cancellationToken); if (newExpression == null) - return SpecializedTasks.EmptyImmutableArray(); + return []; var typeInferenceService = context.GetRequiredLanguageService(); var type = typeInferenceService.InferType( @@ -62,20 +62,20 @@ protected override Task> GetSymbolsAsync( type = arrayType.ElementType; if (type == null) - return SpecializedTasks.EmptyImmutableArray(); + return []; // Unwrap nullable if (type.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T) type = type.GetTypeArguments().Single(); if (type.SpecialType == SpecialType.System_Void) - return SpecializedTasks.EmptyImmutableArray(); + return []; if (type.ContainsAnonymousType()) - return SpecializedTasks.EmptyImmutableArray(); + return []; if (!type.CanBeReferencedByName) - return SpecializedTasks.EmptyImmutableArray(); + return []; // Normally the user can't say things like "new IList". Except for "IList[] x = new |". // In this case we do want to allow them to preselect certain types in the completion @@ -85,18 +85,18 @@ protected override Task> GetSymbolsAsync( if (type.TypeKind is TypeKind.Interface or TypeKind.Pointer or TypeKind.Dynamic || type.IsAbstract) { - return SpecializedTasks.EmptyImmutableArray(); + return []; } if (type is ITypeParameterSymbol typeParameter && !typeParameter.HasConstructorConstraint) - return SpecializedTasks.EmptyImmutableArray(); + return []; } if (!type.IsEditorBrowsable(options.MemberDisplayOptions.HideAdvancedMembers, context.SemanticModel.Compilation)) - return SpecializedTasks.EmptyImmutableArray(); + return []; // In the case of array creation, we don't offer a preselected/hard-selected item because // the user may want an implicitly-typed array creation - return Task.FromResult(ImmutableArray.Create(new SymbolAndSelectionInfo(Symbol: type, Preselect: !isArray))); + return ImmutableArray.Create(new SymbolAndSelectionInfo(Symbol: type, Preselect: !isArray)); } } diff --git a/src/Features/Core/Portable/Completion/Providers/AbstractPartialTypeCompletionProvider.cs b/src/Features/Core/Portable/Completion/Providers/AbstractPartialTypeCompletionProvider.cs index 01fac320c09b8..54fdc40b7a468 100644 --- a/src/Features/Core/Portable/Completion/Providers/AbstractPartialTypeCompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/Providers/AbstractPartialTypeCompletionProvider.cs @@ -110,9 +110,9 @@ private static bool NotNewDeclaredMember(INamedTypeSymbol symbol, TSyntaxContext internal override Task GetDescriptionWorkerAsync(Document document, CompletionItem item, CompletionOptions options, SymbolDescriptionOptions displayOptions, CancellationToken cancellationToken) => SymbolCompletionItem.GetDescriptionAsync(item, document, displayOptions, cancellationToken); - public override Task GetTextChangeAsync(Document document, CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + public override async Task GetTextChangeAsync(Document document, CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) { var insertionText = SymbolCompletionItem.GetInsertionText(selectedItem); - return Task.FromResult(new TextChange(selectedItem.Span, insertionText)); + return new TextChange(selectedItem.Span, insertionText); } } diff --git a/src/Features/Core/Portable/Completion/Providers/AbstractSymbolCompletionProvider.cs b/src/Features/Core/Portable/Completion/Providers/AbstractSymbolCompletionProvider.cs index 1a11cdd1da824..9fe46ca17d807 100644 --- a/src/Features/Core/Portable/Completion/Providers/AbstractSymbolCompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/Providers/AbstractSymbolCompletionProvider.cs @@ -379,8 +379,8 @@ private async Task> GetItemsAsync( protected virtual bool IsExclusive() => false; - protected virtual Task IsSemanticTriggerCharacterAsync(Document document, int characterPosition, CancellationToken cancellationToken) - => SpecializedTasks.True; + protected virtual async Task IsSemanticTriggerCharacterAsync(Document document, int characterPosition, CancellationToken cancellationToken) + => true; private static Dictionary UnionSymbols( ImmutableArray<(DocumentId documentId, TSyntaxContext syntaxContext, ImmutableArray symbols)> linkedContextSymbolLists) @@ -466,8 +466,8 @@ private static Dictionary> FindSymbolsMissingIn return missingSymbols; } - public sealed override Task GetTextChangeAsync(Document document, CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) - => Task.FromResult(new TextChange(selectedItem.Span, GetInsertionText(selectedItem, ch))); + public sealed override async Task GetTextChangeAsync(Document document, CompletionItem selectedItem, char? ch, CancellationToken cancellationToken) + => new TextChange(selectedItem.Span, GetInsertionText(selectedItem, ch)); private string GetInsertionText(CompletionItem item, char? ch) { diff --git a/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/AbstractImportCompletionProvider.cs b/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/AbstractImportCompletionProvider.cs index d42f558318a47..0168eb4651f89 100644 --- a/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/AbstractImportCompletionProvider.cs +++ b/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/AbstractImportCompletionProvider.cs @@ -25,10 +25,9 @@ internal abstract class AbstractImportCompletionProvider : LSPCompletionProvider protected abstract Task ShouldProvideParenthesisCompletionAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken); protected abstract void LogCommit(); - public Task NotifyCommittingItemAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) + public async Task NotifyCommittingItemAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) { LogCommit(); - return Task.CompletedTask; } internal override bool IsExpandItemProvider => true; diff --git a/src/Features/Core/Portable/ConvertLinq/AbstractConvertLinqQueryToForEachProvider.cs b/src/Features/Core/Portable/ConvertLinq/AbstractConvertLinqQueryToForEachProvider.cs index 385012c4d2d87..deaa61c5bce4f 100644 --- a/src/Features/Core/Portable/ConvertLinq/AbstractConvertLinqQueryToForEachProvider.cs +++ b/src/Features/Core/Portable/ConvertLinq/AbstractConvertLinqQueryToForEachProvider.cs @@ -46,7 +46,7 @@ public override async Task ComputeRefactoringsAsync(CodeRefactoringContext conte context.RegisterRefactoring( CodeAction.Create( Title, - c => Task.FromResult(document.WithSyntaxRoot(documentUpdateInfo.UpdateRoot(root))), + async c => document.WithSyntaxRoot(documentUpdateInfo.UpdateRoot(root)), Title), queryExpression.Span); } diff --git a/src/Features/Core/Portable/ConvertLinq/ConvertForEachToLinqQuery/AbstractConvertForEachToLinqQueryProvider.cs b/src/Features/Core/Portable/ConvertLinq/ConvertForEachToLinqQuery/AbstractConvertForEachToLinqQueryProvider.cs index 994a2a9d97799..b7fbd35741236 100644 --- a/src/Features/Core/Portable/ConvertLinq/ConvertForEachToLinqQuery/AbstractConvertForEachToLinqQueryProvider.cs +++ b/src/Features/Core/Portable/ConvertLinq/ConvertForEachToLinqQuery/AbstractConvertForEachToLinqQueryProvider.cs @@ -142,7 +142,7 @@ public override async Task ComputeRefactoringsAsync(CodeRefactoringContext conte } } - private Task ApplyConversionAsync( + private async Task ApplyConversionAsync( IConverter converter, Document document, bool convertToQuery, @@ -152,7 +152,7 @@ private Task ApplyConversionAsync( converter.Convert(editor, convertToQuery, cancellationToken); var newRoot = editor.GetChangedRoot(); var rootWithLinqUsing = AddLinqUsing(converter, converter.ForEachInfo.SemanticModel, newRoot); - return Task.FromResult(document.WithSyntaxRoot(rootWithLinqUsing)); + return document.WithSyntaxRoot(rootWithLinqUsing); } /// diff --git a/src/Features/Core/Portable/ConvertNumericLiteral/AbstractConvertNumericLiteralCodeRefactoringProvider.cs b/src/Features/Core/Portable/ConvertNumericLiteral/AbstractConvertNumericLiteralCodeRefactoringProvider.cs index 4bcc920a74e59..c2e890257774f 100644 --- a/src/Features/Core/Portable/ConvertNumericLiteral/AbstractConvertNumericLiteralCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/ConvertNumericLiteral/AbstractConvertNumericLiteralCodeRefactoringProvider.cs @@ -119,13 +119,13 @@ static string AddSeparators(string numericText, int interval) return result[0] == '_' ? result[1..] : result; } - static Task ReplaceTokenAsync(Document document, SyntaxNode root, SyntaxToken numericToken, long value, string text, string suffix) + static async Task ReplaceTokenAsync(Document document, SyntaxNode root, SyntaxToken numericToken, long value, string text, string suffix) { var generator = SyntaxGenerator.GetGenerator(document); var updatedToken = generator.NumericLiteralToken(text + suffix, (ulong)value) .WithTriviaFrom(numericToken); var updatedRoot = root.ReplaceToken(numericToken, updatedToken); - return Task.FromResult(document.WithSyntaxRoot(updatedRoot)); + return document.WithSyntaxRoot(updatedRoot); } (string prefix, string number, string suffix) GetNumericLiteralParts(string numericText) diff --git a/src/Features/Core/Portable/ConvertToInterpolatedString/ConvertRegularStringToInterpolatedStringRefactoringProvider.cs b/src/Features/Core/Portable/ConvertToInterpolatedString/ConvertRegularStringToInterpolatedStringRefactoringProvider.cs index db0e91296f327..1244fadf004d5 100644 --- a/src/Features/Core/Portable/ConvertToInterpolatedString/ConvertRegularStringToInterpolatedStringRefactoringProvider.cs +++ b/src/Features/Core/Portable/ConvertToInterpolatedString/ConvertRegularStringToInterpolatedStringRefactoringProvider.cs @@ -103,13 +103,13 @@ private static SyntaxNode CreateInterpolatedString(Document document, SyntaxNode generator.CreateInterpolatedStringEndToken()).WithTriviaFrom(literalExpression); } - private static Task UpdateDocumentAsync(Document document, SyntaxNode root, SyntaxToken token) + private static async Task UpdateDocumentAsync(Document document, SyntaxNode root, SyntaxToken token) { var syntaxFacts = document.GetRequiredLanguageService(); var literalExpression = token.GetRequiredParent(); - return Task.FromResult(document.WithSyntaxRoot( + return document.WithSyntaxRoot( root.ReplaceNode( literalExpression, - CreateInterpolatedString(document, literalExpression, syntaxFacts.IsVerbatimStringLiteral(token))))); + CreateInterpolatedString(document, literalExpression, syntaxFacts.IsVerbatimStringLiteral(token)))); } } diff --git a/src/Features/Core/Portable/Debugging/DebugInformationReaderProvider.cs b/src/Features/Core/Portable/Debugging/DebugInformationReaderProvider.cs index 57c6616b4b9e0..52b94e08b9c56 100644 --- a/src/Features/Core/Portable/Debugging/DebugInformationReaderProvider.cs +++ b/src/Features/Core/Portable/Debugging/DebugInformationReaderProvider.cs @@ -46,7 +46,7 @@ private sealed class Portable(MetadataReaderProvider pdbReaderProvider) : DebugI public override EditAndContinueMethodDebugInfoReader CreateEditAndContinueMethodDebugInfoReader() => EditAndContinueMethodDebugInfoReader.Create(_pdbReaderProvider.GetMetadataReader()); - public override ValueTask CopyContentToAsync(Stream stream, CancellationToken cancellationToken) + public override async ValueTask CopyContentToAsync(Stream stream, CancellationToken cancellationToken) { var reader = _pdbReaderProvider.GetMetadataReader(); unsafe @@ -54,8 +54,6 @@ public override ValueTask CopyContentToAsync(Stream stream, CancellationToken ca using var metadataStream = new UnmanagedMemoryStream(reader.MetadataPointer, reader.MetadataLength); metadataStream.CopyTo(stream); } - - return ValueTask.CompletedTask; } public override void Dispose() diff --git a/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs b/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs index 0c3ed361576ef..44ab3a135cd52 100644 --- a/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs +++ b/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs @@ -197,10 +197,10 @@ private async Task> FilterAndCreateSpansAsync documentsToSearch, cancellationToken).ConfigureAwait(false); } - protected virtual Task> GetAdditionalReferencesAsync( + protected virtual async ValueTask> GetAdditionalReferencesAsync( Document document, ISymbol symbol, CancellationToken cancellationToken) { - return SpecializedTasks.EmptyImmutableArray(); + return []; } private static async Task> CreateSpansAsync( diff --git a/src/Features/Core/Portable/EditAndContinue/EditAndContinueService.cs b/src/Features/Core/Portable/EditAndContinue/EditAndContinueService.cs index f87762dd30276..5ba173cc9947b 100644 --- a/src/Features/Core/Portable/EditAndContinue/EditAndContinueService.cs +++ b/src/Features/Core/Portable/EditAndContinue/EditAndContinueService.cs @@ -207,7 +207,7 @@ public ValueTask> GetDocumentDiagnosticsAsync(Documen cancellationToken); } - public ValueTask EmitSolutionUpdateAsync( + public async ValueTask EmitSolutionUpdateAsync( DebuggingSessionId sessionId, Solution solution, ImmutableDictionary runningProjects, @@ -217,10 +217,10 @@ public ValueTask EmitSolutionUpdateAsync( var debuggingSession = TryGetDebuggingSession(sessionId); if (debuggingSession == null) { - return ValueTask.FromResult(EmitSolutionUpdateResults.Empty); + return EmitSolutionUpdateResults.Empty; } - return debuggingSession.EmitSolutionUpdateAsync(solution, runningProjects, activeStatementSpanProvider, cancellationToken); + return await debuggingSession.EmitSolutionUpdateAsync(solution, runningProjects, activeStatementSpanProvider, cancellationToken).ConfigureAwait(false); } public void CommitSolutionUpdate(DebuggingSessionId sessionId) @@ -239,7 +239,7 @@ public void DiscardSolutionUpdate(DebuggingSessionId sessionId) debuggingSession.DiscardSolutionUpdate(); } - public ValueTask>> GetBaseActiveStatementSpansAsync(DebuggingSessionId sessionId, Solution solution, ImmutableArray documentIds, CancellationToken cancellationToken) + public async ValueTask>> GetBaseActiveStatementSpansAsync(DebuggingSessionId sessionId, Solution solution, ImmutableArray documentIds, CancellationToken cancellationToken) { var debuggingSession = TryGetDebuggingSession(sessionId); if (debuggingSession == null) @@ -247,18 +247,18 @@ public ValueTask>> GetBaseAct return default; } - return debuggingSession.GetBaseActiveStatementSpansAsync(solution, documentIds, cancellationToken); + return await debuggingSession.GetBaseActiveStatementSpansAsync(solution, documentIds, cancellationToken).ConfigureAwait(false); } - public ValueTask> GetAdjustedActiveStatementSpansAsync(DebuggingSessionId sessionId, TextDocument mappedDocument, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) + public async ValueTask> GetAdjustedActiveStatementSpansAsync(DebuggingSessionId sessionId, TextDocument mappedDocument, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) { var debuggingSession = TryGetDebuggingSession(sessionId); if (debuggingSession == null) { - return ValueTask.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; } - return debuggingSession.GetAdjustedActiveStatementSpansAsync(mappedDocument, activeStatementSpanProvider, cancellationToken); + return await debuggingSession.GetAdjustedActiveStatementSpansAsync(mappedDocument, activeStatementSpanProvider, cancellationToken).ConfigureAwait(false); } internal TestAccessor GetTestAccessor() diff --git a/src/Features/Core/Portable/EditAndContinue/IPdbMatchingSourceTextProvider.cs b/src/Features/Core/Portable/EditAndContinue/IPdbMatchingSourceTextProvider.cs index 35f21c48e4adf..d65ff0e616248 100644 --- a/src/Features/Core/Portable/EditAndContinue/IPdbMatchingSourceTextProvider.cs +++ b/src/Features/Core/Portable/EditAndContinue/IPdbMatchingSourceTextProvider.cs @@ -24,6 +24,6 @@ private NullPdbMatchingSourceTextProvider() { } - public ValueTask TryGetMatchingSourceTextAsync(string filePath, ImmutableArray requiredChecksum, SourceHashAlgorithm checksumAlgorithm, CancellationToken cancellationToken) - => ValueTask.FromResult(null); + public async ValueTask TryGetMatchingSourceTextAsync(string filePath, ImmutableArray requiredChecksum, SourceHashAlgorithm checksumAlgorithm, CancellationToken cancellationToken) + => null; } diff --git a/src/Features/Core/Portable/EmbeddedLanguages/DateAndTime/DateAndTimeEmbeddedCompletionProvider.cs b/src/Features/Core/Portable/EmbeddedLanguages/DateAndTime/DateAndTimeEmbeddedCompletionProvider.cs index 9f89c0e96515a..6e182ad2bd3ec 100644 --- a/src/Features/Core/Portable/EmbeddedLanguages/DateAndTime/DateAndTimeEmbeddedCompletionProvider.cs +++ b/src/Features/Core/Portable/EmbeddedLanguages/DateAndTime/DateAndTimeEmbeddedCompletionProvider.cs @@ -212,7 +212,7 @@ private static void ProvideCustomFormats(EmbeddedCompletionContext context) context.AddCustom("/", FeaturesResources.date_separator, FeaturesResources.date_separator_description); } - public override Task GetChangeAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) + public override async Task GetChangeAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) { // These values have always been added by us. var startString = item.GetProperty(StartKey); @@ -223,16 +223,16 @@ public override Task GetChangeAsync(Document document, Complet Contract.ThrowIfNull(lengthString); Contract.ThrowIfNull(newText); - return Task.FromResult(CompletionChange.Create( - new TextChange(new TextSpan(int.Parse(startString), int.Parse(lengthString)), newText))); + return CompletionChange.Create( + new TextChange(new TextSpan(int.Parse(startString), int.Parse(lengthString)), newText)); } - public override Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken) + public override async Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken) { if (!item.TryGetProperty(DescriptionKey, out var description)) - return SpecializedTasks.Null(); + return null; - return Task.FromResult((CompletionDescription?)CompletionDescription.Create( - [new TaggedText(TextTags.Text, description)])); + return (CompletionDescription?)CompletionDescription.Create( + [new TaggedText(TextTags.Text, description)]); } } diff --git a/src/Features/Core/Portable/EmbeddedLanguages/Json/LanguageServices/AbstractJsonDetectionCodeFixProvider.cs b/src/Features/Core/Portable/EmbeddedLanguages/Json/LanguageServices/AbstractJsonDetectionCodeFixProvider.cs index a0416c4bb3e3e..b9ae7ce4dc6d9 100644 --- a/src/Features/Core/Portable/EmbeddedLanguages/Json/LanguageServices/AbstractJsonDetectionCodeFixProvider.cs +++ b/src/Features/Core/Portable/EmbeddedLanguages/Json/LanguageServices/AbstractJsonDetectionCodeFixProvider.cs @@ -32,10 +32,9 @@ protected AbstractJsonDetectionCodeFixProvider( public override ImmutableArray FixableDiagnosticIds => [AbstractJsonDetectionAnalyzer.DiagnosticId]; - public override Task RegisterCodeFixesAsync(CodeFixContext context) + public override async Task RegisterCodeFixesAsync(CodeFixContext context) { RegisterCodeFix(context, FeaturesResources.Enable_all_JSON_editor_features, nameof(FeaturesResources.Enable_all_JSON_editor_features)); - return Task.CompletedTask; } public void Fix(SyntaxEditor editor, Diagnostic diagnostic, CancellationToken cancellationToken) @@ -50,13 +49,11 @@ public void Fix(SyntaxEditor editor, Diagnostic diagnostic, CancellationToken ca this.AddComment(editor, stringLiteral, commentContents); } - protected override Task FixAllAsync( + protected override async Task FixAllAsync( Document document, ImmutableArray diagnostics, SyntaxEditor editor, CancellationToken cancellationToken) { foreach (var diagnostic in diagnostics) Fix(editor, diagnostic, cancellationToken); - - return Task.CompletedTask; } } diff --git a/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/LanguageServices/RegexEmbeddedCompletionProvider.cs b/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/LanguageServices/RegexEmbeddedCompletionProvider.cs index 262367f29eecd..e5d37962ef1bc 100644 --- a/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/LanguageServices/RegexEmbeddedCompletionProvider.cs +++ b/src/Features/Core/Portable/EmbeddedLanguages/RegularExpressions/LanguageServices/RegexEmbeddedCompletionProvider.cs @@ -442,7 +442,7 @@ bool IsInCharacterClassWorker(RegexNode parent, bool inCharacterClass) } } - public override Task GetChangeAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) + public override async Task GetChangeAsync(Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken) { // These values have always been added by us. var startString = item.GetProperty(StartKey); @@ -452,19 +452,19 @@ public override Task GetChangeAsync(Document document, Complet // This value is optionally added in some cases and may not always be there. item.TryGetProperty(NewPositionKey, out var newPositionString); - return Task.FromResult(CompletionChange.Create( + return CompletionChange.Create( new TextChange(new TextSpan(int.Parse(startString), int.Parse(lengthString)), newText), - newPositionString == null ? null : int.Parse(newPositionString))); + newPositionString == null ? null : int.Parse(newPositionString)); } - public override Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken) + public override async Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken) { if (!item.TryGetProperty(DescriptionKey, out var description)) { - return SpecializedTasks.Null(); + return null; } - return Task.FromResult(CompletionDescription.Create( - [new TaggedText(TextTags.Text, description)])); + return CompletionDescription.Create( + [new TaggedText(TextTags.Text, description)]); } } diff --git a/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs b/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs index bbbbdb6ce1450..916692a3d8c54 100644 --- a/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs +++ b/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs @@ -70,7 +70,7 @@ private void ClearCachedHandlers_WhileUnderLock() _cachedHandlers_useOnlyUnderLock.document.Clear(); } - private ValueTask RegisterExtensionInCurrentProcessAsync(string assemblyFilePath) + private async ValueTask RegisterExtensionInCurrentProcessAsync(string assemblyFilePath) { // Note: This method executes no extension code. And, as such, does not try to catch exceptions to // translate them accordingly to a failure that we send back to the client as part of the response. @@ -89,11 +89,11 @@ private ValueTask RegisterExtensionInCurrentProcessAsync(string assemblyFilePath assemblyFolderPath => new ExtensionFolder(this, assemblyFolderPath)); extensionFolder.RegisterAssembly(assemblyFilePath); - return default; + return; } } - private ValueTask UnregisterExtensionInCurrentProcessAsync(string assemblyFilePath) + private async ValueTask UnregisterExtensionInCurrentProcessAsync(string assemblyFilePath) { // Note: This method executes no extension code. And, as such, does not try to catch exceptions to // translate them accordingly to a failure that we send back to the client as part of the response. @@ -104,7 +104,7 @@ private ValueTask UnregisterExtensionInCurrentProcessAsync(string assemblyFilePa // to unload all ALCs needed to load it and the extensions within. Unloading will happen once the // runtime/gc determine the ALC is finally collectible. folderToUnload?.Unload(); - return default; + return; ExtensionFolder? Unregister() { @@ -144,7 +144,7 @@ private ValueTask UnregisterExtensionInCurrentProcessAsync(string assemblyFilePa } } - private ValueTask ResetInCurrentProcessAsync() + private async ValueTask ResetInCurrentProcessAsync() { // Note: This method executes no extension code. And, as such, does not try to catch exceptions to // translate them accordingly to a failure that we send back to the client as part of the response. @@ -161,8 +161,6 @@ private ValueTask ResetInCurrentProcessAsync() foreach (var (_, folderToUnload) in oldFolderPathToExtensionFolder) folderToUnload.Unload(); - - return default; } private async ValueTask GetExtensionMessageNamesInCurrentProcessAsync( diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/NewUnitTestingIncrementalAnalyzer.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/NewUnitTestingIncrementalAnalyzer.cs index 98ff20b113e32..50a7d6aceee73 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/NewUnitTestingIncrementalAnalyzer.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/NewUnitTestingIncrementalAnalyzer.cs @@ -36,10 +36,9 @@ public Task AnalyzeProjectAsync( cancellationToken); } - public Task RemoveDocumentAsync(DocumentId documentId, CancellationToken cancellationToken) + public async Task RemoveDocumentAsync(DocumentId documentId, CancellationToken cancellationToken) { _implementation.RemoveDocument(documentId); - return Task.CompletedTask; } } } diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/UnitTestingHotReloadService.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/UnitTestingHotReloadService.cs index 15c0db217f5c1..ec482cd1e5459 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/UnitTestingHotReloadService.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/API/UnitTestingHotReloadService.cs @@ -19,14 +19,14 @@ private sealed class DebuggerService(ImmutableArray capabilities) : IMan { private readonly ImmutableArray _capabilities = capabilities; - public ValueTask> GetActiveStatementsAsync(CancellationToken cancellationToken) - => ValueTask.FromResult(ImmutableArray.Empty); + public async ValueTask> GetActiveStatementsAsync(CancellationToken cancellationToken) + => ImmutableArray.Empty; - public ValueTask GetAvailabilityAsync(Guid module, CancellationToken cancellationToken) - => ValueTask.FromResult(new ManagedHotReloadAvailability(ManagedHotReloadAvailabilityStatus.Available)); + public async ValueTask GetAvailabilityAsync(Guid module, CancellationToken cancellationToken) + => new ManagedHotReloadAvailability(ManagedHotReloadAvailabilityStatus.Available); - public ValueTask> GetCapabilitiesAsync(CancellationToken cancellationToken) - => ValueTask.FromResult(_capabilities); + public async ValueTask> GetCapabilitiesAsync(CancellationToken cancellationToken) + => _capabilities; public ValueTask PrepareModuleForUpdateAsync(Guid module, CancellationToken cancellationToken) => ValueTask.CompletedTask; @@ -49,7 +49,7 @@ public readonly struct Update( } private static readonly ActiveStatementSpanProvider s_solutionActiveStatementSpanProvider = - (_, _, _) => ValueTask.FromResult(ImmutableArray.Empty); + async (_, _, _) => ImmutableArray.Empty; private readonly IEditAndContinueService _encService = services.GetRequiredService().Service; private DebuggingSessionId _sessionId; diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/LegacySolutionEvents/UnitTestingLegacySolutionEventsListener.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/LegacySolutionEvents/UnitTestingLegacySolutionEventsListener.cs index 27045155dbabf..c55f42fc2a8ba 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/LegacySolutionEvents/UnitTestingLegacySolutionEventsListener.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/LegacySolutionEvents/UnitTestingLegacySolutionEventsListener.cs @@ -45,10 +45,9 @@ public bool ShouldReportChanges(SolutionServices services) return service.HasRegisteredAnalyzerProviders; } - public ValueTask OnWorkspaceChangedAsync(WorkspaceChangeEventArgs args, CancellationToken cancellationToken) + public async ValueTask OnWorkspaceChangedAsync(WorkspaceChangeEventArgs args, CancellationToken cancellationToken) { var coordinator = GetCoordinator(args.NewSolution); coordinator?.OnWorkspaceChanged(args); - return ValueTask.CompletedTask; } } diff --git a/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs index 7f767cb6c8737..e021b9b6f8bf4 100644 --- a/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs +++ b/src/Features/Core/Portable/ExternalAccess/UnitTesting/Notification/AbstractGlobalOperationNotificationService.cs @@ -45,15 +45,13 @@ protected AbstractGlobalOperationNotificationService( } } - private ValueTask ProcessEventsAsync(ImmutableSegmentedList list, CancellationToken cancellationToken) + private async ValueTask ProcessEventsAsync(ImmutableSegmentedList list, CancellationToken cancellationToken) { foreach (var value in list) { var eventHandler = value ? Started : Stopped; eventHandler?.Invoke(this, EventArgs.Empty); } - - return ValueTask.CompletedTask; } public IDisposable Start(string operation) diff --git a/src/Features/Core/Portable/FindUsages/DefaultExternalDefinitionItemProvider.cs b/src/Features/Core/Portable/FindUsages/DefaultExternalDefinitionItemProvider.cs index dfa94995ac4e3..ac0a89f5d327a 100644 --- a/src/Features/Core/Portable/FindUsages/DefaultExternalDefinitionItemProvider.cs +++ b/src/Features/Core/Portable/FindUsages/DefaultExternalDefinitionItemProvider.cs @@ -20,6 +20,6 @@ internal sealed class DefaultExternalDefinitionItemProvider() : IExternalDefinit /// Provides an extension point that allows for other workspace layers to add additional /// results to the results found by the FindReferences engine. /// - public Task GetThirdPartyDefinitionItemAsync(Solution solution, DefinitionItem definitionItem, CancellationToken cancellationToken) - => SpecializedTasks.Null(); + public async ValueTask GetThirdPartyDefinitionItemAsync(Solution solution, DefinitionItem definitionItem, CancellationToken cancellationToken) + => null; } diff --git a/src/Features/Core/Portable/FindUsages/IExternalDefinitionItemProvider.cs b/src/Features/Core/Portable/FindUsages/IExternalDefinitionItemProvider.cs index bfab728b62a21..932f1c3ca41a1 100644 --- a/src/Features/Core/Portable/FindUsages/IExternalDefinitionItemProvider.cs +++ b/src/Features/Core/Portable/FindUsages/IExternalDefinitionItemProvider.cs @@ -10,6 +10,6 @@ namespace Microsoft.CodeAnalysis.FindUsages; internal interface IExternalDefinitionItemProvider : IWorkspaceService { - Task GetThirdPartyDefinitionItemAsync( + ValueTask GetThirdPartyDefinitionItemAsync( Solution solution, DefinitionItem definitionItem, CancellationToken cancellationToken); } diff --git a/src/Features/Core/Portable/InitializeParameter/AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs b/src/Features/Core/Portable/InitializeParameter/AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs index 947ae6b37ea81..7eb8ba507080c 100644 --- a/src/Features/Core/Portable/InitializeParameter/AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs +++ b/src/Features/Core/Portable/InitializeParameter/AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs @@ -46,12 +46,12 @@ internal abstract partial class AbstractInitializeMemberFromParameterCodeRefacto protected abstract Accessibility DetermineDefaultPropertyAccessibility(); protected abstract SyntaxNode RemoveThrowNotImplemented(SyntaxNode propertySyntax); - protected sealed override Task> GetRefactoringsForAllParametersAsync( + protected sealed override async Task> GetRefactoringsForAllParametersAsync( Document document, SyntaxNode functionDeclaration, IMethodSymbol method, IBlockOperation? blockStatementOpt, ImmutableArray listOfParameterNodes, TextSpan parameterSpan, CancellationToken cancellationToken) { - return SpecializedTasks.EmptyImmutableArray(); + return []; } protected sealed override async Task> GetRefactoringsForSingleParameterAsync( diff --git a/src/Features/Core/Portable/LanguageServices/SymbolDisplayService/AbstractSymbolDisplayService.cs b/src/Features/Core/Portable/LanguageServices/SymbolDisplayService/AbstractSymbolDisplayService.cs index 04c51af3abbf4..5e077232d7b6c 100644 --- a/src/Features/Core/Portable/LanguageServices/SymbolDisplayService/AbstractSymbolDisplayService.cs +++ b/src/Features/Core/Portable/LanguageServices/SymbolDisplayService/AbstractSymbolDisplayService.cs @@ -18,13 +18,13 @@ internal abstract partial class AbstractSymbolDisplayService(LanguageServices se protected abstract AbstractSymbolDescriptionBuilder CreateDescriptionBuilder(SemanticModel semanticModel, int position, SymbolDescriptionOptions options, CancellationToken cancellationToken); - public Task> ToDescriptionPartsAsync(SemanticModel semanticModel, int position, ImmutableArray symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups, CancellationToken cancellationToken) + public async Task> ToDescriptionPartsAsync(SemanticModel semanticModel, int position, ImmutableArray symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups, CancellationToken cancellationToken) { if (symbols.Length == 0) - return SpecializedTasks.EmptyImmutableArray(); + return []; var builder = CreateDescriptionBuilder(semanticModel, position, options, cancellationToken); - return builder.BuildDescriptionAsync(symbols, groups); + return await builder.BuildDescriptionAsync(symbols, groups).ConfigureAwait(false); } public async Task>> ToDescriptionGroupsAsync( diff --git a/src/Features/Core/Portable/MoveToNamespace/AbstractMoveToNamespaceService.cs b/src/Features/Core/Portable/MoveToNamespace/AbstractMoveToNamespaceService.cs index fdffff0191d32..31a28e8d7070a 100644 --- a/src/Features/Core/Portable/MoveToNamespace/AbstractMoveToNamespaceService.cs +++ b/src/Features/Core/Portable/MoveToNamespace/AbstractMoveToNamespaceService.cs @@ -167,18 +167,18 @@ private static int GetNamespaceInSpineCount(SyntaxNode node) private static bool ContainsMultipleTypesInSpine(SyntaxNode node) => node.AncestorsAndSelf().OfType().Count() > 1; - public Task MoveToNamespaceAsync( + public async Task MoveToNamespaceAsync( MoveToNamespaceAnalysisResult analysisResult, string targetNamespace, CancellationToken cancellationToken) { if (!analysisResult.CanPerform) - return Task.FromResult(MoveToNamespaceResult.Failed); + return MoveToNamespaceResult.Failed; return analysisResult.Container switch { - MoveToNamespaceAnalysisResult.ContainerType.Namespace => MoveItemsInNamespaceAsync(analysisResult.Document, analysisResult.SyntaxNode, targetNamespace, cancellationToken), - MoveToNamespaceAnalysisResult.ContainerType.NamedType => MoveTypeToNamespaceAsync(analysisResult.Document, analysisResult.SyntaxNode, targetNamespace, cancellationToken), + MoveToNamespaceAnalysisResult.ContainerType.Namespace => await MoveItemsInNamespaceAsync(analysisResult.Document, analysisResult.SyntaxNode, targetNamespace, cancellationToken).ConfigureAwait(false), + MoveToNamespaceAnalysisResult.ContainerType.NamedType => await MoveTypeToNamespaceAsync(analysisResult.Document, analysisResult.SyntaxNode, targetNamespace, cancellationToken).ConfigureAwait(false), _ => throw new InvalidOperationException(), }; } diff --git a/src/Features/Core/Portable/NavigateTo/AbstractNavigateToSearchService.CachedDocumentSearch.cs b/src/Features/Core/Portable/NavigateTo/AbstractNavigateToSearchService.CachedDocumentSearch.cs index d5b37c9fa304b..ec8df45129b0d 100644 --- a/src/Features/Core/Portable/NavigateTo/AbstractNavigateToSearchService.CachedDocumentSearch.cs +++ b/src/Features/Core/Portable/NavigateTo/AbstractNavigateToSearchService.CachedDocumentSearch.cs @@ -14,7 +14,6 @@ using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.PatternMatching; using Microsoft.CodeAnalysis.Remote; -using Microsoft.CodeAnalysis.Shared.Utilities; using Microsoft.CodeAnalysis.Storage; using Microsoft.CodeAnalysis.Threading; using Roslyn.Utilities; @@ -157,18 +156,18 @@ await Parallel.ForEachAsync( } } - private static Task GetIndexAsync( + private static async ValueTask GetIndexAsync( IChecksummedPersistentStorageService storageService, DocumentKey documentKey, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) - return SpecializedTasks.Null(); + return null; // Retrieve the string table we use to dedupe strings. If we can't get it, that means the solution has // fully loaded and we've switched over to normal navto lookup. if (!ShouldSearchCachedDocuments(out var cachedIndexMap, out var stringTable)) - return SpecializedTasks.Null(); + return null; // Add the async lazy to compute the index for this document. Or, return the existing cached one if already // present. This ensures that subsequent searches that are run while the solution is still loading are fast @@ -181,6 +180,6 @@ await Parallel.ForEachAsync( static t => AsyncLazy.Create(static (t, c) => TopLevelSyntaxTreeIndex.LoadAsync(t.service, t.documentKey, checksum: null, t.stringTable, c), arg: t)); - return asyncLazy.GetValueAsync(cancellationToken); + return await asyncLazy.GetValueAsync(cancellationToken).ConfigureAwait(false); } } diff --git a/src/Features/Core/Portable/NavigateTo/NavigateToSearcher.cs b/src/Features/Core/Portable/NavigateTo/NavigateToSearcher.cs index 4db3bc8000888..d27eedd9e5ced 100644 --- a/src/Features/Core/Portable/NavigateTo/NavigateToSearcher.cs +++ b/src/Features/Core/Portable/NavigateTo/NavigateToSearcher.cs @@ -14,7 +14,6 @@ using Microsoft.CodeAnalysis.Internal.Log; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Remote; -using Microsoft.CodeAnalysis.Shared.Collections; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.TestHooks; using Microsoft.CodeAnalysis.Shared.Utilities; @@ -196,22 +195,22 @@ await service.SearchDocumentAsync( cancellationToken).ConfigureAwait(false); } - private Task SearchCurrentProjectAsync( + private async Task SearchCurrentProjectAsync( NavigateToDocumentSupport documentSupport, CancellationToken cancellationToken) { if (_activeDocument == null) - return Task.CompletedTask; + return; var activeProject = _activeDocument.Project; - return SearchSpecificProjectsAsync( + await SearchSpecificProjectsAsync( // Because we're only searching the current project, it's fine to bring that project fully up to date before // searching it. We only do the work to search cached files when doing the initial load of something huge // (the full solution). isFullyLoaded: true, documentSupport, [[activeProject]], - cancellationToken); + cancellationToken).ConfigureAwait(false); } private INavigateToSearchService GetNavigateToSearchService(Project project) diff --git a/src/Features/Core/Portable/Navigation/DefaultSymbolNavigationService.cs b/src/Features/Core/Portable/Navigation/DefaultSymbolNavigationService.cs index d119541fd91d4..b6fb06cecd542 100644 --- a/src/Features/Core/Portable/Navigation/DefaultSymbolNavigationService.cs +++ b/src/Features/Core/Portable/Navigation/DefaultSymbolNavigationService.cs @@ -12,12 +12,12 @@ namespace Microsoft.CodeAnalysis.Navigation; internal sealed class DefaultSymbolNavigationService : ISymbolNavigationService { - public Task GetNavigableLocationAsync(ISymbol symbol, Project project, CancellationToken cancellationToken) - => SpecializedTasks.Null(); + public async Task GetNavigableLocationAsync(ISymbol symbol, Project project, CancellationToken cancellationToken) + => null; - public Task TrySymbolNavigationNotifyAsync(ISymbol symbol, Project project, CancellationToken cancellationToken) - => SpecializedTasks.False; + public async Task TrySymbolNavigationNotifyAsync(ISymbol symbol, Project project, CancellationToken cancellationToken) + => false; - public Task<(string filePath, LinePosition linePosition)?> GetExternalNavigationSymbolLocationAsync(DefinitionItem definitionItem, CancellationToken cancellationToken) - => Task.FromResult<(string filePath, LinePosition linePosition)?>(null); + public async Task<(string filePath, LinePosition linePosition)?> GetExternalNavigationSymbolLocationAsync(DefinitionItem definitionItem, CancellationToken cancellationToken) + => null; } diff --git a/src/Features/Core/Portable/Navigation/IDocumentNavigationService.cs b/src/Features/Core/Portable/Navigation/IDocumentNavigationService.cs index 006506a55e49c..503e1fc3153a9 100644 --- a/src/Features/Core/Portable/Navigation/IDocumentNavigationService.cs +++ b/src/Features/Core/Portable/Navigation/IDocumentNavigationService.cs @@ -30,14 +30,14 @@ internal interface IDocumentNavigationService : IWorkspaceService internal abstract class AbstractDocumentNavigationService : IDocumentNavigationService { - public virtual Task CanNavigateToSpanAsync(Workspace workspace, DocumentId documentId, TextSpan textSpan, bool allowInvalidSpan, CancellationToken cancellationToken) - => SpecializedTasks.False; + public virtual async Task CanNavigateToSpanAsync(Workspace workspace, DocumentId documentId, TextSpan textSpan, bool allowInvalidSpan, CancellationToken cancellationToken) + => false; public virtual Task CanNavigateToPositionAsync(Workspace workspace, DocumentId documentId, int position, int virtualSpace, bool allowInvalidPosition, CancellationToken cancellationToken) => CanNavigateToSpanAsync(workspace, documentId, new TextSpan(position, 0), allowInvalidSpan: allowInvalidPosition, cancellationToken); - public virtual Task GetLocationForSpanAsync(Workspace workspace, DocumentId documentId, TextSpan textSpan, bool allowInvalidSpan, CancellationToken cancellationToken) - => SpecializedTasks.Null(); + public virtual async Task GetLocationForSpanAsync(Workspace workspace, DocumentId documentId, TextSpan textSpan, bool allowInvalidSpan, CancellationToken cancellationToken) + => null; public virtual Task GetLocationForPositionAsync(Workspace workspace, DocumentId documentId, int position, int virtualSpace, bool allowInvalidPosition, CancellationToken cancellationToken) => GetLocationForSpanAsync(workspace, documentId, new TextSpan(position, 0), allowInvalidSpan: allowInvalidPosition, cancellationToken); diff --git a/src/Features/Core/Portable/Navigation/INavigableLocation.cs b/src/Features/Core/Portable/Navigation/INavigableLocation.cs index 84eee62f5d52c..d71f6b623a551 100644 --- a/src/Features/Core/Portable/Navigation/INavigableLocation.cs +++ b/src/Features/Core/Portable/Navigation/INavigableLocation.cs @@ -33,11 +33,10 @@ public Task NavigateToAsync(NavigationOptions options, CancellationToken c public static class TestAccessor { #pragma warning disable VSTHRD200 // Use "Async" suffix for async methods - public static Task Create(bool value) + public static async Task Create(bool value) #pragma warning restore VSTHRD200 // Use "Async" suffix for async methods { - return Task.FromResult( - new NavigableLocation((_, _) => value ? SpecializedTasks.True : SpecializedTasks.False)); + return new NavigableLocation(async (_, _) => value); } } } diff --git a/src/Features/Core/Portable/OrganizeImports/OrganizeImportsCodeRefactoringProvider.cs b/src/Features/Core/Portable/OrganizeImports/OrganizeImportsCodeRefactoringProvider.cs index 026aafeb92c19..af84d4e22a275 100644 --- a/src/Features/Core/Portable/OrganizeImports/OrganizeImportsCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/OrganizeImports/OrganizeImportsCodeRefactoringProvider.cs @@ -88,7 +88,7 @@ public override async Task ComputeRefactoringsAsync(CodeRefactoringContext conte context.RegisterRefactoring(CodeAction.Create( document.GetRequiredLanguageService().SortImportsDisplayStringWithoutAccelerator, - cancellationToken => Task.FromResult(document.WithSyntaxRoot(newRoot))), + async cancellationToken => document.WithSyntaxRoot(newRoot)), applicableToSpan: imports.GetContainedSpan()); } } diff --git a/src/Features/Core/Portable/PreferFrameworkType/PreferFrameworkTypeCodeFixProvider.cs b/src/Features/Core/Portable/PreferFrameworkType/PreferFrameworkTypeCodeFixProvider.cs index 416ee5dc0c44b..2e8b4b7f87f53 100644 --- a/src/Features/Core/Portable/PreferFrameworkType/PreferFrameworkTypeCodeFixProvider.cs +++ b/src/Features/Core/Portable/PreferFrameworkType/PreferFrameworkTypeCodeFixProvider.cs @@ -23,15 +23,13 @@ internal sealed class PreferFrameworkTypeCodeFixProvider() : SyntaxEditorBasedCo public sealed override ImmutableArray FixableDiagnosticIds { get; } = [IDEDiagnosticIds.PreferBuiltInOrFrameworkTypeDiagnosticId]; - public override Task RegisterCodeFixesAsync(CodeFixContext context) + public override async Task RegisterCodeFixesAsync(CodeFixContext context) { var diagnostic = context.Diagnostics[0]; if (diagnostic.Properties.ContainsKey(PreferFrameworkTypeConstants.PreferFrameworkType)) { RegisterCodeFix(context, FeaturesResources.Use_framework_type, nameof(FeaturesResources.Use_framework_type)); } - - return Task.CompletedTask; } protected override async Task FixAllAsync( diff --git a/src/Features/Core/Portable/QuickInfo/CommonSemanticQuickInfoProvider.cs b/src/Features/Core/Portable/QuickInfo/CommonSemanticQuickInfoProvider.cs index 5a55c3ae91af3..5d2f29b895f1a 100644 --- a/src/Features/Core/Portable/QuickInfo/CommonSemanticQuickInfoProvider.cs +++ b/src/Features/Core/Portable/QuickInfo/CommonSemanticQuickInfoProvider.cs @@ -185,8 +185,8 @@ protected static Task CreateContentAsync( protected abstract bool GetBindableNodeForTokenIndicatingPossibleIndexerAccess(SyntaxToken token, [NotNullWhen(returnValue: true)] out SyntaxNode? found); protected abstract bool GetBindableNodeForTokenIndicatingMemberAccess(SyntaxToken token, out SyntaxToken found); - protected virtual Task GetOnTheFlyDocsInfoAsync(QuickInfoContext context, CancellationToken cancellationToken) - => Task.FromResult(null); + protected virtual async Task GetOnTheFlyDocsInfoAsync(QuickInfoContext context, CancellationToken cancellationToken) + => null; protected virtual string? GetNullabilityAnalysis(SemanticModel semanticModel, ISymbol symbol, SyntaxNode node, CancellationToken cancellationToken) => null; diff --git a/src/Features/Core/Portable/QuickInfo/QuickInfoService.cs b/src/Features/Core/Portable/QuickInfo/QuickInfoService.cs index 816669d75b6a7..95c1fcec88326 100644 --- a/src/Features/Core/Portable/QuickInfo/QuickInfoService.cs +++ b/src/Features/Core/Portable/QuickInfo/QuickInfoService.cs @@ -40,12 +40,12 @@ internal QuickInfoService() return GetQuickInfoAsync(document, position, SymbolDescriptionOptions.Default, cancellationToken); } - internal virtual Task GetQuickInfoAsync( + internal virtual async Task GetQuickInfoAsync( Document document, int position, SymbolDescriptionOptions options, CancellationToken cancellationToken) { - return SpecializedTasks.Null(); + return null; } } diff --git a/src/Features/Core/Portable/SemanticSearch/SearchCompilationFailureDefinitionItem.cs b/src/Features/Core/Portable/SemanticSearch/SearchCompilationFailureDefinitionItem.cs index cc0ab05fae1a8..14f1a1e579ae3 100644 --- a/src/Features/Core/Portable/SemanticSearch/SearchCompilationFailureDefinitionItem.cs +++ b/src/Features/Core/Portable/SemanticSearch/SearchCompilationFailureDefinitionItem.cs @@ -33,7 +33,7 @@ internal sealed class SearchCompilationFailureDefinitionItem(QueryCompilationErr { internal override bool IsExternal => false; - public override Task GetNavigableLocationAsync(Workspace workspace, CancellationToken cancellationToken) - => Task.FromResult(null); + public override async Task GetNavigableLocationAsync(Workspace workspace, CancellationToken cancellationToken) + => null; } diff --git a/src/Features/Core/Portable/SemanticSearch/SearchExceptionDefinitionItem.cs b/src/Features/Core/Portable/SemanticSearch/SearchExceptionDefinitionItem.cs index 927ec6da8ae43..ecff91bc9059c 100644 --- a/src/Features/Core/Portable/SemanticSearch/SearchExceptionDefinitionItem.cs +++ b/src/Features/Core/Portable/SemanticSearch/SearchExceptionDefinitionItem.cs @@ -37,7 +37,7 @@ .. stackTrace { internal override bool IsExternal => false; - public override Task GetNavigableLocationAsync(Workspace workspace, CancellationToken cancellationToken) - => Task.FromResult(null); + public override async Task GetNavigableLocationAsync(Workspace workspace, CancellationToken cancellationToken) + => null; } diff --git a/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeCodeFixProvider.cs b/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeCodeFixProvider.cs index 1f99311067ec3..9413925b75df2 100644 --- a/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeCodeFixProvider.cs +++ b/src/Features/Core/Portable/SimplifyThisOrMe/AbstractSimplifyThisOrMeCodeFixProvider.cs @@ -27,10 +27,9 @@ internal abstract partial class AbstractSimplifyThisOrMeCodeFixProvider FixableDiagnosticIds { get; } = [IDEDiagnosticIds.RemoveThisOrMeQualificationDiagnosticId]; - public sealed override Task RegisterCodeFixesAsync(CodeFixContext context) + public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { RegisterCodeFix(context, GetTitle(), IDEDiagnosticIds.RemoveThisOrMeQualificationDiagnosticId); - return Task.CompletedTask; } protected sealed override async Task FixAllAsync( diff --git a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractConditionalBlockSnippetProvider.cs b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractConditionalBlockSnippetProvider.cs index a94185d9ffbd7..8e5f1c24c6418 100644 --- a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractConditionalBlockSnippetProvider.cs +++ b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractConditionalBlockSnippetProvider.cs @@ -21,13 +21,13 @@ internal abstract class AbstractConditionalBlockSnippetProvider type.SpecialType == SpecialType.System_Boolean; - protected sealed override ValueTask> GetPlaceHolderLocationsListAsync( + protected sealed override async ValueTask> GetPlaceHolderLocationsListAsync( Document document, TStatementSyntax node, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) { if (ConstructedFromInlineExpression) - return new([]); + return []; var condition = GetCondition(node); - return new([new SnippetPlaceholder(condition.ToString(), condition.SpanStart)]); + return [new SnippetPlaceholder(condition.ToString(), condition.SpanStart)]; } } diff --git a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractLockSnippetProvider.cs b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractLockSnippetProvider.cs index 006fc5a0318dd..85a0ec8cee204 100644 --- a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractLockSnippetProvider.cs +++ b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractLockSnippetProvider.cs @@ -12,10 +12,10 @@ namespace Microsoft.CodeAnalysis.Snippets.SnippetProviders; internal abstract class AbstractLockSnippetProvider : AbstractStatementSnippetProvider where TLockStatementSyntax : SyntaxNode { - protected sealed override Task GenerateSnippetTextChangeAsync(Document document, int position, CancellationToken cancellationToken) + protected sealed override async Task GenerateSnippetTextChangeAsync(Document document, int position, CancellationToken cancellationToken) { var generator = SyntaxGenerator.GetGenerator(document); var statement = generator.LockStatement(generator.ThisExpression(), statements: []); - return Task.FromResult(new TextChange(TextSpan.FromBounds(position, position), statement.NormalizeWhitespace().ToFullString())); + return new TextChange(TextSpan.FromBounds(position, position), statement.NormalizeWhitespace().ToFullString()); } } diff --git a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractMainMethodSnippetProvider.cs b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractMainMethodSnippetProvider.cs index b6f9b706a11a9..39285b9772b4a 100644 --- a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractMainMethodSnippetProvider.cs +++ b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractMainMethodSnippetProvider.cs @@ -19,7 +19,7 @@ internal abstract class AbstractMainMethodSnippetProvider GenerateInnerStatements(SyntaxGenerator generator); - protected sealed override Task GenerateSnippetTextChangeAsync(Document document, int position, CancellationToken cancellationToken) + protected sealed override async Task GenerateSnippetTextChangeAsync(Document document, int position, CancellationToken cancellationToken) { var generator = SyntaxGenerator.GetGenerator(document); var method = generator.MethodDeclaration( @@ -31,6 +31,6 @@ protected sealed override Task GenerateSnippetTextChangeAsync(Docume modifiers: DeclarationModifiers.Static, statements: GenerateInnerStatements(generator)); - return Task.FromResult(new TextChange(TextSpan.FromBounds(position, position), method.NormalizeWhitespace().ToFullString())); + return new TextChange(TextSpan.FromBounds(position, position), method.NormalizeWhitespace().ToFullString()); } } diff --git a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs index 2e7531c518669..035819b9fe535 100644 --- a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs +++ b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs @@ -48,9 +48,9 @@ internal abstract class AbstractSnippetProvider : ISnippetProvid /// /// Method to find the locations that must be renamed and where tab stops must be inserted into the snippet. /// - protected virtual ValueTask> GetPlaceHolderLocationsListAsync( + protected virtual async ValueTask> GetPlaceHolderLocationsListAsync( Document document, TSnippetSyntax node, ISyntaxFacts syntaxFacts, CancellationToken cancellationToken) - => new([]); + => []; public bool IsValidSnippetLocation(SnippetContext context, CancellationToken cancellationToken) { @@ -222,8 +222,8 @@ private async Task AnnotateNodesToReformatAsync( reformatSnippetNode.WithAdditionalAnnotations(FindSnippetAnnotation, Simplifier.Annotation, Formatter.Annotation)); } - protected virtual ValueTask AdjustSnippetExpressionAsync(Document document, TSnippetSyntax snippetExpressionNode, CancellationToken cancellationToken) - => new(snippetExpressionNode); + protected virtual async ValueTask AdjustSnippetExpressionAsync(Document document, TSnippetSyntax snippetExpressionNode, CancellationToken cancellationToken) + => snippetExpressionNode; protected virtual TSnippetSyntax? FindAddedSnippetSyntaxNode(SyntaxNode root, int position) => root.FindNode(TextSpan.FromBounds(position, position), getInnermostNodeForTie: true) as TSnippetSyntax; @@ -244,6 +244,6 @@ private async Task AddIndentationToDocumentAsync(Document document, Ca return await AddIndentationToDocumentAsync(document, snippet, cancellationToken).ConfigureAwait(false); } - protected virtual Task AddIndentationToDocumentAsync(Document document, TSnippetSyntax snippet, CancellationToken cancellationToken) - => Task.FromResult(document); + protected virtual async Task AddIndentationToDocumentAsync(Document document, TSnippetSyntax snippet, CancellationToken cancellationToken) + => document; } diff --git a/src/Features/Core/Portable/SplitOrMergeIfStatements/AbstractSplitIfStatementCodeRefactoringProvider.cs b/src/Features/Core/Portable/SplitOrMergeIfStatements/AbstractSplitIfStatementCodeRefactoringProvider.cs index fdcf3a12e5173..f8fb871877d99 100644 --- a/src/Features/Core/Portable/SplitOrMergeIfStatements/AbstractSplitIfStatementCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/SplitOrMergeIfStatements/AbstractSplitIfStatementCodeRefactoringProvider.cs @@ -22,7 +22,7 @@ internal abstract class AbstractSplitIfStatementCodeRefactoringProvider : CodeRe protected abstract CodeAction CreateCodeAction(Func> createChangedDocument, string ifKeywordText); - protected abstract Task GetChangedRootAsync( + protected abstract ValueTask GetChangedRootAsync( Document document, SyntaxNode root, SyntaxNode ifOrElseIf, diff --git a/src/Features/Core/Portable/SplitOrMergeIfStatements/Consecutive/AbstractSplitIntoConsecutiveIfStatementsCodeRefactoringProvider.cs b/src/Features/Core/Portable/SplitOrMergeIfStatements/Consecutive/AbstractSplitIntoConsecutiveIfStatementsCodeRefactoringProvider.cs index 49e37866eaad9..bb00eccfedf33 100644 --- a/src/Features/Core/Portable/SplitOrMergeIfStatements/Consecutive/AbstractSplitIntoConsecutiveIfStatementsCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/SplitOrMergeIfStatements/Consecutive/AbstractSplitIntoConsecutiveIfStatementsCodeRefactoringProvider.cs @@ -50,7 +50,7 @@ protected sealed override CodeAction CreateCodeAction(Func GetChangedRootAsync( + protected sealed override async ValueTask GetChangedRootAsync( Document document, SyntaxNode root, SyntaxNode ifOrElseIf, diff --git a/src/Features/Core/Portable/SplitOrMergeIfStatements/Nested/AbstractSplitIntoNestedIfStatementsCodeRefactoringProvider.cs b/src/Features/Core/Portable/SplitOrMergeIfStatements/Nested/AbstractSplitIntoNestedIfStatementsCodeRefactoringProvider.cs index cedc4f34f2a5a..0f3655e8ac56b 100644 --- a/src/Features/Core/Portable/SplitOrMergeIfStatements/Nested/AbstractSplitIntoNestedIfStatementsCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/SplitOrMergeIfStatements/Nested/AbstractSplitIntoNestedIfStatementsCodeRefactoringProvider.cs @@ -37,7 +37,7 @@ protected sealed override CodeAction CreateCodeAction(Func GetChangedRootAsync( + protected sealed override async ValueTask GetChangedRootAsync( Document document, SyntaxNode root, SyntaxNode ifOrElseIf, @@ -53,7 +53,6 @@ protected sealed override Task GetChangedRootAsync( var innerIfStatement = ifGenerator.WithCondition(ifGenerator.ToIfStatement(ifOrElseIf), rightCondition); var outerIfOrElseIf = ifGenerator.WithCondition(ifGenerator.WithStatementInBlock(ifOrElseIf, innerIfStatement), leftCondition); - return Task.FromResult( - root.ReplaceNode(ifOrElseIf, outerIfOrElseIf.WithAdditionalAnnotations(Formatter.Annotation))); + return root.ReplaceNode(ifOrElseIf, outerIfOrElseIf.WithAdditionalAnnotations(Formatter.Annotation)); } } diff --git a/src/Features/Core/Portable/StackTraceExplorer/StackFrameMethodSymbolResolver.cs b/src/Features/Core/Portable/StackTraceExplorer/StackFrameMethodSymbolResolver.cs index 877911305c84e..f8bbad417b95b 100644 --- a/src/Features/Core/Portable/StackTraceExplorer/StackFrameMethodSymbolResolver.cs +++ b/src/Features/Core/Portable/StackTraceExplorer/StackFrameMethodSymbolResolver.cs @@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.StackTraceExplorer; internal sealed class StackFrameMethodSymbolResolver : AbstractStackTraceSymbolResolver { - public override Task TryGetBestMatchAsync( + public override async Task TryGetBestMatchAsync( Project project, INamedTypeSymbol type, StackFrameSimpleNameNode methodNode, @@ -27,6 +27,6 @@ internal sealed class StackFrameMethodSymbolResolver : AbstractStackTraceSymbolR .Where(m => m.Name == methodName); var match = TryGetBestMatch(candidateMethods, methodTypeArguments, methodArguments); - return Task.FromResult(match); + return match; } } diff --git a/src/Features/Core/Portable/StackTraceExplorer/StackTraceAnalyzer.cs b/src/Features/Core/Portable/StackTraceExplorer/StackTraceAnalyzer.cs index e3198d3e6fa29..6346902a87777 100644 --- a/src/Features/Core/Portable/StackTraceExplorer/StackTraceAnalyzer.cs +++ b/src/Features/Core/Portable/StackTraceExplorer/StackTraceAnalyzer.cs @@ -23,10 +23,10 @@ internal static class StackTraceAnalyzer /// private static readonly ImmutableArray s_parsers = [new DotnetStackFrameParser(), new VSDebugCallstackParser(), new DefaultStackParser()]; - public static Task AnalyzeAsync(string callstack, CancellationToken cancellationToken) + public static async Task AnalyzeAsync(string callstack, CancellationToken cancellationToken) { var result = new StackTraceAnalysisResult(callstack, Parse(callstack, cancellationToken)); - return Task.FromResult(result); + return result; } private static ImmutableArray Parse(string callstack, CancellationToken cancellationToken) diff --git a/src/Features/Core/Portable/SymbolMapping/SymbolMappingServiceFactory.cs b/src/Features/Core/Portable/SymbolMapping/SymbolMappingServiceFactory.cs index 94c39c7355c19..7c7da96a65d28 100644 --- a/src/Features/Core/Portable/SymbolMapping/SymbolMappingServiceFactory.cs +++ b/src/Features/Core/Portable/SymbolMapping/SymbolMappingServiceFactory.cs @@ -33,6 +33,6 @@ public async Task MapSymbolAsync(Document document, SymbolK return null; } - public Task MapSymbolAsync(Document document, ISymbol symbol, CancellationToken cancellationToken) - => Task.FromResult(new SymbolMappingResult(document.Project, symbol)); + public async Task MapSymbolAsync(Document document, ISymbol symbol, CancellationToken cancellationToken) + => new SymbolMappingResult(document.Project, symbol); } diff --git a/src/Features/Core/Portable/SymbolSearch/SymbolSearchUpdateNoOpEngine.cs b/src/Features/Core/Portable/SymbolSearch/SymbolSearchUpdateNoOpEngine.cs index eef3b039283ec..1ba86fb8f3f80 100644 --- a/src/Features/Core/Portable/SymbolSearch/SymbolSearchUpdateNoOpEngine.cs +++ b/src/Features/Core/Portable/SymbolSearch/SymbolSearchUpdateNoOpEngine.cs @@ -18,14 +18,14 @@ public void Dispose() // Nothing to do for the no-op version. } - public ValueTask> FindPackagesWithAssemblyAsync(string source, string assemblyName, CancellationToken cancellationToken) - => ValueTask.FromResult(ImmutableArray.Empty); + public async ValueTask> FindPackagesWithAssemblyAsync(string source, string assemblyName, CancellationToken cancellationToken) + => ImmutableArray.Empty; - public ValueTask> FindPackagesAsync(string source, TypeQuery typeQuery, NamespaceQuery namespaceQuery, CancellationToken cancellationToken) - => ValueTask.FromResult(ImmutableArray.Empty); + public async ValueTask> FindPackagesAsync(string source, TypeQuery typeQuery, NamespaceQuery namespaceQuery, CancellationToken cancellationToken) + => ImmutableArray.Empty; - public ValueTask> FindReferenceAssembliesAsync(TypeQuery typeQuery, NamespaceQuery namespaceQuery, CancellationToken cancellationToken) - => ValueTask.FromResult(ImmutableArray.Empty); + public async ValueTask> FindReferenceAssembliesAsync(TypeQuery typeQuery, NamespaceQuery namespaceQuery, CancellationToken cancellationToken) + => ImmutableArray.Empty; public ValueTask UpdateContinuouslyAsync(string sourceName, string localSettingsDirectory, CancellationToken cancellationToken) => default; diff --git a/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.Update.cs b/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.Update.cs index 3cdbe883397d3..389c9eb84d4ba 100644 --- a/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.Update.cs +++ b/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.Update.cs @@ -62,7 +62,7 @@ internal sealed partial class SymbolSearchUpdateEngine /// Currently used only in tests so we can shutdown gracefully. In normal VS+OOP scenarios /// we don't care about this and we just get torn down when the OOP process goes down. /// - public ValueTask UpdateContinuouslyAsync(string source, string localSettingsDirectory, CancellationToken cancellationToken) + public async ValueTask UpdateContinuouslyAsync(string source, string localSettingsDirectory, CancellationToken cancellationToken) { // Only the first thread to try to update this source should succeed // and cause us to actually begin the update loop. @@ -72,12 +72,12 @@ public ValueTask UpdateContinuouslyAsync(string source, string localSettingsDire if (ourSentinel != currentSentinel) { // We already have an update loop for this source. Nothing for us to do. - return default; + return; } // We were the first ones to try to update this source. Spawn off a task to do // the updating. - return new Updater(this, source, localSettingsDirectory).UpdateInBackgroundAsync(cancellationToken); + await new Updater(this, source, localSettingsDirectory).UpdateInBackgroundAsync(cancellationToken).ConfigureAwait(false); } private static void LogInfo(string text) diff --git a/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.cs b/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.cs index 42d372b04cb1f..64b9608db3c11 100644 --- a/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.cs +++ b/src/Features/Core/Portable/SymbolSearch/Windows/SymbolSearchUpdateEngine.cs @@ -111,7 +111,7 @@ public ValueTask> FindReferenceAssemblie cancellationToken); } - public ValueTask> FindPackageOrReferenceAssembliesAsync( + public async ValueTask> FindPackageOrReferenceAssembliesAsync( string source, TypeQuery typeQuery, NamespaceQuery namespaceQuery, @@ -121,7 +121,7 @@ public ValueTask> FindPackageOrReferenceAssembliesAsync< { // Check if we don't have a database to search. if (!_sourceToDatabase.TryGetValue(source, out var databaseWrapper)) - return ValueTask.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; var database = databaseWrapper.Database; @@ -129,7 +129,7 @@ public ValueTask> FindPackageOrReferenceAssembliesAsync< // never find anything named 'var'. if (searchName == "var") - return ValueTask.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; var query = new MemberQuery(searchName, isFullSuffix: true, isFullNamespace: false); var symbols = new PartialArray(100); @@ -146,7 +146,7 @@ public ValueTask> FindPackageOrReferenceAssembliesAsync< } } - return ValueTask.FromResult(results.ToImmutableAndClear()); + return results.ToImmutableAndClear(); static IEnumerable FilterToViableSymbols( PartialArray symbols, NamespaceQuery namespaceQuery) @@ -173,13 +173,13 @@ static IEnumerable FilterToViableSymbols( } } - public ValueTask> FindPackagesWithAssemblyAsync( + public async ValueTask> FindPackagesWithAssemblyAsync( string source, string assemblyName, CancellationToken cancellationToken) { if (!_sourceToDatabase.TryGetValue(source, out var databaseWrapper)) { // Don't have a database to search. - return ValueTask.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; } using var _ = ArrayBuilder.GetInstance(out var result); @@ -211,7 +211,7 @@ public ValueTask> FindPackagesWithAsse } } - return ValueTask.FromResult(result.ToImmutableAndClear()); + return result.ToImmutableAndClear(); } private static int GetRank(Symbol symbol) diff --git a/src/Features/Core/Portable/UseNamedArguments/AbstractUseNamedArgumentsCodeRefactoringProvider.cs b/src/Features/Core/Portable/UseNamedArguments/AbstractUseNamedArgumentsCodeRefactoringProvider.cs index 3a9ab3951b7be..cf3711d1d0a18 100644 --- a/src/Features/Core/Portable/UseNamedArguments/AbstractUseNamedArgumentsCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/UseNamedArguments/AbstractUseNamedArgumentsCodeRefactoringProvider.cs @@ -132,7 +132,7 @@ public async Task ComputeRefactoringsAsync( } } - private Task AddNamedArgumentsAsync( + private async Task AddNamedArgumentsAsync( SyntaxNode root, Document document, TSimpleArgumentSyntax firstArgument, @@ -143,7 +143,7 @@ private Task AddNamedArgumentsAsync( var argumentList = (TArgumentListSyntax)firstArgument.Parent!; var newArgumentList = GetOrSynthesizeNamedArguments(parameters, argumentList, index, includingTrailingArguments); var newRoot = root.ReplaceNode(argumentList, newArgumentList); - return Task.FromResult(document.WithSyntaxRoot(newRoot)); + return document.WithSyntaxRoot(newRoot); } private TArgumentListSyntax GetOrSynthesizeNamedArguments( diff --git a/src/Features/Core/Portable/ValueTracking/ValueTracker.OperationCollector.cs b/src/Features/Core/Portable/ValueTracking/ValueTracker.OperationCollector.cs index 61d32f16b98b0..c24c630bb9e7d 100644 --- a/src/Features/Core/Portable/ValueTracking/ValueTracker.OperationCollector.cs +++ b/src/Features/Core/Portable/ValueTracking/ValueTracker.OperationCollector.cs @@ -108,7 +108,7 @@ private async Task VisitInvocationAsync(IInvocationOperation invocationOperation await TrackArgumentsAsync(invocationOperation.Arguments, cancellationToken).ConfigureAwait(false); } - private Task VisitReferenceAsync(IOperation operation, CancellationToken cancellationToken) + private async Task VisitReferenceAsync(IOperation operation, CancellationToken cancellationToken) { Debug.Assert(operation is ILocalReferenceOperation or @@ -122,23 +122,22 @@ IFieldReferenceOperation or { // Always add ref or out parameters to track as assignments since the values count as // assignments across method calls for the purposes of value tracking. - return AddOperationAsync(operation, argumentOperation.Parameter, cancellationToken); + await AddOperationAsync(operation, argumentOperation.Parameter, cancellationToken).ConfigureAwait(false); + } + else + { + // If the parameter is not a ref or out param, track the reference assignments that count + // as input to the argument being passed to the method. + await AddReferenceAsync(operation, cancellationToken).ConfigureAwait(false); } - - // If the parameter is not a ref or out param, track the reference assignments that count - // as input to the argument being passed to the method. - return AddReferenceAsync(operation, cancellationToken); } - - if (IsContainedIn(operation) || IsContainedIn(operation)) + else if (IsContainedIn(operation) || IsContainedIn(operation)) { // If the reference is part of a return operation or assignment operation we want to track where the values come from // since they contribute to the "output" of the method/assignment and are relavent for value tracking. - return AddReferenceAsync(operation, cancellationToken); + await AddReferenceAsync(operation, cancellationToken).ConfigureAwait(false); } - return Task.CompletedTask; - Task AddReferenceAsync(IOperation operation, CancellationToken cancellationToken) => operation switch { @@ -150,24 +149,24 @@ Task AddReferenceAsync(IOperation operation, CancellationToken cancellationToken }; } - private Task VisitLiteralAsync(ILiteralOperation literalOperation, CancellationToken cancellationToken) + private async Task VisitLiteralAsync(ILiteralOperation literalOperation, CancellationToken cancellationToken) { if (literalOperation.Type is null) { - return Task.CompletedTask; + return; } - return AddOperationAsync(literalOperation, literalOperation.Type, cancellationToken); + await AddOperationAsync(literalOperation, literalOperation.Type, cancellationToken).ConfigureAwait(false); } - private Task VisitReturnAsync(IReturnOperation returnOperation, CancellationToken cancellationToken) + private async Task VisitReturnAsync(IReturnOperation returnOperation, CancellationToken cancellationToken) { if (returnOperation.ReturnedValue is null) { - return Task.CompletedTask; + return; } - return VisitAsync(returnOperation.ReturnedValue, cancellationToken); + await VisitAsync(returnOperation.ReturnedValue, cancellationToken).ConfigureAwait(false); } private async Task AddOperationAsync(IOperation operation, ISymbol symbol, CancellationToken cancellationToken) diff --git a/src/Features/Core/Portable/Wrapping/AbstractCodeActionComputer.cs b/src/Features/Core/Portable/Wrapping/AbstractCodeActionComputer.cs index 02caaf4eeca29..a8c8c73534ab0 100644 --- a/src/Features/Core/Portable/Wrapping/AbstractCodeActionComputer.cs +++ b/src/Features/Core/Portable/Wrapping/AbstractCodeActionComputer.cs @@ -157,7 +157,7 @@ protected async Task GetIndentationAfterAsync( // Store the root so we don't just end up creating this code action again. _seenDocumentRoots.Add(formattedRoot); - return new WrapItemsAction(title, parentTitle, (_, _) => Task.FromResult(formattedDocument)); + return new WrapItemsAction(title, parentTitle, async (_, _) => formattedDocument); } private async Task FormatDocumentAsync( diff --git a/src/Features/DiagnosticsTestUtilities/CodeActions/CSharpCodeRefactoringVerifier`1+Test.cs b/src/Features/DiagnosticsTestUtilities/CodeActions/CSharpCodeRefactoringVerifier`1+Test.cs index 0473efa36bac4..920982571935a 100644 --- a/src/Features/DiagnosticsTestUtilities/CodeActions/CSharpCodeRefactoringVerifier`1+Test.cs +++ b/src/Features/DiagnosticsTestUtilities/CodeActions/CSharpCodeRefactoringVerifier`1+Test.cs @@ -119,14 +119,14 @@ protected override CompilationOptions CreateCompilationOptions() private static readonly TestComposition s_editorFeaturesOOPComposition = FeaturesTestCompositions.Features.WithTestHostParts(TestHost.OutOfProcess); - protected override Task CreateWorkspaceImplAsync() + protected override async Task CreateWorkspaceImplAsync() { if (TestHost == TestHost.InProcess) - return base.CreateWorkspaceImplAsync(); + return await base.CreateWorkspaceImplAsync().ConfigureAwait(false); var hostServices = s_editorFeaturesOOPComposition.GetHostServices(); var workspace = new AdhocWorkspace(hostServices); - return Task.FromResult(workspace); + return workspace; } #endif } diff --git a/src/Features/DiagnosticsTestUtilities/CodeActions/VisualBasicCodeRefactoringVerifier`1+Test.cs b/src/Features/DiagnosticsTestUtilities/CodeActions/VisualBasicCodeRefactoringVerifier`1+Test.cs index e6a00a6496828..a49946d0db1af 100644 --- a/src/Features/DiagnosticsTestUtilities/CodeActions/VisualBasicCodeRefactoringVerifier`1+Test.cs +++ b/src/Features/DiagnosticsTestUtilities/CodeActions/VisualBasicCodeRefactoringVerifier`1+Test.cs @@ -106,14 +106,14 @@ protected override ParseOptions CreateParseOptions() private static readonly TestComposition s_editorFeaturesOOPComposition = FeaturesTestCompositions.Features.WithTestHostParts(TestHost.OutOfProcess); - protected override Task CreateWorkspaceImplAsync() + protected override async Task CreateWorkspaceImplAsync() { if (TestHost == TestHost.InProcess) - return base.CreateWorkspaceImplAsync(); + return await base.CreateWorkspaceImplAsync().ConfigureAwait(false); var hostServices = s_editorFeaturesOOPComposition.GetHostServices(); var workspace = new AdhocWorkspace(hostServices); - return Task.FromResult(workspace); + return workspace; } #endif diff --git a/src/Features/DiagnosticsTestUtilities/CodeActionsLegacy/AbstractCodeActionTest_NoEditor.cs b/src/Features/DiagnosticsTestUtilities/CodeActionsLegacy/AbstractCodeActionTest_NoEditor.cs index 07690dcae04ce..ece9bc416c87d 100644 --- a/src/Features/DiagnosticsTestUtilities/CodeActionsLegacy/AbstractCodeActionTest_NoEditor.cs +++ b/src/Features/DiagnosticsTestUtilities/CodeActionsLegacy/AbstractCodeActionTest_NoEditor.cs @@ -97,8 +97,8 @@ private static async Task GetFixAllFixAsync( return await refactorAllProvider.GetRefactoringAsync(refactorAllContext).ConfigureAwait(false); } - protected override Task> GetDiagnosticsWorkerAsync(TTestWorkspace workspace, TestParameters parameters) - => SpecializedTasks.EmptyImmutableArray(); + protected override async Task> GetDiagnosticsWorkerAsync(TTestWorkspace workspace, TestParameters parameters) + => []; internal override async Task GetCodeRefactoringAsync( TTestWorkspace workspace, TestParameters parameters) diff --git a/src/Features/ExternalAccess/Copilot/Internal/Analyzer/AbstractCopilotCodeAnalysisService.cs b/src/Features/ExternalAccess/Copilot/Internal/Analyzer/AbstractCopilotCodeAnalysisService.cs index ae44dadd08e08..fdb081db59a53 100644 --- a/src/Features/ExternalAccess/Copilot/Internal/Analyzer/AbstractCopilotCodeAnalysisService.cs +++ b/src/Features/ExternalAccess/Copilot/Internal/Analyzer/AbstractCopilotCodeAnalysisService.cs @@ -166,9 +166,9 @@ public async Task> GetCachedDocumentDiagnosticsAsync( return diagnostics.ToImmutable(); } - protected virtual Task> GetDiagnosticsIntersectWithSpanAsync(Document document, IReadOnlyList diagnostics, TextSpan span, CancellationToken cancellationToken) + protected virtual async Task> GetDiagnosticsIntersectWithSpanAsync(Document document, IReadOnlyList diagnostics, TextSpan span, CancellationToken cancellationToken) { - return Task.FromResult(diagnostics.WhereAsArray(static (diagnostic, span) => diagnostic.Location.SourceSpan.IntersectsWith(span), span)); + return diagnostics.WhereAsArray(static (diagnostic, span) => diagnostic.Location.SourceSpan.IntersectsWith(span), span); } public async Task StartRefinementSessionAsync(Document oldDocument, Document newDocument, Diagnostic? primaryDiagnostic, CancellationToken cancellationToken) diff --git a/src/Features/ExternalAccess/Copilot/Internal/Analyzer/CSharp/CSharpCopilotCodeAnalysisService.cs b/src/Features/ExternalAccess/Copilot/Internal/Analyzer/CSharp/CSharpCopilotCodeAnalysisService.cs index ac005eb0be0e0..81e03e7dfded4 100644 --- a/src/Features/ExternalAccess/Copilot/Internal/Analyzer/CSharp/CSharpCopilotCodeAnalysisService.cs +++ b/src/Features/ExternalAccess/Copilot/Internal/Analyzer/CSharp/CSharpCopilotCodeAnalysisService.cs @@ -59,60 +59,58 @@ IDiagnosticsRefresher diagnosticsRefresher GenerateImplementationService = externalCSharpCopilotGenerateImplementationService; } - protected override Task> AnalyzeDocumentCoreAsync(Document document, TextSpan? span, string promptTitle, CancellationToken cancellationToken) + protected override async Task> AnalyzeDocumentCoreAsync(Document document, TextSpan? span, string promptTitle, CancellationToken cancellationToken) { if (AnalysisService is not null) - return AnalysisService.AnalyzeDocumentAsync(document, span, promptTitle, cancellationToken); + return await AnalysisService.AnalyzeDocumentAsync(document, span, promptTitle, cancellationToken).ConfigureAwait(false); - return Task.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; } - protected override Task> GetAvailablePromptTitlesCoreAsync(Document document, CancellationToken cancellationToken) + protected override async Task> GetAvailablePromptTitlesCoreAsync(Document document, CancellationToken cancellationToken) { if (AnalysisService is not null) - return AnalysisService.GetAvailablePromptTitlesAsync(document, cancellationToken); + return await AnalysisService.GetAvailablePromptTitlesAsync(document, cancellationToken).ConfigureAwait(false); - return Task.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; } - protected override Task> GetCachedDiagnosticsCoreAsync(Document document, string promptTitle, CancellationToken cancellationToken) + protected override async Task> GetCachedDiagnosticsCoreAsync(Document document, string promptTitle, CancellationToken cancellationToken) { if (AnalysisService is not null) - return AnalysisService.GetCachedDiagnosticsAsync(document, promptTitle, cancellationToken); + return await AnalysisService.GetCachedDiagnosticsAsync(document, promptTitle, cancellationToken).ConfigureAwait(false); - return Task.FromResult(ImmutableArray.Empty); + return ImmutableArray.Empty; } - protected override Task IsAvailableCoreAsync(CancellationToken cancellationToken) + protected override async Task IsAvailableCoreAsync(CancellationToken cancellationToken) { if (AnalysisService is not null) - return AnalysisService.IsAvailableAsync(cancellationToken); + return await AnalysisService.IsAvailableAsync(cancellationToken).ConfigureAwait(false); - return Task.FromResult(false); + return false; } - protected override Task StartRefinementSessionCoreAsync(Document oldDocument, Document newDocument, Diagnostic? primaryDiagnostic, CancellationToken cancellationToken) + protected override async Task StartRefinementSessionCoreAsync(Document oldDocument, Document newDocument, Diagnostic? primaryDiagnostic, CancellationToken cancellationToken) { if (AnalysisService is not null) - return AnalysisService.StartRefinementSessionAsync(oldDocument, newDocument, primaryDiagnostic, cancellationToken); - - return Task.CompletedTask; + await AnalysisService.StartRefinementSessionAsync(oldDocument, newDocument, primaryDiagnostic, cancellationToken).ConfigureAwait(false); } - protected override Task GetOnTheFlyDocsPromptCoreAsync(OnTheFlyDocsInfo onTheFlyDocsInfo, CancellationToken cancellationToken) + protected override async Task GetOnTheFlyDocsPromptCoreAsync(OnTheFlyDocsInfo onTheFlyDocsInfo, CancellationToken cancellationToken) { if (OnTheFlyDocsService is not null) - return OnTheFlyDocsService.GetOnTheFlyDocsPromptAsync(new CopilotOnTheFlyDocsInfoWrapper(onTheFlyDocsInfo), cancellationToken); + return await OnTheFlyDocsService.GetOnTheFlyDocsPromptAsync(new CopilotOnTheFlyDocsInfoWrapper(onTheFlyDocsInfo), cancellationToken).ConfigureAwait(false); - return Task.FromResult(string.Empty); + return string.Empty; } - protected override Task<(string responseString, bool isQuotaExceeded)> GetOnTheFlyDocsResponseCoreAsync(string prompt, CancellationToken cancellationToken) + protected override async Task<(string responseString, bool isQuotaExceeded)> GetOnTheFlyDocsResponseCoreAsync(string prompt, CancellationToken cancellationToken) { if (OnTheFlyDocsService is not null) - return OnTheFlyDocsService.GetOnTheFlyDocsResponseAsync(prompt, cancellationToken); + return await OnTheFlyDocsService.GetOnTheFlyDocsResponseAsync(prompt, cancellationToken).ConfigureAwait(false); - return Task.FromResult((string.Empty, false)); + return (string.Empty, false); } protected override async Task> GetDiagnosticsIntersectWithSpanAsync( @@ -135,20 +133,20 @@ protected override async Task> GetDiagnosticsIntersec return filteredDiagnostics.ToImmutable(); } - protected override Task IsFileExcludedCoreAsync(string filePath, CancellationToken cancellationToken) + protected override async Task IsFileExcludedCoreAsync(string filePath, CancellationToken cancellationToken) { if (AnalysisService is not null) - return AnalysisService.IsFileExcludedAsync(filePath, cancellationToken); + return await AnalysisService.IsFileExcludedAsync(filePath, cancellationToken).ConfigureAwait(false); - return Task.FromResult(false); + return false; } - protected override Task<(Dictionary? responseDictionary, bool isQuotaExceeded)> GetDocumentationCommentCoreAsync(DocumentationCommentProposal proposal, CancellationToken cancellationToken) + protected override async Task<(Dictionary? responseDictionary, bool isQuotaExceeded)> GetDocumentationCommentCoreAsync(DocumentationCommentProposal proposal, CancellationToken cancellationToken) { if (GenerateDocumentationService is not null) - return GenerateDocumentationService.GetDocumentationCommentAsync(new CopilotDocumentationCommentProposalWrapper(proposal), cancellationToken); + return await GenerateDocumentationService.GetDocumentationCommentAsync(new CopilotDocumentationCommentProposalWrapper(proposal), cancellationToken).ConfigureAwait(false); - return Task.FromResult<(Dictionary?, bool)>((null, false)); + return (null, false); } protected override bool IsImplementNotImplementedExceptionsAvailableCore() diff --git a/src/Features/ExternalAccess/Copilot/Internal/Completion/CSharpContextProviderService.cs b/src/Features/ExternalAccess/Copilot/Internal/Completion/CSharpContextProviderService.cs index 5915edf57088a..d00004a66d1ac 100644 --- a/src/Features/ExternalAccess/Copilot/Internal/Completion/CSharpContextProviderService.cs +++ b/src/Features/ExternalAccess/Copilot/Internal/Completion/CSharpContextProviderService.cs @@ -27,12 +27,10 @@ public IAsyncEnumerable GetContextItemsAsync(Document document, in static async (provider, callback, args, cancellationToken) => await provider.ProvideContextItemsAsync( args.document, args.position, args.activeExperiments, - (items, cancellationToken) => + async (items, cancellationToken) => { foreach (var item in items) callback(item); - - return default; }, cancellationToken).ConfigureAwait(false), args: (document, position, activeExperiments), cancellationToken); diff --git a/src/Features/ExternalAccess/Copilot/Internal/SemanticSearch/CopilotSemanticSearchQueryExecutor.cs b/src/Features/ExternalAccess/Copilot/Internal/SemanticSearch/CopilotSemanticSearchQueryExecutor.cs index 429e9bb145610..48c9fe2e44ed1 100644 --- a/src/Features/ExternalAccess/Copilot/Internal/SemanticSearch/CopilotSemanticSearchQueryExecutor.cs +++ b/src/Features/ExternalAccess/Copilot/Internal/SemanticSearch/CopilotSemanticSearchQueryExecutor.cs @@ -34,8 +34,8 @@ private sealed class ResultsObserver(CancellationTokenSource cancellationSource, /// /// We only use symbol display names, classification is not relevant. /// - public ValueTask GetClassificationOptionsAsync(LanguageServices language, CancellationToken cancellationToken) - => new(ClassificationOptions.Default); + public async ValueTask GetClassificationOptionsAsync(LanguageServices language, CancellationToken cancellationToken) + => ClassificationOptions.Default; public ValueTask AddItemsAsync(int itemCount, CancellationToken cancellationToken) => ValueTask.CompletedTask; @@ -43,14 +43,13 @@ public ValueTask AddItemsAsync(int itemCount, CancellationToken cancellationToke public ValueTask ItemsCompletedAsync(int itemCount, CancellationToken cancellationToken) => ValueTask.CompletedTask; - public ValueTask OnUserCodeExceptionAsync(UserCodeExceptionInfo exception, CancellationToken cancellationToken) + public async ValueTask OnUserCodeExceptionAsync(UserCodeExceptionInfo exception, CancellationToken cancellationToken) { RuntimeException ??= $"{exception.TypeName.ToVisibleDisplayString(includeLeftToRightMarker: false)}: {exception.Message}{Environment.NewLine}{exception.StackTrace.ToVisibleDisplayString(includeLeftToRightMarker: false)}"; cancellationSource.Cancel(); - return ValueTask.CompletedTask; } - public ValueTask OnDefinitionFoundAsync(DefinitionItem definition, CancellationToken cancellationToken) + public async ValueTask OnDefinitionFoundAsync(DefinitionItem definition, CancellationToken cancellationToken) { if (!ImmutableInterlocked.Update(ref _results, list => list.Count == resultCountLimit ? list : list.Add(definition.NameDisplayParts.ToVisibleDisplayString(includeLeftToRightMarker: false)))) @@ -58,8 +57,6 @@ public ValueTask OnDefinitionFoundAsync(DefinitionItem definition, CancellationT LimitReached = true; cancellationSource.Cancel(); } - - return ValueTask.CompletedTask; } public ValueTask OnDocumentUpdatedAsync(DocumentId documentId, ImmutableArray changes, CancellationToken cancellationToken) diff --git a/src/Features/ExternalAccess/Copilot/SemanticSearch/CopilotSemanticSearchUtilities.cs b/src/Features/ExternalAccess/Copilot/SemanticSearch/CopilotSemanticSearchUtilities.cs index 81ff0b2f59772..0e4219cb63f18 100644 --- a/src/Features/ExternalAccess/Copilot/SemanticSearch/CopilotSemanticSearchUtilities.cs +++ b/src/Features/ExternalAccess/Copilot/SemanticSearch/CopilotSemanticSearchUtilities.cs @@ -55,12 +55,10 @@ private sealed class Progress(Action callback) : IStreamingFi public ValueTask OnCompletedAsync(CancellationToken cancellationToken) => ValueTask.CompletedTask; public ValueTask OnDefinitionFoundAsync(SymbolGroup group, CancellationToken cancellationToken) => ValueTask.CompletedTask; - public ValueTask OnReferencesFoundAsync(ImmutableArray<(SymbolGroup group, ISymbol symbol, ReferenceLocation location)> references, CancellationToken cancellationToken) + public async ValueTask OnReferencesFoundAsync(ImmutableArray<(SymbolGroup group, ISymbol symbol, ReferenceLocation location)> references, CancellationToken cancellationToken) { foreach (var (_, _, location) in references) callback(location); - - return ValueTask.CompletedTask; } public IStreamingProgressTracker ProgressTracker diff --git a/src/Features/ExternalAccess/HotReload/Api/HotReloadService.cs b/src/Features/ExternalAccess/HotReload/Api/HotReloadService.cs index da8d623383977..ba0885b6b4859 100644 --- a/src/Features/ExternalAccess/HotReload/Api/HotReloadService.cs +++ b/src/Features/ExternalAccess/HotReload/Api/HotReloadService.cs @@ -18,11 +18,11 @@ internal sealed class HotReloadService(SolutionServices services, Func>> capabilitiesProvider) : IManagedHotReloadService { - public ValueTask> GetActiveStatementsAsync(CancellationToken cancellationToken) - => ValueTask.FromResult(ImmutableArray.Empty); + public async ValueTask> GetActiveStatementsAsync(CancellationToken cancellationToken) + => ImmutableArray.Empty; - public ValueTask GetAvailabilityAsync(Guid module, CancellationToken cancellationToken) - => ValueTask.FromResult(new ManagedHotReloadAvailability(ManagedHotReloadAvailabilityStatus.Available)); + public async ValueTask GetAvailabilityAsync(Guid module, CancellationToken cancellationToken) + => new ManagedHotReloadAvailability(ManagedHotReloadAvailabilityStatus.Available); public ValueTask> GetCapabilitiesAsync(CancellationToken cancellationToken) => capabilitiesProvider(); @@ -129,14 +129,14 @@ public readonly struct Updates } private static readonly ActiveStatementSpanProvider s_solutionActiveStatementSpanProvider = - (_, _, _) => ValueTask.FromResult(ImmutableArray.Empty); + async (_, _, _) => ImmutableArray.Empty; private readonly IEditAndContinueService _encService = services.GetRequiredService().Service; private DebuggingSessionId _sessionId; public HotReloadService(HostWorkspaceServices services, ImmutableArray capabilities) - : this(services.SolutionServices, () => ValueTask.FromResult(AddImplicitDotNetCapabilities(capabilities))) + : this(services.SolutionServices, async () => AddImplicitDotNetCapabilities(capabilities)) { } diff --git a/src/Features/Test/EditAndContinue/EditAndContinueWorkspaceServiceTests.cs b/src/Features/Test/EditAndContinue/EditAndContinueWorkspaceServiceTests.cs index 61914cfd87225..92948008cf2eb 100644 --- a/src/Features/Test/EditAndContinue/EditAndContinueWorkspaceServiceTests.cs +++ b/src/Features/Test/EditAndContinue/EditAndContinueWorkspaceServiceTests.cs @@ -2654,7 +2654,7 @@ public async Task Project_Add_BinaryAlreadyLoaded() var trackedActiveSpans = ImmutableArray.Create( new ActiveStatementSpan(new ActiveStatementId(0), activeLineSpanB1, ActiveStatementFlags.MethodUpToDate | ActiveStatementFlags.LeafFrame)); - var currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(documentB2, (_, _, _) => new(trackedActiveSpans), CancellationToken.None); + var currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(documentB2, async (_, _, _) => trackedActiveSpans, CancellationToken.None); // TODO: https://github.com/dotnet/roslyn/issues/79423 // AssertEx.Equal(trackedActiveSpans, currentSpans); Assert.Empty(currentSpans); @@ -4590,7 +4590,7 @@ public async Task ActiveStatements() var trackedActiveSpans1 = ImmutableArray.Create(activeStatementSpan11, activeStatementSpan12); - var currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(document1, (_, _, _) => new(trackedActiveSpans1), CancellationToken.None); + var currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(document1, async (_, _, _) => trackedActiveSpans1, CancellationToken.None); AssertEx.Equal(trackedActiveSpans1, currentSpans); // change the source (valid edit): @@ -4602,7 +4602,7 @@ public async Task ActiveStatements() var activeStatementSpan22 = new ActiveStatementSpan(new ActiveStatementId(1), activeLineSpan22, ActiveStatementFlags.LeafFrame); var trackedActiveSpans2 = ImmutableArray.Create(activeStatementSpan21, activeStatementSpan22); - currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(document2, (_, _, _) => new(trackedActiveSpans2), CancellationToken.None); + currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(document2, async (_, _, _) => trackedActiveSpans2, CancellationToken.None); AssertEx.Equal([adjustedActiveLineSpan1, adjustedActiveLineSpan2], currentSpans.Select(s => s.LineSpan)); } @@ -4666,7 +4666,7 @@ public async Task ActiveStatements_SyntaxErrorOrOutOfSyncDocument(bool isOutOfSy var document2 = solution.GetDocument(documentId); // no adjustments made due to syntax error or out-of-sync document: - var currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(document2, (_, _, _) => ValueTask.FromResult(baseSpans), CancellationToken.None); + var currentSpans = await debuggingSession.GetAdjustedActiveStatementSpansAsync(document2, async (_, _, _) => baseSpans, CancellationToken.None); AssertEx.Equal([activeLineSpan11, activeLineSpan12], currentSpans.Select(s => s.LineSpan)); } diff --git a/src/Features/Test/EditAndContinue/RemoteEditAndContinueServiceTests.cs b/src/Features/Test/EditAndContinue/RemoteEditAndContinueServiceTests.cs index dd97b08c68add..219e5807487e8 100644 --- a/src/Features/Test/EditAndContinue/RemoteEditAndContinueServiceTests.cs +++ b/src/Features/Test/EditAndContinue/RemoteEditAndContinueServiceTests.cs @@ -113,11 +113,11 @@ await localWorkspace.ChangeSolutionAsync(localWorkspace.CurrentSolution var activeSpans1 = ImmutableArray.Create( new ActiveStatementSpan(new ActiveStatementId(0), new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4)), ActiveStatementFlags.NonLeafFrame, documentId)); - var activeStatementSpanProvider = new ActiveStatementSpanProvider((documentId, path, cancellationToken) => + var activeStatementSpanProvider = new ActiveStatementSpanProvider(async (documentId, path, cancellationToken) => { Assert.Equal(documentId, documentId); Assert.Equal("test.cs", path); - return new(activeSpans1); + return activeSpans1; }); var diagnosticDescriptor = EditAndContinueDiagnosticDescriptors.GetDescriptor(EditAndContinueErrorCode.AddingTypeRuntimeCapabilityRequired); diff --git a/src/Features/TestUtilities/BrokeredServices/MockServiceBroker.cs b/src/Features/TestUtilities/BrokeredServices/MockServiceBroker.cs index aa12537213bfb..b5006c3a395e2 100644 --- a/src/Features/TestUtilities/BrokeredServices/MockServiceBroker.cs +++ b/src/Features/TestUtilities/BrokeredServices/MockServiceBroker.cs @@ -22,6 +22,6 @@ internal sealed class MockServiceBroker : IServiceBroker public ValueTask GetPipeAsync(ServiceMoniker serviceMoniker, ServiceActivationOptions options = default, CancellationToken cancellationToken = default) => throw new NotImplementedException(); - public ValueTask GetProxyAsync(ServiceRpcDescriptor serviceDescriptor, ServiceActivationOptions options = default, CancellationToken cancellationToken = default) where T : class - => ValueTask.FromResult((T?)(CreateService ?? throw new NotImplementedException()).Invoke(typeof(T))); + public async ValueTask GetProxyAsync(ServiceRpcDescriptor serviceDescriptor, ServiceActivationOptions options = default, CancellationToken cancellationToken = default) where T : class + => (T?)(CreateService ?? throw new NotImplementedException()).Invoke(typeof(T)); } diff --git a/src/Features/TestUtilities/EditAndContinue/EditAndContinueWorkspaceTestBase.cs b/src/Features/TestUtilities/EditAndContinue/EditAndContinueWorkspaceTestBase.cs index 12904badeb6c6..c76816b4d1544 100644 --- a/src/Features/TestUtilities/EditAndContinue/EditAndContinueWorkspaceTestBase.cs +++ b/src/Features/TestUtilities/EditAndContinue/EditAndContinueWorkspaceTestBase.cs @@ -38,7 +38,7 @@ public abstract class EditAndContinueWorkspaceTestBase : TestBase, IDisposable private protected static readonly Regex s_timePropertiesRegex = new("[|](EmitDifferenceMilliseconds|TotalAnalysisMilliseconds)=[0-9]+"); private protected static readonly ActiveStatementSpanProvider s_noActiveSpans = - (_, _, _) => new([]); + async (_, _, _) => []; private protected const TargetFramework DefaultTargetFramework = TargetFramework.NetLatest; diff --git a/src/Features/TestUtilities/EditAndContinue/MockActiveStatementSpanProvider.cs b/src/Features/TestUtilities/EditAndContinue/MockActiveStatementSpanProvider.cs index 9060ea835fbb8..d28c4fe771abc 100644 --- a/src/Features/TestUtilities/EditAndContinue/MockActiveStatementSpanProvider.cs +++ b/src/Features/TestUtilities/EditAndContinue/MockActiveStatementSpanProvider.cs @@ -14,9 +14,9 @@ internal sealed class MockActiveStatementSpanProvider : IActiveStatementSpanFact public Func, ImmutableArray>>? GetBaseActiveStatementSpansImpl; public Func>? GetAdjustedActiveStatementSpansImpl; - public ValueTask>> GetBaseActiveStatementSpansAsync(Solution solution, ImmutableArray documentIds, CancellationToken cancellationToken) - => new((GetBaseActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(solution, documentIds)); + public async ValueTask>> GetBaseActiveStatementSpansAsync(Solution solution, ImmutableArray documentIds, CancellationToken cancellationToken) + => (GetBaseActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(solution, documentIds); - public ValueTask> GetAdjustedActiveStatementSpansAsync(TextDocument document, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) - => new((GetAdjustedActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(document, activeStatementSpanProvider)); + public async ValueTask> GetAdjustedActiveStatementSpansAsync(TextDocument document, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) + => (GetAdjustedActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(document, activeStatementSpanProvider); } diff --git a/src/Features/TestUtilities/EditAndContinue/MockEditAndContinueService.cs b/src/Features/TestUtilities/EditAndContinue/MockEditAndContinueService.cs index b585a1f4cd11c..cd85df62e01c5 100644 --- a/src/Features/TestUtilities/EditAndContinue/MockEditAndContinueService.cs +++ b/src/Features/TestUtilities/EditAndContinue/MockEditAndContinueService.cs @@ -39,20 +39,20 @@ public void CommitSolutionUpdate(DebuggingSessionId sessionId) public void DiscardSolutionUpdate(DebuggingSessionId sessionId) => DiscardSolutionUpdateImpl?.Invoke(); - public ValueTask EmitSolutionUpdateAsync(DebuggingSessionId sessionId, Solution solution, ImmutableDictionary runningProjects, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) - => new((EmitSolutionUpdateImpl ?? throw new NotImplementedException()).Invoke(solution, runningProjects, activeStatementSpanProvider)); + public async ValueTask EmitSolutionUpdateAsync(DebuggingSessionId sessionId, Solution solution, ImmutableDictionary runningProjects, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) + => (EmitSolutionUpdateImpl ?? throw new NotImplementedException()).Invoke(solution, runningProjects, activeStatementSpanProvider); public void EndDebuggingSession(DebuggingSessionId sessionId) => EndDebuggingSessionImpl?.Invoke(); - public ValueTask>> GetBaseActiveStatementSpansAsync(DebuggingSessionId sessionId, Solution solution, ImmutableArray documentIds, CancellationToken cancellationToken) - => new((GetBaseActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(solution, documentIds)); + public async ValueTask>> GetBaseActiveStatementSpansAsync(DebuggingSessionId sessionId, Solution solution, ImmutableArray documentIds, CancellationToken cancellationToken) + => (GetBaseActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(solution, documentIds); - public ValueTask> GetAdjustedActiveStatementSpansAsync(DebuggingSessionId sessionId, TextDocument document, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) - => new((GetAdjustedActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(document, activeStatementSpanProvider)); + public async ValueTask> GetAdjustedActiveStatementSpansAsync(DebuggingSessionId sessionId, TextDocument document, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) + => (GetAdjustedActiveStatementSpansImpl ?? throw new NotImplementedException()).Invoke(document, activeStatementSpanProvider); - public ValueTask> GetDocumentDiagnosticsAsync(Document document, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) - => new((GetDocumentDiagnosticsImpl ?? throw new NotImplementedException()).Invoke(document, activeStatementSpanProvider)); + public async ValueTask> GetDocumentDiagnosticsAsync(Document document, ActiveStatementSpanProvider activeStatementSpanProvider, CancellationToken cancellationToken) + => (GetDocumentDiagnosticsImpl ?? throw new NotImplementedException()).Invoke(document, activeStatementSpanProvider); public void OnSourceFileUpdated(Document document) => OnSourceFileUpdatedImpl?.Invoke(document); diff --git a/src/Features/TestUtilities/EditAndContinue/MockManagedEditAndContinueDebuggerService.cs b/src/Features/TestUtilities/EditAndContinue/MockManagedEditAndContinueDebuggerService.cs index 207fa76880dde..aff02e6e57c57 100644 --- a/src/Features/TestUtilities/EditAndContinue/MockManagedEditAndContinueDebuggerService.cs +++ b/src/Features/TestUtilities/EditAndContinue/MockManagedEditAndContinueDebuggerService.cs @@ -19,26 +19,26 @@ internal sealed class MockManagedEditAndContinueDebuggerService : IManagedHotRel public Func>? GetActiveStatementsImpl; public Func>? GetCapabilitiesImpl; - public ValueTask> GetActiveStatementsAsync(CancellationToken cancellationToken) - => ValueTask.FromResult(GetActiveStatementsImpl?.Invoke() ?? []); + public async ValueTask> GetActiveStatementsAsync(CancellationToken cancellationToken) + => GetActiveStatementsImpl?.Invoke() ?? []; - public ValueTask GetAvailabilityAsync(Guid mvid, CancellationToken cancellationToken) + public async ValueTask GetAvailabilityAsync(Guid mvid, CancellationToken cancellationToken) { if (IsEditAndContinueAvailable != null) { - return ValueTask.FromResult(IsEditAndContinueAvailable(mvid)); + return IsEditAndContinueAvailable(mvid); } if (LoadedModules != null) { - return ValueTask.FromResult(LoadedModules.TryGetValue(mvid, out var result) ? result : new ManagedHotReloadAvailability(ManagedHotReloadAvailabilityStatus.ModuleNotLoaded)); + return LoadedModules.TryGetValue(mvid, out var result) ? result : new ManagedHotReloadAvailability(ManagedHotReloadAvailabilityStatus.ModuleNotLoaded); } throw new NotImplementedException(); } - public ValueTask> GetCapabilitiesAsync(CancellationToken cancellationToken) - => ValueTask.FromResult(GetCapabilitiesImpl?.Invoke() ?? ["Baseline", "AddDefinitionToExistingType", "NewTypeDefinition"]); + public async ValueTask> GetCapabilitiesAsync(CancellationToken cancellationToken) + => GetCapabilitiesImpl?.Invoke() ?? ["Baseline", "AddDefinitionToExistingType", "NewTypeDefinition"]; public ValueTask PrepareModuleForUpdateAsync(Guid mvid, CancellationToken cancellationToken) => ValueTask.CompletedTask; diff --git a/src/Features/TestUtilities/EditAndContinue/MockPdbMatchingSourceTextProvider.cs b/src/Features/TestUtilities/EditAndContinue/MockPdbMatchingSourceTextProvider.cs index c40e896847a2f..fd90c731b2d0a 100644 --- a/src/Features/TestUtilities/EditAndContinue/MockPdbMatchingSourceTextProvider.cs +++ b/src/Features/TestUtilities/EditAndContinue/MockPdbMatchingSourceTextProvider.cs @@ -15,6 +15,6 @@ internal sealed class MockPdbMatchingSourceTextProvider : IPdbMatchingSourceText { public Func, SourceHashAlgorithm, string?>? TryGetMatchingSourceTextImpl { get; set; } - public ValueTask TryGetMatchingSourceTextAsync(string filePath, ImmutableArray requiredChecksum, SourceHashAlgorithm checksumAlgorithm, CancellationToken cancellationToken) - => ValueTask.FromResult(TryGetMatchingSourceTextImpl?.Invoke(filePath, requiredChecksum, checksumAlgorithm)); + public async ValueTask TryGetMatchingSourceTextAsync(string filePath, ImmutableArray requiredChecksum, SourceHashAlgorithm checksumAlgorithm, CancellationToken cancellationToken) + => TryGetMatchingSourceTextImpl?.Invoke(filePath, requiredChecksum, checksumAlgorithm); } diff --git a/src/Features/TestUtilities/Options/TestOptionsProvider.cs b/src/Features/TestUtilities/Options/TestOptionsProvider.cs index f93921b093aa5..3851691431333 100644 --- a/src/Features/TestUtilities/Options/TestOptionsProvider.cs +++ b/src/Features/TestUtilities/Options/TestOptionsProvider.cs @@ -13,8 +13,8 @@ internal static class TestOptionsProvider { internal sealed class Provider(TOptions options) : OptionsProvider { - public ValueTask GetOptionsAsync(LanguageServices languageServices, CancellationToken cancellationToken) - => ValueTask.FromResult(options); + public async ValueTask GetOptionsAsync(LanguageServices languageServices, CancellationToken cancellationToken) + => options; } public static OptionsProvider Create(TOptions options) diff --git a/src/VisualStudio/Core/Def/FindReferences/VisualStudioDefinitionsAndReferencesFactory.cs b/src/VisualStudio/Core/Def/FindReferences/VisualStudioDefinitionsAndReferencesFactory.cs index a87b2b42ce545..98fe5f2135dd5 100644 --- a/src/VisualStudio/Core/Def/FindReferences/VisualStudioDefinitionsAndReferencesFactory.cs +++ b/src/VisualStudio/Core/Def/FindReferences/VisualStudioDefinitionsAndReferencesFactory.cs @@ -28,7 +28,7 @@ internal sealed class VisualStudioDefinitionsAndReferencesFactory( SVsServiceProvider serviceProvider, IThreadingContext threadingContext) : IExternalDefinitionItemProvider { - public async Task GetThirdPartyDefinitionItemAsync( + public async ValueTask GetThirdPartyDefinitionItemAsync( Solution solution, DefinitionItem definitionItem, CancellationToken cancellationToken) { var symbolNavigationService = solution.Services.GetRequiredService();