Skip to content

Commit aeebb01

Browse files
authored
Move completion resolve code to common layer (dotnet#11156)
* Move completion resolve code to common layer * Undo move of IProjectSnapshotManagerExtensions and MiscFilesHostProject per PR feedback * Undo unnecessary changes in tests * Refactor the code to remove usage of IProjectSnapshotManager
1 parent 8a2c71f commit aeebb01

File tree

9 files changed

+61
-46
lines changed

9 files changed

+61
-46
lines changed

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/Delegation/DelegatedCompletionItemResolver.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ internal class DelegatedCompletionItemResolver(
3232
VSInternalCompletionList containingCompletionList,
3333
object? originalRequestContext,
3434
VSInternalClientCapabilities? clientCapabilities,
35+
ISolutionQueryOperations solutionQueryOperations,
3536
CancellationToken cancellationToken)
3637
{
3738
if (originalRequestContext is not DelegatedCompletionResolutionContext resolutionContext)

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Completion/RazorCompletionResolveEndpoint.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
using System.Threading;
66
using System.Threading.Tasks;
77
using Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts;
8+
using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem;
89
using Microsoft.CodeAnalysis.Razor.Completion;
10+
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
911
using Microsoft.VisualStudio.LanguageServer.Protocol;
1012

1113
namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion;
@@ -17,14 +19,17 @@ internal class RazorCompletionResolveEndpoint
1719
{
1820
private readonly AggregateCompletionItemResolver _completionItemResolver;
1921
private readonly CompletionListCache _completionListCache;
22+
private readonly IProjectSnapshotManager _projectSnapshotManager;
2023
private VSInternalClientCapabilities? _clientCapabilities;
2124

2225
public RazorCompletionResolveEndpoint(
2326
AggregateCompletionItemResolver completionItemResolver,
24-
CompletionListCache completionListCache)
27+
CompletionListCache completionListCache,
28+
IProjectSnapshotManager projectSnapshotManager)
2529
{
2630
_completionItemResolver = completionItemResolver;
2731
_completionListCache = completionListCache;
32+
_projectSnapshotManager = projectSnapshotManager;
2833
}
2934

3035
public bool MutatesSolutionState => false;
@@ -74,6 +79,7 @@ public async Task<VSInternalCompletionItem> HandleRequestAsync(VSInternalComplet
7479
containingCompletionList,
7580
originalRequestContext,
7681
_clientCapabilities,
82+
_projectSnapshotManager.GetQueryOperations(),
7783
cancellationToken).ConfigureAwait(false);
7884
resolvedCompletionItem ??= completionItem;
7985

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectSystem/IProjectSnapshotManagerExtensions.SolutionQueryOperations.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using System.Collections.Generic;
55
using System.Collections.Immutable;
66
using Microsoft.AspNetCore.Razor.PooledObjects;
7-
using Microsoft.AspNetCore.Razor.Utilities;
87
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
98

109
namespace Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem;
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
using System.Threading.Tasks;
1010
using Microsoft.AspNetCore.Razor.PooledObjects;
1111
using Microsoft.CodeAnalysis.Razor.Logging;
12+
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
1213
using Microsoft.VisualStudio.LanguageServer.Protocol;
1314

14-
namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion;
15+
namespace Microsoft.CodeAnalysis.Razor.Completion;
1516

1617
internal class AggregateCompletionItemResolver
1718
{
@@ -29,6 +30,7 @@ public AggregateCompletionItemResolver(IEnumerable<CompletionItemResolver> compl
2930
VSInternalCompletionList containingCompletionList,
3031
object? originalRequestContext,
3132
VSInternalClientCapabilities? clientCapabilities,
33+
ISolutionQueryOperations solutionQueryOperations,
3234
CancellationToken cancellationToken)
3335
{
3436
using var completionItemResolverTasks = new PooledArrayBuilder<Task<VSInternalCompletionItem?>>(_completionItemResolvers.Count);
@@ -37,7 +39,7 @@ public AggregateCompletionItemResolver(IEnumerable<CompletionItemResolver> compl
3739
{
3840
try
3941
{
40-
var task = completionItemResolver.ResolveAsync(item, containingCompletionList, originalRequestContext, clientCapabilities, cancellationToken);
42+
var task = completionItemResolver.ResolveAsync(item, containingCompletionList, originalRequestContext, clientCapabilities, solutionQueryOperations, cancellationToken);
4143
completionItemResolverTasks.Add(task);
4244
}
4345
catch (Exception ex) when (ex is not TaskCanceledException)
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@
33

44
using System.Threading;
55
using System.Threading.Tasks;
6+
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
67
using Microsoft.VisualStudio.LanguageServer.Protocol;
78

8-
namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion;
9+
namespace Microsoft.CodeAnalysis.Razor.Completion;
910

1011
internal abstract class CompletionItemResolver
1112
{
1213
public abstract Task<VSInternalCompletionItem?> ResolveAsync(
1314
VSInternalCompletionItem item,
14-
VSInternalCompletionList containingCompletionlist,
15+
VSInternalCompletionList containingCompletionList,
1516
object? originalRequestContext,
1617
VSInternalClientCapabilities? clientCapabilities,
18+
ISolutionQueryOperations solutionQueryOperations,
1719
CancellationToken cancellationToken);
1820
}
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,22 @@
55
using System.Linq;
66
using System.Threading;
77
using System.Threading.Tasks;
8-
using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem;
98
using Microsoft.CodeAnalysis;
10-
using Microsoft.CodeAnalysis.Razor.Completion;
119
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
1210
using Microsoft.CodeAnalysis.Razor.Tooltip;
1311
using Microsoft.VisualStudio.LanguageServer.Protocol;
1412
using Microsoft.VisualStudio.Text.Adornments;
1513

16-
namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion;
14+
namespace Microsoft.CodeAnalysis.Razor.Completion;
1715

18-
internal class RazorCompletionItemResolver(IProjectSnapshotManager projectManager) : CompletionItemResolver
16+
internal class RazorCompletionItemResolver : CompletionItemResolver
1917
{
20-
private readonly IProjectSnapshotManager _projectManager = projectManager;
21-
2218
public override async Task<VSInternalCompletionItem?> ResolveAsync(
2319
VSInternalCompletionItem completionItem,
2420
VSInternalCompletionList containingCompletionList,
2521
object? originalRequestContext,
2622
VSInternalClientCapabilities? clientCapabilities,
23+
ISolutionQueryOperations solutionQueryOperations,
2724
CancellationToken cancellationToken)
2825
{
2926
if (originalRequestContext is not RazorCompletionResolveContext razorCompletionResolveContext)
@@ -122,13 +119,13 @@ internal class RazorCompletionItemResolver(IProjectSnapshotManager projectManage
122119
if (useDescriptionProperty)
123120
{
124121
tagHelperClassifiedTextTooltip = await ClassifiedTagHelperTooltipFactory
125-
.TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, _projectManager.GetQueryOperations(), cancellationToken)
122+
.TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, solutionQueryOperations, cancellationToken)
126123
.ConfigureAwait(false);
127124
}
128125
else
129126
{
130127
tagHelperMarkupTooltip = await MarkupTagHelperTooltipFactory
131-
.TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, _projectManager.GetQueryOperations(), documentationKind, cancellationToken)
128+
.TryCreateTooltipAsync(razorCompletionResolveContext.FilePath, descriptionInfo, solutionQueryOperations, documentationKind, cancellationToken)
132129
.ConfigureAwait(false);
133130
}
134131

src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/Delegation/DelegatedCompletionItemResolverTest.NetFx.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Threading.Tasks;
1111
using Microsoft.AspNetCore.Razor.Language;
1212
using Microsoft.AspNetCore.Razor.LanguageServer.Formatting;
13+
using Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem;
1314
using Microsoft.AspNetCore.Razor.LanguageServer.Test;
1415
using Microsoft.AspNetCore.Razor.Test.Common.LanguageServer;
1516
using Microsoft.CodeAnalysis.Razor.Completion;
@@ -34,6 +35,7 @@ public class DelegatedCompletionItemResolverTest : LanguageServerTestBase
3435
private readonly IDocumentContextFactory _documentContextFactory;
3536
private readonly AsyncLazy<IRazorFormattingService> _formattingService;
3637
private readonly RazorCompletionOptions _defaultRazorCompletionOptions;
38+
private readonly ISolutionQueryOperations _solutionQueryOperations;
3739

3840
public DelegatedCompletionItemResolverTest(ITestOutputHelper testOutput)
3941
: base(testOutput)
@@ -77,6 +79,7 @@ public DelegatedCompletionItemResolverTest(ITestOutputHelper testOutput)
7779
SnippetsSupported: true,
7880
AutoInsertAttributeQuotes: true,
7981
CommitElementsWithSpace: true);
82+
_solutionQueryOperations = CreateProjectSnapshotManager().GetQueryOperations();
8083
}
8184

8285
[Fact]
@@ -92,7 +95,7 @@ public async Task ResolveAsync_CanNotFindCompletionItem_Noops()
9295

9396
// Act
9497
var resolvedItem = await resolver.ResolveAsync(
95-
item, notContainingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken);
98+
item, notContainingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken);
9699

97100
// Assert
98101
Assert.Null(resolvedItem);
@@ -111,7 +114,7 @@ public async Task ResolveAsync_UnknownRequestContext_Noops()
111114

112115
// Act
113116
var resolvedItem = await resolver.ResolveAsync(
114-
item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken);
117+
item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken);
115118

116119
// Assert
117120
Assert.Null(resolvedItem);
@@ -134,7 +137,7 @@ public async Task ResolveAsync_UsesItemsData()
134137

135138
// Act
136139
await resolver.ResolveAsync(
137-
item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken);
140+
item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken);
138141

139142
// Assert
140143
Assert.Same(expectedData, server.DelegatedParams.CompletionItem.Data);
@@ -153,7 +156,7 @@ public async Task ResolveAsync_InheritsOriginalCompletionListData()
153156
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams, expectedData);
154157

155158
// Act
156-
await resolver.ResolveAsync(item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken);
159+
await resolver.ResolveAsync(item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken);
157160

158161
// Assert
159162
Assert.Same(expectedData, server.DelegatedParams.CompletionItem.Data);
@@ -217,7 +220,7 @@ public async Task ResolveAsync_Html_Resolves()
217220

218221
// Act
219222
var resolvedItem = await resolver.ResolveAsync(
220-
item, containingCompletionList, originalRequestContext, _clientCapabilities, DisposalToken);
223+
item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, DisposalToken);
221224

222225
// Assert
223226
Assert.Same(_htmlCompletionParams.Identifier, server.DelegatedParams.Identifier);
@@ -247,7 +250,7 @@ private async Task<VSInternalCompletionItem> ResolveCompletionItemAsync(string c
247250
}
248251

249252
var resolvedItem = await resolver.ResolveAsync(
250-
item, containingCompletionList, originalRequestContext, _clientCapabilities, cancellationToken);
253+
item, containingCompletionList, originalRequestContext, _clientCapabilities, _solutionQueryOperations, cancellationToken);
251254

252255
return resolvedItem;
253256
}

0 commit comments

Comments
 (0)