protected override void OnCompilationWorkspaceAvailable() { Func <string, Microsoft.CodeAnalysis.Text.SourceText> getSourceTextByModelId = modelId => CodeCells .Values .Select(s => s.Editor) .OfType <CodeCellEditorView> () .FirstOrDefault(e => !e.IsDisposed && e.GetMonacoModelId() == modelId) ?.SourceTextContent; completionProvider?.Dispose(); signatureHelpProvider?.Dispose(); hoverProvider?.Dispose(); completionProvider = new CompletionProvider( ClientSession.CompilationWorkspace, webView.Document.Context, getSourceTextByModelId); signatureHelpProvider = new SignatureHelpProvider( ClientSession.CompilationWorkspace, webView.Document.Context, getSourceTextByModelId); hoverProvider = new HoverProvider( ClientSession.CompilationWorkspace, webView.Document.Context, getSourceTextByModelId); }
protected override void OnCompilationWorkspaceAvailable() { CodeCellId GetCodeCellId(string monacoModelId) { foreach (var codeCell in CodeCells.Values) { if (codeCell.Editor is CodeCellEditorView editor && !editor.IsDisposed && editor.GetMonacoModelId() == monacoModelId) { return(codeCell.CodeCellId); } } return(default(CodeCellId)); } completionProvider?.Dispose(); signatureHelpProvider?.Dispose(); hoverProvider?.Dispose(); completionProvider = new CompletionProvider( ClientSession.CompilationWorkspace, webView.Document.Context, GetCodeCellId); signatureHelpProvider = new SignatureHelpProvider( ClientSession.CompilationWorkspace, webView.Document.Context, GetCodeCellId); hoverProvider = new HoverProvider( ClientSession.CompilationWorkspace, webView.Document.Context, GetCodeCellId); }
public IAsyncAction RegisterHoverProviderAsync(string languageId, HoverProvider provider) { if (_editor.TryGetTarget(out CodeEditor editor)) { // Wrapper around Hover Provider to Monaco editor. // TODO: Add Incremented Id so that we can register multiple providers per language? editor._parentAccessor.RegisterEvent("HoverProvider" + languageId, async(args) => { if (args != null && args.Length >= 1) { var hover = await provider.ProvideHover(editor.GetModel(), JsonConvert.DeserializeObject <Position>(args[0])); if (hover != null) { return(JsonConvert.SerializeObject(hover)); } } return(string.Empty); }); // link:otherScriptsToBeOrganized.ts:registerHoverProvider return(editor.InvokeScriptAsync("registerHoverProvider", languageId).AsAsyncAction()); } return(null); }
public void TestRegular() { ISymbolTableManager manager = new FakeSymbolManager(false, false); var provider = new HoverProvider(manager); //note: params do not matter. the fake returns a fixed symbol and does not respect the position. those methods are tested within the symbol table tests. var result = provider.GetHoverInformation(new Uri("file:///N:/u/l.l"), 0, 10); Assert.AreEqual(1, result.Range.Start.Line, "Start Line is not matching"); Assert.AreEqual(21, result.Range.Start.Character, "Start Char is not matching"); Assert.AreEqual(1, result.Range.End.Line, "End Line is not matching"); Assert.AreEqual(29, result.Range.End.Character, "End Char is not matching"); Console.WriteLine(result.Contents.MarkupContent.Value); string textExpectation = " **`barapapa`** *(line 2, l.l)*\n" + "* **Type:** N/A\n" + "* **Kind:** RootNode\n" + "* **Scope:** `_programRootNode`\n" + "* **Declaration:** line 1, l.l"; string actual = result.Contents.MarkupContent.Value.Replace("N:\\u\\l.l", "l.l"); Assert.AreEqual(textExpectation, actual, "Markup Content does not match"); }
private void TestHover(int line, int character, params string[] expectedResults) { var hoverProvider = new HoverProvider(m_fixture.ProviderContext); var result = hoverProvider.Hover( new TextDocumentPositionParams() { Position = new Position() { Line = line - 1, Character = character - 1, }, TextDocument = new TextDocumentIdentifier() { Uri = m_fixture.GetChildUri(@"module\hoverTests.bxt").ToString() } }, CancellationToken.None); Assert.True(result.IsSuccess); // Hover provider could return null. var enumResults = (result.SuccessValue?.Contents ?? new object[] {}).GetEnumerator(); var enumExpectedContents = expectedResults.GetEnumerator(); while (enumResults.MoveNext()) { Assert.True(enumResults.Current is StringOrObject <MarkedString>); Assert.True(enumExpectedContents.MoveNext()); Assert.Equal(enumExpectedContents.Current, (enumResults.Current as StringOrObject <MarkedString>).Right.Value); } }
public void TestNull() { ISymbolTableManager manager = new FakeSymbolManager(false, true); var provider = new HoverProvider(manager); var result = provider.GetHoverInformation(new Uri("file:///N:/u/l.l"), 0, 10); Assert.IsNull(result); }
protected override void OnAgentDisconnected() { completionProvider?.Dispose(); completionProvider = null; signatureHelpProvider?.Dispose(); signatureHelpProvider = null; hoverProvider?.Dispose(); hoverProvider = null; }
public async Task <Hover> Handle(HoverParams request, CancellationToken cancellationToken) { _log.LogInformation(string.Format(Resources.LoggingMessages.request_handle, _method)); try { var manager = _workspaceManager.GetFileRepository(request.TextDocument.Uri).SymbolTableManager; var uri = request.TextDocument.Uri; var line = (int)request.Position.Line + 1; var col = (int)request.Position.Character + 1; IHoverProvider provider = new HoverProvider(manager); return(await Task.Run(() => provider.GetHoverInformation(uri, line, col), cancellationToken)); } catch (Exception e) { HandleError(string.Format(Resources.LoggingMessages.request_error, _method), e); return(null); } }
public void TestRegular2() { ISymbolTableManager manager = new FakeSymbolManager(true, false); var provider = new HoverProvider(manager); var result = provider.GetHoverInformation(new Uri("file:///N:/u/l.l"), 0, 10); Assert.AreEqual(0, result.Range.Start.Line, "Start Line is not matching"); Assert.AreEqual(10, result.Range.Start.Character, "Start Char is not matching"); Assert.AreEqual(0, result.Range.End.Line, "End Line is not matching"); Assert.AreEqual(18, result.Range.End.Character, "End Char is not matching"); Console.WriteLine(result.Contents.MarkupContent.Value); string textExpectation = " **`barapapa`** *(line 1, l.l)*\n" + "* **Type:** N/A\n" + "* **Kind:** RootNode\n" + "* **Scope:** `_programRootNode`\n" + "* **Declaration:** This symbol is the declaration."; string actual = result.Contents.MarkupContent.Value.Replace("N:\\u\\l.l", "l.l"); Assert.AreEqual(textExpectation, actual, "Markup Content does not match"); }
private void TestHover(int line, int character, params string[] expectedResults) { var hoverProvider = new HoverProvider(m_fixture.ProviderContext); var result = hoverProvider.Hover( new TextDocumentPositionParams() { Position = new Position() { Line = line - 1, Character = character - 1, }, TextDocument = new TextDocumentIdentifier() { Uri = m_fixture.GetChildUri(@"module\hoverTests.bxt") } }, CancellationToken.None); Assert.True(result.IsSuccess); if (result.SuccessValue == null) { Assert.False(expectedResults.Any()); return; } // Hover provider could return null. var enumExpectedContents = expectedResults.GetEnumerator(); var enumResults = ((SumType <string, MarkedString>[])result.SuccessValue.Contents).GetEnumerator(); while (enumResults.MoveNext()) { Assert.True(enumResults.Current is SumType <string, MarkedString>); Assert.True(enumExpectedContents.MoveNext()); Assert.Equal(enumExpectedContents.Current, ((MarkedString)(SumType <string, MarkedString>)enumResults.Current).Value); } }
protected override Result <InitializeResult, ResponseError <InitializeErrorData> > Initialize(InitializeParams @params) { workspaceRoot = @params.RootUri; project = new Project(workspaceRoot); completionProvider = new CompletionProvider(project); signatureHelpProvider = new SignatureHelpProvider(project); hoverProvider = new HoverProvider(project); project.Documents.OnChanged += DocumentChanged; return(Result <InitializeResult, ResponseError <InitializeErrorData> > .Success(new InitializeResult { Capabilities = new ServerCapabilities { TextDocumentSync = TextDocumentSyncKind.Full, CompletionProvider = new CompletionOptions { TriggerCharacters = new[] { ".", " " }, ResolveProvider = false }, SignatureHelpProvider = new SignatureHelpOptions { TriggerCharacters = new[] { "(", "," } }, HoverProvider = true } })); }