From 782d8cdebe855e152d956b3aeb5a86fcd212ad2c Mon Sep 17 00:00:00 2001 From: "Alex Gavrilov (DEV PROD)" Date: Sun, 3 Nov 2024 13:40:53 -0800 Subject: [PATCH 1/4] Move completion resolve code to common layer --- .../Completion/AggregateCompletionItemResolver.cs | 2 +- .../Completion/CompletionItemResolver.cs | 2 +- .../Completion/RazorCompletionItemResolver.cs | 4 +--- ...pshotManagerExtensions.SolutionQueryOperations.cs | 4 +--- .../IProjectSnapshotManagerExtensions.cs | 4 +--- .../ProjectSystem/MiscFilesHostProject.cs | 4 +--- .../Tooltip/ProjectAvailabilityTests.cs | 12 ++++++------ 7 files changed, 12 insertions(+), 20 deletions(-) rename src/Razor/src/{Microsoft.AspNetCore.Razor.LanguageServer => Microsoft.CodeAnalysis.Razor.Workspaces}/Completion/AggregateCompletionItemResolver.cs (97%) rename src/Razor/src/{Microsoft.AspNetCore.Razor.LanguageServer => Microsoft.CodeAnalysis.Razor.Workspaces}/Completion/CompletionItemResolver.cs (90%) rename src/Razor/src/{Microsoft.AspNetCore.Razor.LanguageServer => Microsoft.CodeAnalysis.Razor.Workspaces}/Completion/RazorCompletionItemResolver.cs (97%) rename src/Razor/src/{Microsoft.AspNetCore.Razor.LanguageServer => Microsoft.CodeAnalysis.Razor.Workspaces}/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs (89%) rename src/Razor/src/{Microsoft.AspNetCore.Razor.LanguageServer => Microsoft.CodeAnalysis.Razor.Workspaces}/ProjectSystem/IProjectSnapshotManagerExtensions.cs (96%) rename src/Razor/src/{Microsoft.AspNetCore.Razor.LanguageServer => Microsoft.CodeAnalysis.Razor.Workspaces}/ProjectSystem/MiscFilesHostProject.cs (93%) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/AggregateCompletionItemResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs similarity index 97% rename from src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/AggregateCompletionItemResolver.cs rename to src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs index 21075cfacc1..a0a9c54a53b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/AggregateCompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs @@ -11,7 +11,7 @@ using Microsoft.CodeAnalysis.Razor.Logging; using Microsoft.VisualStudio.LanguageServer.Protocol; -namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion; +namespace Microsoft.CodeAnalysis.Razor.Completion; internal class AggregateCompletionItemResolver { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/CompletionItemResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs similarity index 90% rename from src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/CompletionItemResolver.cs rename to src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs index 010b53c71db..7d43af97581 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/CompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using Microsoft.VisualStudio.LanguageServer.Protocol; -namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion; +namespace Microsoft.CodeAnalysis.Razor.Completion; internal abstract class CompletionItemResolver { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionItemResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs similarity index 97% rename from src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionItemResolver.cs rename to src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs index 3e292cb856a..c346277bf88 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs @@ -5,15 +5,13 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.Razor.Completion; using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Tooltip; using Microsoft.VisualStudio.LanguageServer.Protocol; using Microsoft.VisualStudio.Text.Adornments; -namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion; +namespace Microsoft.CodeAnalysis.Razor.Completion; internal class RazorCompletionItemResolver(IProjectSnapshotManager projectManager) : CompletionItemResolver { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs similarity index 89% rename from src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs rename to src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs index 1c1abe06197..c3e320ef4bd 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs @@ -4,10 +4,8 @@ using System.Collections.Generic; using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.PooledObjects; -using Microsoft.AspNetCore.Razor.Utilities; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; -namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; +namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; internal static partial class IProjectSnapshotManagerExtensions { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.cs similarity index 96% rename from src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.cs rename to src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.cs index 67f55c3cfd3..904b4db711d 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.cs @@ -6,11 +6,9 @@ using System.Linq; using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.Utilities; -using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Logging; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; -namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; +namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; internal static partial class IProjectSnapshotManagerExtensions { diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/MiscFilesHostProject.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/MiscFilesHostProject.cs similarity index 93% rename from src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/MiscFilesHostProject.cs rename to src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/MiscFilesHostProject.cs index cb29d7e08ce..cd81557a688 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/MiscFilesHostProject.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/MiscFilesHostProject.cs @@ -5,11 +5,9 @@ using System.IO; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Utilities; -using Microsoft.CodeAnalysis.Razor; -using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.Extensions.Internal; -namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; +namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; internal sealed record class MiscFilesHostProject : HostProject { diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs index d19a69bedee..2d238011cb6 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs @@ -8,11 +8,11 @@ using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; -using Microsoft.CodeAnalysis.Razor.Workspaces.Test; using Roslyn.Test.Utilities; using Xunit; using Xunit.Abstractions; using static Microsoft.AspNetCore.Razor.Language.CommonMetadata; +using IProjectSnapshotManagerExtensions = Microsoft.CodeAnalysis.Razor.Workspaces.Test.IProjectSnapshotManagerExtensions; namespace Microsoft.CodeAnalysis.Razor.Tooltip; @@ -22,7 +22,7 @@ public class ProjectAvailabilityTests(ITestOutputHelper testOutput) : ToolingTes public async Task GetProjectAvailabilityText_NoProjects_ReturnsNull() { var projectManager = CreateProjectSnapshotManager(); - var solutionQueryOperations = projectManager.GetQueryOperations(); + var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync("file.razor", "MyTagHelper", DisposalToken); @@ -60,7 +60,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = projectManager.GetQueryOperations(); + var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, tagHelperTypeName, DisposalToken); @@ -109,7 +109,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject2.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = projectManager.GetQueryOperations(); + var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, tagHelperTypeName, DisposalToken); @@ -157,7 +157,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject2.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = projectManager.GetQueryOperations(); + var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, tagHelperTypeName, DisposalToken); @@ -201,7 +201,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject2.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = projectManager.GetQueryOperations(); + var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, "MyTagHelper", DisposalToken); From c465bfb04d576de70f5682fc1220d9bb30f03bbb Mon Sep 17 00:00:00 2001 From: "Alex Gavrilov (DEV PROD)" Date: Fri, 8 Nov 2024 14:34:00 -0800 Subject: [PATCH 2/4] Undo move of IProjectSnapshotManagerExtensions and MiscFilesHostProject per PR feedback --- ...rojectSnapshotManagerExtensions.SolutionQueryOperations.cs | 3 ++- .../ProjectSystem/IProjectSnapshotManagerExtensions.cs | 4 +++- .../ProjectSystem/MiscFilesHostProject.cs | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) rename src/Razor/src/{Microsoft.CodeAnalysis.Razor.Workspaces => Microsoft.AspNetCore.Razor.LanguageServer}/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs (92%) rename src/Razor/src/{Microsoft.CodeAnalysis.Razor.Workspaces => Microsoft.AspNetCore.Razor.LanguageServer}/ProjectSystem/IProjectSnapshotManagerExtensions.cs (96%) rename src/Razor/src/{Microsoft.CodeAnalysis.Razor.Workspaces => Microsoft.AspNetCore.Razor.LanguageServer}/ProjectSystem/MiscFilesHostProject.cs (93%) diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs similarity index 92% rename from src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs index c3e320ef4bd..49a330725de 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs @@ -4,8 +4,9 @@ using System.Collections.Generic; using System.Collections.Immutable; using Microsoft.AspNetCore.Razor.PooledObjects; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; -namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; +namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; internal static partial class IProjectSnapshotManagerExtensions { diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.cs similarity index 96% rename from src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.cs index 904b4db711d..67f55c3cfd3 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/IProjectSnapshotManagerExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.cs @@ -6,9 +6,11 @@ using System.Linq; using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.AspNetCore.Razor.Utilities; +using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; -namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; +namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; internal static partial class IProjectSnapshotManagerExtensions { diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/MiscFilesHostProject.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/MiscFilesHostProject.cs similarity index 93% rename from src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/MiscFilesHostProject.cs rename to src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/MiscFilesHostProject.cs index cd81557a688..cb29d7e08ce 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/MiscFilesHostProject.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/MiscFilesHostProject.cs @@ -5,9 +5,11 @@ using System.IO; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Utilities; +using Microsoft.CodeAnalysis.Razor; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.Extensions.Internal; -namespace Microsoft.CodeAnalysis.Razor.ProjectSystem; +namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; internal sealed record class MiscFilesHostProject : HostProject { From ced3320c6f5cdba4f20e297a30506d8753306b9e Mon Sep 17 00:00:00 2001 From: "Alex Gavrilov (DEV PROD)" Date: Mon, 11 Nov 2024 00:44:30 -0800 Subject: [PATCH 3/4] Undo unnecessary changes in tests --- .../Tooltip/ProjectAvailabilityTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs index 2d238011cb6..d19a69bedee 100644 --- a/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs +++ b/src/Razor/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/Tooltip/ProjectAvailabilityTests.cs @@ -8,11 +8,11 @@ using Microsoft.AspNetCore.Razor.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common; using Microsoft.CodeAnalysis.Razor.ProjectSystem; +using Microsoft.CodeAnalysis.Razor.Workspaces.Test; using Roslyn.Test.Utilities; using Xunit; using Xunit.Abstractions; using static Microsoft.AspNetCore.Razor.Language.CommonMetadata; -using IProjectSnapshotManagerExtensions = Microsoft.CodeAnalysis.Razor.Workspaces.Test.IProjectSnapshotManagerExtensions; namespace Microsoft.CodeAnalysis.Razor.Tooltip; @@ -22,7 +22,7 @@ public class ProjectAvailabilityTests(ITestOutputHelper testOutput) : ToolingTes public async Task GetProjectAvailabilityText_NoProjects_ReturnsNull() { var projectManager = CreateProjectSnapshotManager(); - var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); + var solutionQueryOperations = projectManager.GetQueryOperations(); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync("file.razor", "MyTagHelper", DisposalToken); @@ -60,7 +60,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); + var solutionQueryOperations = projectManager.GetQueryOperations(); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, tagHelperTypeName, DisposalToken); @@ -109,7 +109,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject2.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); + var solutionQueryOperations = projectManager.GetQueryOperations(); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, tagHelperTypeName, DisposalToken); @@ -157,7 +157,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject2.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); + var solutionQueryOperations = projectManager.GetQueryOperations(); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, tagHelperTypeName, DisposalToken); @@ -201,7 +201,7 @@ await projectManager.UpdateAsync(updater => updater.DocumentAdded(hostProject2.Key, hostDocument, TestMocks.CreateTextLoader(hostDocument.FilePath, text: "")); }); - var solutionQueryOperations = IProjectSnapshotManagerExtensions.GetQueryOperations(projectManager); + var solutionQueryOperations = projectManager.GetQueryOperations(); var availability = await solutionQueryOperations.GetProjectAvailabilityTextAsync(hostDocument.FilePath, "MyTagHelper", DisposalToken); From bf7559e169208e991a9c3ebf55e5091e51491b31 Mon Sep 17 00:00:00 2001 From: "Alex Gavrilov (DEV PROD)" Date: Mon, 11 Nov 2024 01:06:20 -0800 Subject: [PATCH 4/4] Refactor the code to remove usage of IProjectSnapshotManager --- .../DelegatedCompletionItemResolver.cs | 1 + .../RazorCompletionResolveEndpoint.cs | 8 ++- .../AggregateCompletionItemResolver.cs | 4 +- .../Completion/CompletionItemResolver.cs | 4 +- .../Completion/RazorCompletionItemResolver.cs | 9 ++-- ...legatedCompletionItemResolverTest.NetFx.cs | 15 +++--- .../RazorCompletionItemResolverTest.cs | 49 ++++++++++--------- .../RazorCompletionResolveEndpointTest.cs | 8 ++- 8 files changed, 58 insertions(+), 40 deletions(-) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/Delegation/DelegatedCompletionItemResolver.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/Delegation/DelegatedCompletionItemResolver.cs index bacfb7e3969..6616378669b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/Delegation/DelegatedCompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/Delegation/DelegatedCompletionItemResolver.cs @@ -32,6 +32,7 @@ internal class DelegatedCompletionItemResolver( VSInternalCompletionList containingCompletionList, object? originalRequestContext, VSInternalClientCapabilities? clientCapabilities, + ISolutionQueryOperations solutionQueryOperations, CancellationToken cancellationToken) { if (originalRequestContext is not DelegatedCompletionResolutionContext resolutionContext) diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionResolveEndpoint.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionResolveEndpoint.cs index 41274aae245..fcf584e8ab8 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionResolveEndpoint.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionResolveEndpoint.cs @@ -5,7 +5,9 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; +using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; using Microsoft.CodeAnalysis.Razor.Completion; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LanguageServer.Protocol; namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion; @@ -17,14 +19,17 @@ internal class RazorCompletionResolveEndpoint { private readonly AggregateCompletionItemResolver _completionItemResolver; private readonly CompletionListCache _completionListCache; + private readonly IProjectSnapshotManager _projectSnapshotManager; private VSInternalClientCapabilities? _clientCapabilities; public RazorCompletionResolveEndpoint( AggregateCompletionItemResolver completionItemResolver, - CompletionListCache completionListCache) + CompletionListCache completionListCache, + IProjectSnapshotManager projectSnapshotManager) { _completionItemResolver = completionItemResolver; _completionListCache = completionListCache; + _projectSnapshotManager = projectSnapshotManager; } public bool MutatesSolutionState => false; @@ -74,6 +79,7 @@ public async Task HandleRequestAsync(VSInternalComplet containingCompletionList, originalRequestContext, _clientCapabilities, + _projectSnapshotManager.GetQueryOperations(), cancellationToken).ConfigureAwait(false); resolvedCompletionItem ??= completionItem; diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs index a0a9c54a53b..27803a824dc 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/AggregateCompletionItemResolver.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LanguageServer.Protocol; namespace Microsoft.CodeAnalysis.Razor.Completion; @@ -29,6 +30,7 @@ public AggregateCompletionItemResolver(IEnumerable compl VSInternalCompletionList containingCompletionList, object? originalRequestContext, VSInternalClientCapabilities? clientCapabilities, + ISolutionQueryOperations solutionQueryOperations, CancellationToken cancellationToken) { using var completionItemResolverTasks = new PooledArrayBuilder>(_completionItemResolvers.Count); @@ -37,7 +39,7 @@ public AggregateCompletionItemResolver(IEnumerable compl { try { - var task = completionItemResolver.ResolveAsync(item, containingCompletionList, originalRequestContext, clientCapabilities, cancellationToken); + var task = completionItemResolver.ResolveAsync(item, containingCompletionList, originalRequestContext, clientCapabilities, solutionQueryOperations, cancellationToken); completionItemResolverTasks.Add(task); } catch (Exception ex) when (ex is not TaskCanceledException) diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs index 7d43af97581..73a82f1eefa 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/CompletionItemResolver.cs @@ -3,6 +3,7 @@ using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LanguageServer.Protocol; namespace Microsoft.CodeAnalysis.Razor.Completion; @@ -11,8 +12,9 @@ internal abstract class CompletionItemResolver { public abstract Task ResolveAsync( VSInternalCompletionItem item, - VSInternalCompletionList containingCompletionlist, + VSInternalCompletionList containingCompletionList, object? originalRequestContext, VSInternalClientCapabilities? clientCapabilities, + ISolutionQueryOperations solutionQueryOperations, CancellationToken cancellationToken); } diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs index c346277bf88..2592cf0554e 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItemResolver.cs @@ -13,15 +13,14 @@ namespace Microsoft.CodeAnalysis.Razor.Completion; -internal class RazorCompletionItemResolver(IProjectSnapshotManager projectManager) : CompletionItemResolver +internal class RazorCompletionItemResolver : CompletionItemResolver { - private readonly IProjectSnapshotManager _projectManager = projectManager; - public override async Task ResolveAsync( VSInternalCompletionItem completionItem, VSInternalCompletionList containingCompletionList, object? originalRequestContext, VSInternalClientCapabilities? clientCapabilities, + ISolutionQueryOperations solutionQueryOperations, CancellationToken cancellationToken) { if (originalRequestContext is not RazorCompletionResolveContext razorCompletionResolveContext) @@ -120,13 +119,13 @@ internal class RazorCompletionItemResolver(IProjectSnapshotManager projectManage if (useDescriptionProperty) { tagHelperClassifiedTextTooltip = await ClassifiedTagHelperTooltipFactory - .TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, _projectManager.GetQueryOperations(), cancellationToken) + .TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, solutionQueryOperations, cancellationToken) .ConfigureAwait(false); } else { tagHelperMarkupTooltip = await MarkupTagHelperTooltipFactory - .TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, _projectManager.GetQueryOperations(), documentationKind, cancellationToken) + .TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, solutionQueryOperations, documentationKind, cancellationToken) .ConfigureAwait(false); } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/Delegation/DelegatedCompletionItemResolverTest.NetFx.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/Delegation/DelegatedCompletionItemResolverTest.NetFx.cs index 37a38438c4b..29d961b525b 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/Delegation/DelegatedCompletionItemResolverTest.NetFx.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/Delegation/DelegatedCompletionItemResolverTest.NetFx.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.LanguageServer.Formatting; +using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; using Microsoft.AspNetCore.Razor.LanguageServer.Test; using Microsoft.AspNetCore.Razor.Test.Common.LanguageServer; using Microsoft.CodeAnalysis.Razor.Completion; @@ -34,6 +35,7 @@ public class DelegatedCompletionItemResolverTest : LanguageServerTestBase private readonly IDocumentContextFactory _documentContextFactory; private readonly AsyncLazy _formattingService; private readonly RazorCompletionOptions _defaultRazorCompletionOptions; + private readonly ISolutionQueryOperations _solutionQueryOperations; public DelegatedCompletionItemResolverTest(ITestOutputHelper testOutput) : base(testOutput) @@ -77,6 +79,7 @@ public DelegatedCompletionItemResolverTest(ITestOutputHelper testOutput) SnippetsSupported: true, AutoInsertAttributeQuotes: true, CommitElementsWithSpace: true); + _solutionQueryOperations = CreateProjectSnapshotManager().GetQueryOperations(); } [Fact] @@ -92,7 +95,7 @@ public async Task ResolveAsync_CanNotFindCompletionItem_Noops() // Act var resolvedItem = await resolver.ResolveAsync( - item, notContainingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken); + item, notContainingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken); // Assert Assert.Null(resolvedItem); @@ -111,7 +114,7 @@ public async Task ResolveAsync_UnknownRequestContext_Noops() // Act var resolvedItem = await resolver.ResolveAsync( - item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken); + item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken); // Assert Assert.Null(resolvedItem); @@ -134,7 +137,7 @@ public async Task ResolveAsync_UsesItemsData() // Act await resolver.ResolveAsync( - item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken); + item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken); // Assert Assert.Same(expectedData, server.DelegatedParams.CompletionItem.Data); @@ -153,7 +156,7 @@ public async Task ResolveAsync_InheritsOriginalCompletionListData() var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams, expectedData); // Act - await resolver.ResolveAsync(item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken); + await resolver.ResolveAsync(item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken); // Assert Assert.Same(expectedData, server.DelegatedParams.CompletionItem.Data); @@ -217,7 +220,7 @@ public async Task ResolveAsync_Html_Resolves() // Act var resolvedItem = await resolver.ResolveAsync( - item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken); + item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken); // Assert Assert.Same(_htmlCompletionParams.Identifier, server.DelegatedParams.Identifier); @@ -247,7 +250,7 @@ private async Task ResolveCompletionItemAsync(string c } var resolvedItem = await resolver.ResolveAsync( - item, containingCompletionList, originalRequestContext, _clientCapabilities, cancellationToken); + item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, cancellationToken); return resolvedItem; } diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionItemResolverTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionItemResolverTest.cs index 91e538e628f..4b8f1198e90 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionItemResolverTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionItemResolverTest.cs @@ -7,6 +7,7 @@ using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem; using Microsoft.AspNetCore.Razor.Test.Common.LanguageServer; using Microsoft.CodeAnalysis.Razor.Completion; using Microsoft.CodeAnalysis.Razor.ProjectSystem; @@ -19,7 +20,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion; public class RazorCompletionItemResolverTest : LanguageServerTestBase { - private readonly IProjectSnapshotManager _projectManager; + private readonly ISolutionQueryOperations _solutionQueryOperations; private readonly VSInternalCompletionSetting _completionCapability; private readonly VSInternalClientCapabilities _defaultClientCapability; private readonly VSInternalClientCapabilities _vsClientCapability; @@ -29,7 +30,7 @@ public class RazorCompletionItemResolverTest : LanguageServerTestBase public RazorCompletionItemResolverTest(ITestOutputHelper testOutput) : base(testOutput) { - _projectManager = CreateProjectSnapshotManager(); + _solutionQueryOperations = CreateProjectSnapshotManager().GetQueryOperations(); _completionCapability = new VSInternalCompletionSetting() { @@ -66,7 +67,7 @@ public RazorCompletionItemResolverTest(ITestOutputHelper testOutput) public async Task ResolveAsync_DirectiveCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.Directive); razorCompletionItem.SetDirectiveCompletionDescription(new DirectiveCompletionDescription("Test directive")); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -74,7 +75,7 @@ public async Task ResolveAsync_DirectiveCompletion_ReturnsCompletionItemWithDocu // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Documentation); @@ -84,7 +85,7 @@ public async Task ResolveAsync_DirectiveCompletion_ReturnsCompletionItemWithDocu public async Task ResolveAsync_MarkupTransitionCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("@...", "@", RazorCompletionItemKind.MarkupTransition); razorCompletionItem.SetMarkupTransitionCompletionDescription(new MarkupTransitionCompletionDescription("Test description")); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -92,7 +93,7 @@ public async Task ResolveAsync_MarkupTransitionCompletion_ReturnsCompletionItemW // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Documentation); @@ -102,7 +103,7 @@ public async Task ResolveAsync_MarkupTransitionCompletion_ReturnsCompletionItemW public async Task ResolveAsync_DirectiveAttributeCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.DirectiveAttribute); razorCompletionItem.SetAttributeCompletionDescription(_attributeDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -110,7 +111,7 @@ public async Task ResolveAsync_DirectiveAttributeCompletion_ReturnsCompletionIte // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Documentation); @@ -120,7 +121,7 @@ public async Task ResolveAsync_DirectiveAttributeCompletion_ReturnsCompletionIte public async Task ResolveAsync_DirectiveAttributeParameterCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.DirectiveAttributeParameter); razorCompletionItem.SetAttributeCompletionDescription(_attributeDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -128,7 +129,7 @@ public async Task ResolveAsync_DirectiveAttributeParameterCompletion_ReturnsComp // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Documentation); @@ -138,7 +139,7 @@ public async Task ResolveAsync_DirectiveAttributeParameterCompletion_ReturnsComp public async Task ResolveAsync_TagHelperElementCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperElement); razorCompletionItem.SetTagHelperElementDescriptionInfo(_elementDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -146,7 +147,7 @@ public async Task ResolveAsync_TagHelperElementCompletion_ReturnsCompletionItemW // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Documentation); @@ -156,7 +157,7 @@ public async Task ResolveAsync_TagHelperElementCompletion_ReturnsCompletionItemW public async Task ResolveAsync_TagHelperAttribute_ReturnsCompletionItemWithDocumentation() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperAttribute); razorCompletionItem.SetAttributeCompletionDescription(_attributeDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -164,7 +165,7 @@ public async Task ResolveAsync_TagHelperAttribute_ReturnsCompletionItemWithDocum // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Documentation); @@ -174,7 +175,7 @@ public async Task ResolveAsync_TagHelperAttribute_ReturnsCompletionItemWithDocum public async Task ResolveAsync_VS_DirectiveAttributeCompletion_ReturnsCompletionItemWithDescription() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.DirectiveAttribute); razorCompletionItem.SetAttributeCompletionDescription(_attributeDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -182,7 +183,7 @@ public async Task ResolveAsync_VS_DirectiveAttributeCompletion_ReturnsCompletion // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Description); @@ -192,7 +193,7 @@ public async Task ResolveAsync_VS_DirectiveAttributeCompletion_ReturnsCompletion public async Task ResolveAsync_VS_DirectiveAttributeParameterCompletion_ReturnsCompletionItemWithDescription() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.DirectiveAttributeParameter); razorCompletionItem.SetAttributeCompletionDescription(_attributeDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -200,7 +201,7 @@ public async Task ResolveAsync_VS_DirectiveAttributeParameterCompletion_ReturnsC // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Description); @@ -210,7 +211,7 @@ public async Task ResolveAsync_VS_DirectiveAttributeParameterCompletion_ReturnsC public async Task ResolveAsync_VS_TagHelperElementCompletion_ReturnsCompletionItemWithDescription() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperElement); razorCompletionItem.SetTagHelperElementDescriptionInfo(_elementDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -218,7 +219,7 @@ public async Task ResolveAsync_VS_TagHelperElementCompletion_ReturnsCompletionIt // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Description); @@ -228,7 +229,7 @@ public async Task ResolveAsync_VS_TagHelperElementCompletion_ReturnsCompletionIt public async Task ResolveAsync_VS_TagHelperAttribute_ReturnsCompletionItemWithDescription() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperAttribute); razorCompletionItem.SetAttributeCompletionDescription(_attributeDescription); var completionList = CreateLSPCompletionList(razorCompletionItem); @@ -236,7 +237,7 @@ public async Task ResolveAsync_VS_TagHelperAttribute_ReturnsCompletionItemWithDe // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, DisposalToken); + completionItem, completionList, CreateCompletionResolveContext(razorCompletionItem), _vsClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.NotNull(resolvedCompletionItem.Description); @@ -246,13 +247,13 @@ public async Task ResolveAsync_VS_TagHelperAttribute_ReturnsCompletionItemWithDe public async Task ResolveAsync_NonTagHelperCompletion_Noops() { // Arrange - var resolver = new RazorCompletionItemResolver(_projectManager); + var resolver = new RazorCompletionItemResolver(); var completionItem = new VSInternalCompletionItem(); var completionList = new VSInternalCompletionList() { Items = [completionItem] }; // Act var resolvedCompletionItem = await resolver.ResolveAsync( - completionItem, completionList, Array.Empty(), _defaultClientCapability, DisposalToken); + completionItem, completionList, Array.Empty(), _defaultClientCapability, _solutionQueryOperations, DisposalToken); // Assert Assert.Null(resolvedCompletionItem); diff --git a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionResolveEndpointTest.cs b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionResolveEndpointTest.cs index f39565e99ad..a760c6d746a 100644 --- a/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionResolveEndpointTest.cs +++ b/src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionResolveEndpointTest.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Test.Common.LanguageServer; using Microsoft.CodeAnalysis.Razor.Completion; +using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.VisualStudio.LanguageServer.Protocol; using Xunit; using Xunit.Abstractions; @@ -28,8 +29,10 @@ public RazorCompletionResolveEndpointTest(ITestOutputHelper testOutput) _completionListCache = new CompletionListCache(); _endpoint = new RazorCompletionResolveEndpoint( new AggregateCompletionItemResolver( - new[] { new TestCompletionItemResolver() }, LoggerFactory), - _completionListCache); + new[] { new TestCompletionItemResolver() }, + LoggerFactory), + _completionListCache, + CreateProjectSnapshotManager()); _clientCapabilities = new VSInternalClientCapabilities() { TextDocument = new TextDocumentClientCapabilities() @@ -160,6 +163,7 @@ public override Task ResolveAsync( VSInternalCompletionList containingCompletionList, object originalRequestContext, VSInternalClientCapabilities clientCapabilities, + ISolutionQueryOperations solutionQueryOperations, CancellationToken cancellationToken) { var completionSupportedKinds = clientCapabilities?.TextDocument?.Completion?.CompletionItem?.DocumentationFormat;