Skip to content

Commit 4357270

Browse files
Don't expose RazorTriggerCharacters set
Rather than directly exposing a set, this change adds instance methods to test for valid Razor triggers.
1 parent 8032e40 commit 4357270

File tree

6 files changed

+27
-28
lines changed

6 files changed

+27
-28
lines changed

src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorCompletionBenchmark.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ public async Task SetupAsync()
4141
var documentMappingService = lspServices.GetRequiredService<IDocumentMappingService>();
4242
var clientConnection = lspServices.GetRequiredService<IClientConnection>();
4343
var completionListCache = lspServices.GetRequiredService<CompletionListCache>();
44-
var completionTriggerAndCommitCharacters = lspServices.GetRequiredService<CompletionTriggerAndCommitCharacters>();
44+
var triggerAndCommitCharacters = lspServices.GetRequiredService<CompletionTriggerAndCommitCharacters>();
4545
var loggerFactory = lspServices.GetRequiredService<ILoggerFactory>();
4646

47-
var delegatedCompletionListProvider = new TestDelegatedCompletionListProvider(documentMappingService, clientConnection, completionListCache, completionTriggerAndCommitCharacters);
48-
var completionListProvider = new CompletionListProvider(razorCompletionListProvider, delegatedCompletionListProvider);
47+
var delegatedCompletionListProvider = new TestDelegatedCompletionListProvider(documentMappingService, clientConnection, completionListCache, triggerAndCommitCharacters);
48+
var completionListProvider = new CompletionListProvider(razorCompletionListProvider, delegatedCompletionListProvider, triggerAndCommitCharacters);
4949
var configurationService = new DefaultRazorConfigurationService(clientConnection, loggerFactory);
5050
var optionsMonitor = new RazorLSPOptionsMonitor(configurationService, RazorLSPOptions.Default);
51-
CompletionEndpoint = new RazorCompletionEndpoint(completionListProvider, completionTriggerAndCommitCharacters, telemetryReporter: null, optionsMonitor);
51+
CompletionEndpoint = new RazorCompletionEndpoint(completionListProvider, triggerAndCommitCharacters, telemetryReporter: null, optionsMonitor);
5252

5353
var clientCapabilities = new VSInternalClientCapabilities
5454
{

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,14 @@
1313

1414
namespace Microsoft.AspNetCore.Razor.LanguageServer.Completion;
1515

16-
internal class CompletionListProvider
16+
internal class CompletionListProvider(
17+
RazorCompletionListProvider razorCompletionListProvider,
18+
DelegatedCompletionListProvider delegatedCompletionListProvider,
19+
CompletionTriggerAndCommitCharacters triggerAndCommitCharacters)
1720
{
18-
private readonly RazorCompletionListProvider _razorCompletionListProvider;
19-
private readonly DelegatedCompletionListProvider _delegatedCompletionListProvider;
20-
21-
public CompletionListProvider(RazorCompletionListProvider razorCompletionListProvider, DelegatedCompletionListProvider delegatedCompletionListProvider)
22-
{
23-
_razorCompletionListProvider = razorCompletionListProvider;
24-
_delegatedCompletionListProvider = delegatedCompletionListProvider;
25-
}
21+
private readonly RazorCompletionListProvider _razorCompletionListProvider = razorCompletionListProvider;
22+
private readonly DelegatedCompletionListProvider _delegatedCompletionListProvider = delegatedCompletionListProvider;
23+
private readonly CompletionTriggerAndCommitCharacters _triggerAndCommitCharacters = triggerAndCommitCharacters;
2624

2725
public async Task<VSInternalCompletionList?> GetCompletionListAsync(
2826
int absoluteIndex,
@@ -51,7 +49,7 @@ public CompletionListProvider(RazorCompletionListProvider razorCompletionListPro
5149
: null;
5250

5351
// Now we get the Razor completion list, using information from the actual language server if necessary
54-
var razorCompletionList = CompletionTriggerAndCommitCharacters.IsValidTrigger(_razorCompletionListProvider.TriggerCharacters, completionContext)
52+
var razorCompletionList = _triggerAndCommitCharacters.IsValidRazorTrigger(completionContext)
5553
? await _razorCompletionListProvider.GetCompletionListAsync(
5654
absoluteIndex,
5755
completionContext,

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal class CompletionTriggerAndCommitCharacters(LanguageServerFeatureOptions
1717
private FrozenSet<string>? _allDelegationTriggerCharacters;
1818
private string[]? _allTriggerCharacters;
1919

20-
public static FrozenSet<string> RazorTriggerCharacters { get; } = new[] { "@", "<", ":", " " }.ToFrozenSet();
20+
private static readonly FrozenSet<string> s_razorTriggerCharacters = new[] { "@", "<", ":", " " }.ToFrozenSet();
2121
/// <summary>
2222
/// Tigger characters that can trigger both Razor and Delegation completion (e.g."@" triggers Razor directives and C#)
2323
/// </summary>
@@ -29,7 +29,7 @@ internal class CompletionTriggerAndCommitCharacters(LanguageServerFeatureOptions
2929
public FrozenSet<string> AllDelegationTriggerCharacters => _allDelegationTriggerCharacters
3030
??= RazorDelegationTriggerCharacters.Union(s_csharpTriggerCharacters).Union(HtmlTriggerCharacters).ToFrozenSet();
3131

32-
public string[] AllTriggerCharacters => _allTriggerCharacters ??= [.. RazorTriggerCharacters.Union(AllDelegationTriggerCharacters)];
32+
public string[] AllTriggerCharacters => _allTriggerCharacters ??= [.. s_razorTriggerCharacters.Union(AllDelegationTriggerCharacters)];
3333

3434
/// <summary>
3535
/// This is the intersection of C# and HTML commit characters.
@@ -47,6 +47,12 @@ completionContext.TriggerCharacter is null ||
4747
public bool IsValidCSharpTrigger(CompletionContext completionContext)
4848
=> IsValidTrigger(s_csharpTriggerCharacters, completionContext);
4949

50+
public bool IsValidRazorTrigger(CompletionContext completionContext)
51+
=> IsValidTrigger(s_razorTriggerCharacters, completionContext);
52+
5053
public bool IsCSharpTriggerCharacter(string ch)
5154
=> s_csharpTriggerCharacters.Contains(ch);
55+
56+
public bool IsRazorTriggerCharacter(string ch)
57+
=> s_razorTriggerCharacters.Contains(ch);
5258
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the MIT license. See License.txt in the project root for license information.
33

44
using System;
5-
using System.Collections.Frozen;
65
using System.Collections.Generic;
76
using System.Collections.Immutable;
87
using System.Diagnostics;
@@ -32,9 +31,6 @@ internal class RazorCompletionListProvider(
3231
Title = SR.ReTrigger_Completions_Title,
3332
};
3433

35-
// virtual for tests
36-
public virtual FrozenSet<string> TriggerCharacters => CompletionTriggerAndCommitCharacters.RazorTriggerCharacters;
37-
3834
// virtual for tests
3935
public virtual async Task<VSInternalCompletionList?> GetCompletionListAsync(
4036
int absoluteIndex,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private async ValueTask<Response> GetCompletionAsync(
134134
}
135135
}
136136

137-
var razorCompletionList = CompletionTriggerAndCommitCharacters.IsValidTrigger(CompletionTriggerAndCommitCharacters.RazorTriggerCharacters, completionContext)
137+
var razorCompletionList = _triggerAndCommitCharacters.IsValidRazorTrigger(completionContext)
138138
? await _razorCompletionListProvider.GetCompletionListAsync(
139139
documentPositionInfo.HostDocumentIndex,
140140
completionContext,

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Threading.Tasks;
1111
using Microsoft.AspNetCore.Razor.LanguageServer.Completion.Delegation;
1212
using Microsoft.AspNetCore.Razor.Test.Common.LanguageServer;
13+
using Microsoft.AspNetCore.Razor.Test.Common.Workspaces;
1314
using Microsoft.CodeAnalysis.Razor.Completion;
1415
using Microsoft.CodeAnalysis.Razor.Logging;
1516
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
@@ -31,25 +32,27 @@ public class CompletionListProviderTest : LanguageServerTestBase
3132
private readonly DocumentContext _documentContext;
3233
private readonly VSInternalClientCapabilities _clientCapabilities;
3334
private readonly RazorCompletionOptions _razorCompletionOptions;
35+
private readonly CompletionTriggerAndCommitCharacters _triggerAndCommitCharacters;
3436

3537
public CompletionListProviderTest(ITestOutputHelper testOutput)
3638
: base(testOutput)
3739
{
3840
_completionList1 = new VSInternalCompletionList() { Items = [] };
3941
_completionList2 = new VSInternalCompletionList() { Items = [] };
40-
_razorCompletionProvider = new TestRazorCompletionListProvider(_completionList1, new[] { SharedTriggerCharacter, }, LoggerFactory);
42+
_razorCompletionProvider = new TestRazorCompletionListProvider(_completionList1, LoggerFactory);
4143
_delegatedCompletionProvider = new TestDelegatedCompletionListProvider(_completionList2, new[] { SharedTriggerCharacter, CompletionList2OnlyTriggerCharacter });
4244
_completionContext = new VSInternalCompletionContext();
4345
_documentContext = TestDocumentContext.Create("C:/path/to/file.cshtml");
4446
_clientCapabilities = new VSInternalClientCapabilities();
4547
_razorCompletionOptions = new RazorCompletionOptions(SnippetsSupported: true, AutoInsertAttributeQuotes: true, CommitElementsWithSpace: true);
48+
_triggerAndCommitCharacters = new(TestLanguageServerFeatureOptions.Instance);
4649
}
4750

4851
[Fact]
4952
public async Task MultipleCompletionLists_Merges()
5053
{
5154
// Arrange
52-
var provider = new CompletionListProvider(_razorCompletionProvider, _delegatedCompletionProvider);
55+
var provider = new CompletionListProvider(_razorCompletionProvider, _delegatedCompletionProvider, _triggerAndCommitCharacters);
5356

5457
// Act
5558
var completionList = await provider.GetCompletionListAsync(
@@ -64,7 +67,7 @@ public async Task MultipleCompletionLists_Merges()
6467
public async Task MultipleCompletionLists_DifferentCommitCharacters_OnlyCallsApplicable()
6568
{
6669
// Arrange
67-
var provider = new CompletionListProvider(_razorCompletionProvider, _delegatedCompletionProvider);
70+
var provider = new CompletionListProvider(_razorCompletionProvider, _delegatedCompletionProvider, _triggerAndCommitCharacters);
6871
_completionContext.TriggerKind = CompletionTriggerKind.TriggerCharacter;
6972
_completionContext.TriggerCharacter = CompletionList2OnlyTriggerCharacter;
7073

@@ -108,16 +111,12 @@ private class TestRazorCompletionListProvider : RazorCompletionListProvider
108111

109112
public TestRazorCompletionListProvider(
110113
VSInternalCompletionList completionList,
111-
IEnumerable<string> triggerCharacters,
112114
ILoggerFactory loggerFactory)
113115
: base(completionFactsService: null, completionListCache: null, loggerFactory)
114116
{
115117
_completionList = completionList;
116-
TriggerCharacters = triggerCharacters.ToFrozenSet();
117118
}
118119

119-
public override FrozenSet<string> TriggerCharacters { get; }
120-
121120
public override Task<VSInternalCompletionList> GetCompletionListAsync(
122121
int absoluteIndex,
123122
VSInternalCompletionContext completionContext,

0 commit comments

Comments
 (0)