Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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");
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 7
0
        protected override void OnAgentDisconnected()
        {
            completionProvider?.Dispose();
            completionProvider = null;

            signatureHelpProvider?.Dispose();
            signatureHelpProvider = null;

            hoverProvider?.Dispose();
            hoverProvider = null;
        }
Exemplo n.º 8
0
        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");
        }
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
0
        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
                }
            }));
        }