public async override Task <RazorMapToDocumentRangeResponse> MapToDocumentRangeAsync(RazorLanguageKind languageKind, Uri razorDocumentUri, Range projectedRange, CancellationToken cancellationToken) { if (razorDocumentUri is null) { throw new ArgumentNullException(nameof(razorDocumentUri)); } if (projectedRange is null) { throw new ArgumentNullException(nameof(projectedRange)); } var mapToDocumentRangeParams = new RazorMapToDocumentRangeParams() { Kind = languageKind, RazorDocumentUri = razorDocumentUri, ProjectedRange = new Range() { Start = new Position(projectedRange.Start.Line, projectedRange.Start.Character), End = new Position(projectedRange.End.Line, projectedRange.End.Character) } }; var documentMappingResponse = await _requestInvoker.CustomRequestServerAsync <RazorMapToDocumentRangeParams, RazorMapToDocumentRangeResponse>( LanguageServerConstants.RazorMapToDocumentRangeEndpoint, LanguageServerKind.Razor, mapToDocumentRangeParams, cancellationToken).ConfigureAwait(false); return(documentMappingResponse); }
public async override Task <RazorMapToDocumentRangesResponse> MapToDocumentRangesAsync(RazorLanguageKind languageKind, Uri razorDocumentUri, Range[] projectedRanges, CancellationToken cancellationToken) { if (razorDocumentUri is null) { throw new ArgumentNullException(nameof(razorDocumentUri)); } if (projectedRanges is null) { throw new ArgumentNullException(nameof(projectedRanges)); } var mapToDocumentRangeParams = new RazorMapToDocumentRangesParams() { Kind = languageKind, RazorDocumentUri = razorDocumentUri, ProjectedRanges = projectedRanges }; var documentMappingResponse = await _requestInvoker.CustomRequestServerAsync <RazorMapToDocumentRangesParams, RazorMapToDocumentRangesResponse>( LanguageServerConstants.RazorMapToDocumentRangesEndpoint, LanguageServerKind.Razor, mapToDocumentRangeParams, cancellationToken).ConfigureAwait(false); return(documentMappingResponse); }
public override async Task <ProjectionResult> GetProjectionAsync(LSPDocumentSnapshot documentSnapshot, Position position, CancellationToken cancellationToken) { if (documentSnapshot is null) { throw new ArgumentNullException(nameof(documentSnapshot)); } if (position is null) { throw new ArgumentNullException(nameof(position)); } var languageQueryParams = new RazorLanguageQueryParams() { Position = new Position(position.Line, position.Character), Uri = documentSnapshot.Uri }; var languageResponse = await _requestInvoker.CustomRequestServerAsync <RazorLanguageQueryParams, RazorLanguageQueryResponse>( LanguageServerConstants.RazorLanguageQueryEndpoint, LanguageServerKind.Razor, languageQueryParams, cancellationToken).ConfigureAwait(false); VirtualDocumentSnapshot virtualDocument; if (languageResponse.Kind == RazorLanguageKind.CSharp && documentSnapshot.TryGetVirtualDocument <CSharpVirtualDocumentSnapshot>(out var csharpDoc)) { virtualDocument = csharpDoc; } else if (languageResponse.Kind == RazorLanguageKind.Html && documentSnapshot.TryGetVirtualDocument <HtmlVirtualDocumentSnapshot>(out var htmlDoc)) { virtualDocument = htmlDoc; } else { return(null); } if (languageResponse.HostDocumentVersion == UndefinedDocumentVersion) { // There should always be a document version attached to an open document. // Log it and move on as if it was synchronized. _logger.LogVerbose($"Could not find a document version associated with the document '{documentSnapshot.Uri}'"); } else { var synchronized = await _documentSynchronizer.TrySynchronizeVirtualDocumentAsync(documentSnapshot.Version, virtualDocument, cancellationToken).ConfigureAwait(false); if (!synchronized) { // Could not synchronize return(null); } } var result = new ProjectionResult() { Uri = virtualDocument.Uri, Position = languageResponse.Position, PositionIndex = languageResponse.PositionIndex, LanguageKind = languageResponse.Kind, HostDocumentVersion = languageResponse.HostDocumentVersion }; return(result); }