public async Task RazorRangeFormattingAsync_LanguageKindRazor_ReturnsEmpty() { // Arrange var documentManager = Mock.Of <TrackingLSPDocumentManager>(); var requestInvoker = new Mock <LSPRequestInvoker>(); var target = new DefaultRazorLanguageServerCustomMessageTarget(documentManager, JoinableTaskContext, requestInvoker.Object); var request = new RazorDocumentRangeFormattingParams() { HostDocumentFilePath = "c:/Some/path/to/file.razor", Kind = RazorLanguageKind.Razor, ProjectedRange = new Range(), Options = new FormattingOptions() { TabSize = 4, InsertSpaces = true } }; // Act var result = await target.RazorRangeFormattingAsync(request, CancellationToken.None).ConfigureAwait(false); // Assert Assert.NotNull(result); Assert.Empty(result.Edits); }
public async Task RazorRangeFormattingAsync_DocumentNotFound_ReturnsEmpty() { // Arrange var documentManager = new Mock <TrackingLSPDocumentManager>(MockBehavior.Strict).Object; Mock.Get(documentManager).Setup(m => m.TryGetDocument(new Uri("c:/Some/path/to/file.razor"), out It.Ref <LSPDocumentSnapshot> .IsAny)).Returns(false); var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); var uIContextManager = new Mock <RazorUIContextManager>(MockBehavior.Strict); var disposable = new Mock <IDisposable>(MockBehavior.Strict); var documentSynchronizer = new Mock <LSPDocumentSynchronizer>(MockBehavior.Strict); var target = new DefaultRazorLanguageServerCustomMessageTarget( documentManager, JoinableTaskContext, requestInvoker.Object, uIContextManager.Object, disposable.Object, EditorSettingsManager, documentSynchronizer.Object); var request = new RazorDocumentRangeFormattingParams() { HostDocumentFilePath = "c:/Some/path/to/file.razor", Kind = RazorLanguageKind.CSharp, ProjectedRange = new Range(), Options = new FormattingOptions() { TabSize = 4, InsertSpaces = true } }; // Act var result = await target.RazorRangeFormattingAsync(request, CancellationToken.None).ConfigureAwait(false); // Assert Assert.NotNull(result); Assert.Empty(result.Edits); }
public async Task RazorRangeFormattingAsync_ValidRequest_InvokesLanguageServer() { // Arrange var filePath = "c:/Some/path/to/file.razor"; var uri = new Uri(filePath); var virtualDocument = new CSharpVirtualDocumentSnapshot(new Uri($"{filePath}.g.cs"), Mock.Of <ITextSnapshot>(MockBehavior.Strict), 1); LSPDocumentSnapshot document = new TestLSPDocumentSnapshot(uri, 1, new[] { virtualDocument }); var documentManager = new Mock <TrackingLSPDocumentManager>(MockBehavior.Strict); documentManager.Setup(manager => manager.TryGetDocument(It.IsAny <Uri>(), out document)) .Returns(true); var expectedEdit = new TextEdit() { NewText = "SomeEdit", Range = new Range() { Start = new Position(), End = new Position() } }; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker .Setup(r => r.ReinvokeRequestOnServerAsync <DocumentRangeFormattingParams, TextEdit[]>(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DocumentRangeFormattingParams>(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(new[] { expectedEdit })); var uIContextManager = new Mock <RazorUIContextManager>(MockBehavior.Strict); var disposable = new Mock <IDisposable>(MockBehavior.Strict); var clientOptionsMonitor = new Mock <RazorLSPClientOptionsMonitor>(MockBehavior.Strict); var target = new DefaultRazorLanguageServerCustomMessageTarget( documentManager.Object, JoinableTaskContext, requestInvoker.Object, uIContextManager.Object, disposable.Object, clientOptionsMonitor.Object); var request = new RazorDocumentRangeFormattingParams() { HostDocumentFilePath = filePath, Kind = RazorLanguageKind.CSharp, ProjectedRange = new Range() { Start = new Position(), End = new Position() }, Options = new FormattingOptions() { TabSize = 4, InsertSpaces = true } }; // Act var result = await target.RazorRangeFormattingAsync(request, CancellationToken.None).ConfigureAwait(false); // Assert Assert.NotNull(result); var edit = Assert.Single(result.Edits); Assert.Equal("SomeEdit", edit.NewText); }
public override async Task <RazorDocumentRangeFormattingResponse> RazorRangeFormattingAsync(RazorDocumentRangeFormattingParams request, CancellationToken cancellationToken) { var response = new RazorDocumentRangeFormattingResponse() { Edits = Array.Empty <TextEdit>() }; if (request.Kind == RazorLanguageKind.Razor) { return(response); } await _joinableTaskFactory.SwitchToMainThreadAsync(); var hostDocumentUri = new Uri(request.HostDocumentFilePath); if (!_documentManager.TryGetDocument(hostDocumentUri, out var documentSnapshot)) { return(response); } var serverKind = default(LanguageServerKind); var projectedUri = default(Uri); if (request.Kind == RazorLanguageKind.CSharp && documentSnapshot.TryGetVirtualDocument <CSharpVirtualDocumentSnapshot>(out var csharpDocument)) { serverKind = LanguageServerKind.CSharp; projectedUri = csharpDocument.Uri; } else if (request.Kind == RazorLanguageKind.Html && documentSnapshot.TryGetVirtualDocument <HtmlVirtualDocumentSnapshot>(out var htmlDocument)) { serverKind = LanguageServerKind.Html; projectedUri = htmlDocument.Uri; } else { Debug.Fail("Unexpected RazorLanguageKind. This can't really happen in a real scenario."); return(response); } var formattingParams = new DocumentRangeFormattingParams() { TextDocument = new TextDocumentIdentifier() { Uri = projectedUri }, Range = request.ProjectedRange, Options = request.Options }; response.Edits = await _requestInvoker.RequestServerAsync <DocumentRangeFormattingParams, TextEdit[]>( Methods.TextDocumentRangeFormattingName, serverKind, formattingParams, cancellationToken).ConfigureAwait(false); return(response); }
public abstract Task <RazorDocumentRangeFormattingResponse> RazorRangeFormattingAsync(RazorDocumentRangeFormattingParams token, CancellationToken cancellationToken);
public override async Task <RazorDocumentRangeFormattingResponse> RazorRangeFormattingAsync(RazorDocumentRangeFormattingParams request, CancellationToken cancellationToken) { var response = new RazorDocumentRangeFormattingResponse() { Edits = Array.Empty <TextEdit>() }; if (request.Kind == RazorLanguageKind.Razor) { return(response); } await _joinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); var hostDocumentUri = new Uri(request.HostDocumentFilePath); if (!_documentManager.TryGetDocument(hostDocumentUri, out var documentSnapshot)) { return(response); } string languageServerName; Uri projectedUri; if (request.Kind == RazorLanguageKind.CSharp && documentSnapshot.TryGetVirtualDocument <CSharpVirtualDocumentSnapshot>(out var csharpDocument)) { languageServerName = RazorLSPConstants.RazorCSharpLanguageServerName; projectedUri = csharpDocument.Uri; } else { Debug.Fail("Unexpected RazorLanguageKind. This can't really happen in a real scenario."); return(response); } var formattingParams = new DocumentRangeFormattingParams() { TextDocument = new TextDocumentIdentifier() { Uri = projectedUri }, Range = request.ProjectedRange, Options = request.Options }; var textBuffer = csharpDocument.Snapshot.TextBuffer; var edits = await _requestInvoker.ReinvokeRequestOnServerAsync <DocumentRangeFormattingParams, TextEdit[]>( textBuffer, Methods.TextDocumentRangeFormattingName, languageServerName, formattingParams, cancellationToken).ConfigureAwait(false); response.Edits = edits?.Response ?? Array.Empty <TextEdit>(); return(response); }