Skip to content

Commit cb31a56

Browse files
Don't expose AllDelegationTriggerCharacters set
Rather than directly exposing a set, this change adds instance methods to test for valid delegation triggers. Note this change requires a bit of a test change, but I think it's an improvement since the original test was verifying a Razor scenario that could never happen.
1 parent c083ff0 commit cb31a56

File tree

4 files changed

+13
-14
lines changed

4 files changed

+13
-14
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ internal class CompletionListProvider(
3232
CancellationToken cancellationToken)
3333
{
3434
// First we delegate to get completion items from the individual language server
35-
var delegatedCompletionList = CompletionTriggerAndCommitCharacters.IsValidTrigger(_delegatedCompletionListProvider.TriggerCharacters, completionContext)
35+
var delegatedCompletionList = _triggerAndCommitCharacters.IsValidDelegationTrigger(completionContext)
3636
? await _delegatedCompletionListProvider.GetCompletionListAsync(
3737
absoluteIndex,
3838
completionContext,

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ public DelegatedCompletionListProvider(
4141
_triggerAndCommitCharacters = completionTriggerAndCommitCharacters;
4242
}
4343

44-
// virtual for tests
45-
public virtual FrozenSet<string> TriggerCharacters => _triggerAndCommitCharacters.AllDelegationTriggerCharacters;
46-
4744
// virtual for tests
4845
public virtual async Task<VSInternalCompletionList?> GetCompletionListAsync(
4946
int absoluteIndex,

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ internal class CompletionTriggerAndCommitCharacters(LanguageServerFeatureOptions
2828
public FrozenSet<string> HtmlTriggerCharacters =>
2929
_languageServerFeatureOptions.UseVsCodeCompletionTriggerCharacters ? s_vsCodeHtmlTriggerCharacters : s_vsHtmlTriggerCharacters;
3030

31-
public FrozenSet<string> AllDelegationTriggerCharacters => _allDelegationTriggerCharacters
31+
private FrozenSet<string> AllDelegationTriggerCharacters => _allDelegationTriggerCharacters
3232
??= s_razorDelegationTriggerCharacters.Union(s_csharpTriggerCharacters).Union(HtmlTriggerCharacters).ToFrozenSet();
3333

3434
public string[] AllTriggerCharacters => _allTriggerCharacters ??= [.. s_razorTriggerCharacters.Union(AllDelegationTriggerCharacters)];
@@ -49,12 +49,18 @@ completionContext.TriggerCharacter is null ||
4949
public bool IsValidCSharpTrigger(CompletionContext completionContext)
5050
=> IsValidTrigger(s_csharpTriggerCharacters, completionContext);
5151

52+
public bool IsValidDelegationTrigger(CompletionContext completionContext)
53+
=> IsValidTrigger(AllDelegationTriggerCharacters, completionContext);
54+
5255
public bool IsValidRazorTrigger(CompletionContext completionContext)
5356
=> IsValidTrigger(s_razorTriggerCharacters, completionContext);
5457

5558
public bool IsCSharpTriggerCharacter(string ch)
5659
=> s_csharpTriggerCharacters.Contains(ch);
5760

61+
public bool IsDelegationTriggerCharacter(string ch)
62+
=> AllDelegationTriggerCharacters.Contains(ch);
63+
5864
public bool IsRazorTriggerCharacter(string ch)
5965
=> s_razorTriggerCharacters.Contains(ch);
6066

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#nullable disable
55

66
using System;
7-
using System.Collections.Frozen;
87
using System.Collections.Generic;
98
using System.Threading;
109
using System.Threading.Tasks;
@@ -22,8 +21,6 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion;
2221

2322
public class CompletionListProviderTest : LanguageServerTestBase
2423
{
25-
private const string SharedTriggerCharacter = "@";
26-
private const string CompletionList2OnlyTriggerCharacter = "<";
2724
private readonly VSInternalCompletionList _completionList1;
2825
private readonly VSInternalCompletionList _completionList2;
2926
private readonly RazorCompletionListProvider _razorCompletionProvider;
@@ -40,7 +37,7 @@ public CompletionListProviderTest(ITestOutputHelper testOutput)
4037
_completionList1 = new VSInternalCompletionList() { Items = [] };
4138
_completionList2 = new VSInternalCompletionList() { Items = [] };
4239
_razorCompletionProvider = new TestRazorCompletionListProvider(_completionList1, LoggerFactory);
43-
_delegatedCompletionProvider = new TestDelegatedCompletionListProvider(_completionList2, new[] { SharedTriggerCharacter, CompletionList2OnlyTriggerCharacter });
40+
_delegatedCompletionProvider = new TestDelegatedCompletionListProvider(_completionList2);
4441
_completionContext = new VSInternalCompletionContext();
4542
_documentContext = TestDocumentContext.Create("C:/path/to/file.cshtml");
4643
_clientCapabilities = new VSInternalClientCapabilities();
@@ -69,7 +66,9 @@ public async Task MultipleCompletionLists_DifferentCommitCharacters_OnlyCallsApp
6966
// Arrange
7067
var provider = new CompletionListProvider(_razorCompletionProvider, _delegatedCompletionProvider, _triggerAndCommitCharacters);
7168
_completionContext.TriggerKind = CompletionTriggerKind.TriggerCharacter;
72-
_completionContext.TriggerCharacter = CompletionList2OnlyTriggerCharacter;
69+
70+
// '{' is a commit character for the delegated completion provider but not the Razor completion provider.
71+
_completionContext.TriggerCharacter = "{";
7372

7473
// Act
7574
var completionList = await provider.GetCompletionListAsync(
@@ -83,15 +82,12 @@ private class TestDelegatedCompletionListProvider : DelegatedCompletionListProvi
8382
{
8483
private readonly VSInternalCompletionList _completionList;
8584

86-
public TestDelegatedCompletionListProvider(VSInternalCompletionList completionList, IEnumerable<string> triggerCharacters)
85+
public TestDelegatedCompletionListProvider(VSInternalCompletionList completionList)
8786
: base(null, null, null, null)
8887
{
8988
_completionList = completionList;
90-
TriggerCharacters = triggerCharacters.ToFrozenSet();
9189
}
9290

93-
public override FrozenSet<string> TriggerCharacters { get; }
94-
9591
public override Task<VSInternalCompletionList> GetCompletionListAsync(
9692
int absoluteIndex,
9793
VSInternalCompletionContext completionContext,

0 commit comments

Comments
 (0)