public async Task CanSendSemanticTokenRequestAsync() { string scriptContent = "function"; string scriptPath = NewTestFile(scriptContent); SemanticTokens result = await PsesLanguageClient .SendRequest <SemanticTokensParams>( "textDocument/semanticTokens/full", new SemanticTokensParams { TextDocument = new TextDocumentIdentifier { Uri = new Uri(scriptPath) } }) .Returning <SemanticTokens>(CancellationToken.None).ConfigureAwait(false); // More information about how this data is generated can be found at // https://github.com/microsoft/vscode-extension-samples/blob/5ae1f7787122812dcc84e37427ca90af5ee09f14/semantic-tokens-sample/vscode.proposed.d.ts#L71 var expectedArr = new int[5] { // line, index, token length, token type, token modifiers 0, 0, scriptContent.Length, 1, 0 //function token: line 0, index 0, length of script, type 1 = keyword, no modifiers }; Assert.Equal(expectedArr, result.Data.ToArray()); }
public async Task RazorServerReadyAsync_ReportsReadyAsync() { // Arrange var testDocUri = new Uri("C:/path/to/file.razor"); var testVirtualDocUri = new Uri("C:/path/to/file2.razor.g"); var testCSharpDocUri = new Uri("C:/path/to/file.razor.g.cs"); var testVirtualDocument = new TestVirtualDocumentSnapshot(testVirtualDocUri, 0); var csharpVirtualDocument = new CSharpVirtualDocumentSnapshot(testCSharpDocUri, TextBuffer.CurrentSnapshot, 0); LSPDocumentSnapshot testDocument = new TestLSPDocumentSnapshot(testDocUri, 0, testVirtualDocument, csharpVirtualDocument); var documentManager = new Mock <TrackingLSPDocumentManager>(MockBehavior.Strict); documentManager.Setup(manager => manager.TryGetDocument(It.IsAny <Uri>(), out testDocument)) .Returns(true); var expectedResults = new SemanticTokens { }; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker.Setup(invoker => invoker.ReinvokeRequestOnServerAsync <SemanticTokensParams, SemanticTokens>( TextBuffer, Methods.TextDocumentSemanticTokensFullName, LanguageServerKind.CSharp.ToContentType(), It.IsAny <SemanticTokensParams>(), It.IsAny <CancellationToken>() )).Returns(Task.FromResult(new ReinvocationResponse <SemanticTokens>("languageClient", expectedResults))); var uIContextManager = new Mock <RazorUIContextManager>(MockBehavior.Strict); uIContextManager.Setup(m => m.SetUIContextAsync(RazorLSPConstants.RazorActiveUIContextGuid, true, It.IsAny <CancellationToken>())) .Returns(() => Task.CompletedTask) .Verifiable(); var disposable = new Mock <IDisposable>(MockBehavior.Strict); disposable .Setup(d => d.Dispose()) .Verifiable(); var clientOptionsMonitor = new Mock <RazorLSPClientOptionsMonitor>(MockBehavior.Strict); var documentSynchronizer = new Mock <LSPDocumentSynchronizer>(MockBehavior.Strict); var target = new DefaultRazorLanguageServerCustomMessageTarget( documentManager.Object, JoinableTaskContext, requestInvoker.Object, uIContextManager.Object, disposable.Object, clientOptionsMonitor.Object, documentSynchronizer.Object); // Act await target.RazorServerReadyAsync(CancellationToken.None); // Assert uIContextManager.Verify(); disposable.Verify(); }
public void GetSemanticTokens_Razor_GetEditsWithNoPrevious() { var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test1></test1>"; var expectedEdits = new SemanticTokens { Data = new int[] { 1, 1, 5, 0, 0, 0, 8, 5, 0, 0, }.ToImmutableArray(), }; var previousResultId = AssertSemanticTokenEdits(txt, expectedEdits, isRazor: false, previousResultId: null, out var service); Assert.NotNull(previousResultId); }
public static SemanticTokensFullOrDelta ComputeSemanticTokensEdits( SemanticTokens newTokens, IReadOnlyList <int> previousResults) { var differ = new SemanticTokensEditsDiffer(previousResults, newTokens.Data); var diffs = differ.ComputeDiff(); var edits = differ.ProcessEdits(diffs); var result = new SemanticTokensDelta { ResultId = newTokens.ResultId, Edits = edits, }; return(result); }
public static SemanticTokensOrSemanticTokensEdits ComputeSemanticTokensEdits( SemanticTokens newTokens, IReadOnlyList <uint> previousResults) { var differ = new SemanticTokensEditsDiffer(previousResults.ToArray(), newTokens.Data); var diffs = differ.ComputeDiff(); var edits = differ.ProcessEdits(diffs); var result = new SemanticTokensEditCollection { ResultId = newTokens.ResultId, Edits = edits, }; return(result); }
public async Task ProvideSemanticTokensAsync_ReturnsSemanticTokensAsync() { // Arrange var testDocUri = new Uri("C:/path/to/file.razor"); var testVirtualDocUri = new Uri("C:/path/to/file2.razor.g"); var testCSharpDocUri = new Uri("C:/path/to/file.razor.g.cs"); var testVirtualDocument = new TestVirtualDocumentSnapshot(testVirtualDocUri, 0); var csharpVirtualDocument = new CSharpVirtualDocumentSnapshot(testCSharpDocUri, Mock.Of <ITextSnapshot>(), 0); LSPDocumentSnapshot testDocument = new TestLSPDocumentSnapshot(testDocUri, 0, testVirtualDocument, csharpVirtualDocument); var documentManager = new Mock <TrackingLSPDocumentManager>(MockBehavior.Strict); documentManager.Setup(manager => manager.TryGetDocument(It.IsAny <Uri>(), out testDocument)) .Returns(true); var expectedResults = new SemanticTokens { }; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker.Setup(invoker => invoker.ReinvokeRequestOnServerAsync <SemanticTokensParams, SemanticTokens>( LanguageServerConstants.LegacyRazorSemanticTokensEndpoint, LanguageServerKind.CSharp.ToContentType(), It.IsAny <SemanticTokensParams>(), It.IsAny <CancellationToken>() )).Returns(Task.FromResult(expectedResults)); var uIContextManager = new Mock <RazorUIContextManager>(MockBehavior.Strict); var target = new DefaultRazorLanguageServerCustomMessageTarget(documentManager.Object, JoinableTaskContext, requestInvoker.Object, uIContextManager.Object); var request = new SemanticTokensParams() { TextDocument = new TextDocumentIdentifier() { Uri = testDocUri } }; // Act var result = await target.ProvideSemanticTokensAsync(request, CancellationToken.None); // Assert Assert.Equal(expectedResults, result); }
public async Task RazorServerReadyAsync_SetsUIContext() { // Arrange var testDocUri = new Uri("C:/path/to/file.razor"); var testVirtualDocUri = new Uri("C:/path/to/file2.razor.g"); var testCSharpDocUri = new Uri("C:/path/to/file.razor.g.cs"); var testVirtualDocument = new TestVirtualDocumentSnapshot(testVirtualDocUri, 0); var csharpVirtualDocument = new CSharpVirtualDocumentSnapshot(testCSharpDocUri, Mock.Of <ITextSnapshot>(), 0); LSPDocumentSnapshot testDocument = new TestLSPDocumentSnapshot(testDocUri, 0, testVirtualDocument, csharpVirtualDocument); var documentManager = new Mock <TrackingLSPDocumentManager>(MockBehavior.Strict); documentManager.Setup(manager => manager.TryGetDocument(It.IsAny <Uri>(), out testDocument)) .Returns(true); var expectedResults = new SemanticTokens { }; var requestInvoker = new Mock <LSPRequestInvoker>(MockBehavior.Strict); requestInvoker.Setup(invoker => invoker.ReinvokeRequestOnServerAsync <SemanticTokensParams, SemanticTokens>( LanguageServerConstants.LegacyRazorSemanticTokensEndpoint, LanguageServerKind.CSharp.ToContentType(), It.IsAny <SemanticTokensParams>(), It.IsAny <CancellationToken>() )).Returns(Task.FromResult(expectedResults)); var uIContextManager = new Mock <RazorUIContextManager>(MockBehavior.Strict); uIContextManager.Setup(m => m.SetUIContextAsync(RazorLSPConstants.RazorActiveUIContextGuid, true, It.IsAny <CancellationToken>())) .Returns(() => Task.CompletedTask) .Verifiable(); var target = new DefaultRazorLanguageServerCustomMessageTarget(documentManager.Object, JoinableTaskContext, requestInvoker.Object, uIContextManager.Object); // Act await target.RazorServerReadyAsync(CancellationToken.None); // Assert uIContextManager.Verify(); }
public SemanticTokensOrSemanticTokensEdits(SemanticTokens semanticTokens) { SemanticTokensEdits = null; SemanticTokens = semanticTokens; }