Skip to content

Commit 4746f4e

Browse files
authored
Better handle parameter attribute directive completion (#12473)
Modifies completion in several ways: Makes ':' no longer a commit character. This being a commit character was causing difficulties as it and '=' require fundamentally different completion commit behavior, and LSP doesn't support that for a single completion item. Makes parameter completions show up in attribute name contexts too. This is nice for discoverability. Fixes: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/2607948
1 parent ae54aca commit 4746f4e

File tree

12 files changed

+583
-537
lines changed

12 files changed

+583
-537
lines changed

src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Extensions/IServiceCollectionExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ public static void AddCompletionServices(this IServiceCollection services)
8989
services.AddSingleton<IRazorCompletionFactsService, LspRazorCompletionFactsService>();
9090
services.AddSingleton<IRazorCompletionItemProvider, DirectiveCompletionItemProvider>();
9191
services.AddSingleton<IRazorCompletionItemProvider, DirectiveAttributeCompletionItemProvider>();
92-
services.AddSingleton<IRazorCompletionItemProvider, DirectiveAttributeParameterCompletionItemProvider>();
9392
services.AddSingleton<IRazorCompletionItemProvider, DirectiveAttributeEventParameterCompletionItemProvider>();
9493
services.AddSingleton<IRazorCompletionItemProvider, DirectiveAttributeTransitionCompletionItemProvider>();
9594
services.AddSingleton<IRazorCompletionItemProvider, MarkupTransitionCompletionItemProvider>();
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System.Collections.Immutable;
5+
6+
namespace Microsoft.CodeAnalysis.Razor.Completion;
7+
8+
internal record DirectiveAttributeCompletionContext
9+
{
10+
public required string SelectedAttributeName { get; init; }
11+
public string? SelectedParameterName { get; init; }
12+
public ImmutableArray<string> ExistingAttributes { get; init => field = value.NullToEmpty(); } = [];
13+
public bool UseSnippets { get; init; } = true;
14+
public bool InAttributeName { get; init; } = true;
15+
public bool InParameterName { get; init; }
16+
public RazorCompletionOptions Options { get; init; }
17+
}

src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/DirectiveAttributeCompletionItemProvider.cs

Lines changed: 276 additions & 164 deletions
Large diffs are not rendered by default.

src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/DirectiveAttributeParameterCompletionItemProvider.cs

Lines changed: 0 additions & 127 deletions
This file was deleted.

src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/RazorCompletionItem.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ public static RazorCompletionItem CreateDirectiveAttribute(
7474

7575
public static RazorCompletionItem CreateDirectiveAttributeParameter(
7676
string displayText, string insertText,
77-
AggregateBoundAttributeDescription descriptionInfo)
78-
=> new(RazorCompletionItemKind.DirectiveAttributeParameter, displayText, insertText, sortText: null, descriptionInfo, commitCharacters: [], isSnippet: false);
77+
AggregateBoundAttributeDescription descriptionInfo,
78+
ImmutableArray<RazorCommitCharacter> commitCharacters,
79+
bool isSnippet)
80+
=> new(RazorCompletionItemKind.DirectiveAttributeParameter, displayText, insertText, sortText: null, descriptionInfo, commitCharacters, isSnippet);
7981

8082
public static RazorCompletionItem CreateMarkupTransition(
8183
string displayText, string insertText,

src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Completion/OOPRazorCompletionItemProviders.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ internal sealed class OOPDirectiveCompletionItemProvider : DirectiveCompletionIt
1313
[Export(typeof(IRazorCompletionItemProvider)), Shared]
1414
internal sealed class OOPDirectiveAttributeCompletionItemProvider : DirectiveAttributeCompletionItemProvider;
1515

16-
[Export(typeof(IRazorCompletionItemProvider)), Shared]
17-
internal sealed class OOPDirectiveAttributeParameterCompletionItemProvider : DirectiveAttributeParameterCompletionItemProvider;
18-
1916
[Export(typeof(IRazorCompletionItemProvider)), Shared]
2017
internal sealed class OOPDirectiveAttributeEventParameterCompletionItemProvider : DirectiveAttributeEventParameterCompletionItemProvider;
2118

src/Razor/src/Microsoft.VisualStudio.LegacyEditor.Razor/Completion/LegacyRazorCompletionFactsService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ internal sealed class LegacyRazorCompletionFactsService : AbstractRazorCompletio
1313
private static readonly ImmutableArray<IRazorCompletionItemProvider> s_providers =
1414
[
1515
new DirectiveAttributeCompletionItemProvider(),
16-
new DirectiveAttributeParameterCompletionItemProvider(),
1716
new DirectiveCompletionItemProvider()
1817
];
1918

src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/RazorCompletionItemResolverTest.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,9 @@ public async Task ResolveAsync_DirectiveAttributeParameterCompletion_ReturnsComp
145145
var razorCompletionItem = RazorCompletionItem.CreateDirectiveAttributeParameter(
146146
displayText: "TestItem",
147147
insertText: "TestItem",
148-
_attributeDescription);
148+
_attributeDescription,
149+
commitCharacters: [],
150+
isSnippet: false);
149151
var completionList = CreateLSPCompletionList(razorCompletionItem);
150152
var completionItem = (VSInternalCompletionItem)completionList.Items.Single();
151153

@@ -235,7 +237,9 @@ public async Task ResolveAsync_VS_DirectiveAttributeParameterCompletion_ReturnsC
235237
var razorCompletionItem = RazorCompletionItem.CreateDirectiveAttributeParameter(
236238
displayText: "TestItem",
237239
insertText: "TestItem",
238-
_attributeDescription);
240+
_attributeDescription,
241+
commitCharacters: [],
242+
isSnippet: false);
239243
var completionList = CreateLSPCompletionList(razorCompletionItem);
240244
var completionItem = (VSInternalCompletionItem)completionList.Items.Single();
241245

0 commit comments

Comments
 (0)