Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ internal class DelegatedCompletionListProvider(
? DelegatedCompletionHelper.RewriteCSharpResponse(delegatedResponse, absoluteIndex, codeDocument, positionInfo.Position, razorCompletionOptions)
: DelegatedCompletionHelper.RewriteHtmlResponse(delegatedResponse, razorCompletionOptions);

var resolutionContext = new DelegatedCompletionResolutionContext(identifier, positionInfo.LanguageKind, rewrittenResponse.Data ?? rewrittenResponse.ItemDefaults?.Data);
var resolutionContext = new DelegatedCompletionResolutionContext(identifier, positionInfo.LanguageKind, rewrittenResponse.Data ?? rewrittenResponse.ItemDefaults?.Data, provisionalTextEdit);
var resultId = _completionListCache.Add(rewrittenResponse, resolutionContext);
rewrittenResponse.SetResultId(resultId, clientCapabilities);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ public ImmutableArray<Registration> GetRegistrations(VSInternalClientCapabilitie
var rewrittenResponse = DelegatedCompletionHelper.RewriteHtmlResponse(result, razorCompletionOptions);

var razorDocumentIdentifier = new TextDocumentIdentifierAndVersion(completionParams.TextDocument, Version: 0);
var resolutionContext = new DelegatedCompletionResolutionContext(razorDocumentIdentifier, RazorLanguageKind.Html, rewrittenResponse.Data ?? rewrittenResponse.ItemDefaults?.Data);
var resolutionContext = new DelegatedCompletionResolutionContext(razorDocumentIdentifier, RazorLanguageKind.Html, rewrittenResponse.Data ?? rewrittenResponse.ItemDefaults?.Data, ProvisionalTextEdit: null);
var resultId = _completionListCache.Add(rewrittenResponse, resolutionContext);
rewrittenResponse.SetResultId(resultId, _clientCapabilitiesService.ClientCapabilities);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ internal record DelegatedMapCodeParams(
internal record DelegatedCompletionResolutionContext(
[property: JsonPropertyName("identifier")] TextDocumentIdentifierAndVersion Identifier,
[property: JsonPropertyName("projectedKind")] RazorLanguageKind ProjectedKind,
[property: JsonPropertyName("originalCompletionListData")] object? OriginalCompletionListData) : ICompletionResolveContext;
[property: JsonPropertyName("originalCompletionListData")] object? OriginalCompletionListData,
[property: JsonPropertyName("provisionalTextEdit")] TextEdit? ProvisionalTextEdit) : ICompletionResolveContext;

internal record DelegatedCompletionItemResolveParams(
[property: JsonPropertyName("identifier")] TextDocumentIdentifierAndVersion Identifier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ private async ValueTask<Response> GetCompletionAsync(
completionContext,
razorCompletionOptions,
correlationId,
positionInfo.ProvisionalTextEdit,
cancellationToken)
.ConfigureAwait(false);

Expand Down Expand Up @@ -191,6 +192,7 @@ private async ValueTask<Response> GetCompletionAsync(
CompletionContext completionContext,
RazorCompletionOptions razorCompletionOptions,
Guid correlationId,
TextEdit? provisionalTextEdit,
CancellationToken cancellationToken)
{
var clientCapabilities = _clientCapabilitiesService.ClientCapabilities;
Expand Down Expand Up @@ -236,7 +238,7 @@ private async ValueTask<Response> GetCompletionAsync(
mappedPosition,
razorCompletionOptions);

var resolutionContext = new DelegatedCompletionResolutionContext(identifier, RazorLanguageKind.CSharp, rewrittenResponse.Data ?? rewrittenResponse.ItemDefaults?.Data);
var resolutionContext = new DelegatedCompletionResolutionContext(identifier, RazorLanguageKind.CSharp, rewrittenResponse.Data ?? rewrittenResponse.ItemDefaults?.Data, provisionalTextEdit);
var resultId = _completionListCache.Add(rewrittenResponse, resolutionContext);
rewrittenResponse.SetResultId(resultId, clientCapabilities);

Expand Down Expand Up @@ -326,7 +328,7 @@ private async ValueTask<VSInternalCompletionItem> ResolveCSharpCompletionItemAsy
}

var documentSnapshot = context.Snapshot;
var generatedDocument = await documentSnapshot.GetGeneratedDocumentAsync(cancellationToken).ConfigureAwait(false);
var generatedDocument = await GetCSharpGeneratedDocumentAsync(documentSnapshot, resolutionContext.ProvisionalTextEdit, cancellationToken).ConfigureAwait(false);

var clientCapabilities = _clientCapabilitiesService.ClientCapabilities;
var completionListSetting = clientCapabilities.TextDocument?.Completion;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ public async Task ResolveAsync_UsesItemsData()
Data = expectedData,
};
var containingCompletionList = new RazorVSInternalCompletionList() { Items = [item], Data = new object() };
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, new object());
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, new object(), ProvisionalTextEdit: null);

// Act
await resolver.ResolveAsync(
Expand All @@ -176,7 +176,7 @@ public async Task ResolveAsync_InheritsOriginalCompletionListData()
var resolver = new DelegatedCompletionItemResolver(DocumentContextFactory, formattingService, DocumentMappingService, optionsMonitor, clientConnection, LoggerFactory);
var item = new VSInternalCompletionItem();
var containingCompletionList = new RazorVSInternalCompletionList() { Items = [item], Data = new object() };
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, expectedData);
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, expectedData, ProvisionalTextEdit: null);

// Act
await resolver.ResolveAsync(item, containingCompletionList, originalRequestContext, s_clientCapabilities, _componentAvailabilityService, DisposalToken);
Expand Down Expand Up @@ -282,7 +282,7 @@ Task FooAsync()

Assert.NotNull(item);

var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, containingCompletionList.Data);
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, containingCompletionList.Data, ProvisionalTextEdit: null);
var resolvedItem = await resolver.ResolveAsync(
item, containingCompletionList, originalRequestContext, s_clientCapabilities, _componentAvailabilityService, DisposalToken);

Expand Down Expand Up @@ -334,7 +334,7 @@ public async Task ResolveAsync_Html_Resolves()
var resolver = new DelegatedCompletionItemResolver(DocumentContextFactory, formattingService, DocumentMappingService, optionsMonitor, clientConnection, LoggerFactory);
var item = new VSInternalCompletionItem();
var containingCompletionList = new RazorVSInternalCompletionList() { Items = [item] };
var originalRequestContext = new DelegatedCompletionResolutionContext(_htmlCompletionParams.Identifier, _htmlCompletionParams.ProjectedKind, new object());
var originalRequestContext = new DelegatedCompletionResolutionContext(_htmlCompletionParams.Identifier, _htmlCompletionParams.ProjectedKind, new object(), ProvisionalTextEdit: null);

// Act
var resolvedItem = await resolver.ResolveAsync(
Expand Down Expand Up @@ -363,7 +363,7 @@ private async Task<VSInternalCompletionItem> ResolveCompletionItemAsync(string c
var resolver = new DelegatedCompletionItemResolver(documentContextFactory, formattingService, DocumentMappingService, optionsMonitor, clientConnection, LoggerFactory);
var containingCompletionList = await GetCompletionListAndOriginalParamsAsync(cursorPosition, codeDocument, csharpServer);

var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, containingCompletionList.Data);
var originalRequestContext = new DelegatedCompletionResolutionContext(_csharpCompletionParams.Identifier, _csharpCompletionParams.ProjectedKind, containingCompletionList.Data, ProvisionalTextEdit: null);
var item = containingCompletionList.Items.FirstOrDefault(item => item.Label == itemToResolve);

if (item is null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,16 @@ The end.
TriggerCharacter = ".",
TriggerKind = CompletionTriggerKind.TriggerCharacter
},
expectedItemLabels: ["DaysInMonth", "IsLeapYear", "Now"]);
expectedItemLabels: ["DaysInMonth", "IsLeapYear", "Now"],
itemToResolve: "Now",
expectedResolvedItemDescription: "DateTime DateTime.Now { get; }",
expected: """
This is a Razor document.

<div>@DateTime.Now</div>

The end.
""");
}

[Fact]
Expand Down Expand Up @@ -1150,9 +1159,17 @@ private async Task VerifyCompletionResolveAsync(CodeAnalysis.TextDocument docume
var insertIndex = text.GetRequiredAbsoluteIndex(position);
changedText = text.WithChanges(new TextChange(new TextSpan(insertIndex, 0), insertText));
}
else if (result.Label is { } label)
{
// We'll let expected be null here, since its just simple text insertion

var text = await document.GetTextAsync(DisposalToken).ConfigureAwait(false);
var insertIndex = text.GetRequiredAbsoluteIndex(position);
changedText = text.WithChanges(new TextChange(new TextSpan(insertIndex, 0), label));
}
else if (expected is not null)
{
Assert.Fail("Expected a TextEdit or Command with TextEdit, but got none. Presumably resolve failed. Result: " + JsonSerializer.SerializeToElement(result).ToString());
Assert.Fail("Expected a TextEdit or Command with TextEdit, or InsertText, or Label, but got none. Presumably resolve failed. Result: " + JsonSerializer.SerializeToElement(result).ToString());
}

if (result.AdditionalTextEdits is not null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ private async Task VerifyCompletionItemResolveAsync(TestCode input)
var context = new DelegatedCompletionResolutionContext(
textDocumentIdentifier,
OriginalCompletionListData: null,
ProjectedKind: RazorLanguageKind.Html);
ProjectedKind: RazorLanguageKind.Html,
ProvisionalTextEdit: null);

var list = new RazorVSInternalCompletionList
{
Expand Down