示例#1
0
        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();
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#7
0
        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();
        }
示例#8
0
 public SemanticTokensOrSemanticTokensEdits(SemanticTokens semanticTokens)
 {
     SemanticTokensEdits = null;
     SemanticTokens      = semanticTokens;
 }