コード例 #1
0
        public async Task HandleAsync(RequestHoverText command, KernelInvocationContext context)
        {
            using var _ = new GCPressure(1024 * 1024);

            var document = _workspace.UpdateWorkingDocument(command.Code);
            var text     = await document.GetTextAsync();

            var cursorPosition = text.Lines.GetPosition(command.LinePosition);
            var service        = QuickInfoService.GetService(document);
            var info           = await service.GetQuickInfoAsync(document, cursorPosition);

            if (info == null)
            {
                return;
            }

            var scriptSpanStart      = text.Lines.GetLinePosition(0);
            var linePosSpan          = text.Lines.GetLinePositionSpan(info.Span);
            var correctedLinePosSpan = linePosSpan.SubtractLineOffset(scriptSpanStart);

            context.Publish(
                new HoverTextProduced(
                    command,
                    new[]
            {
                new FormattedValue("text/markdown", info.ToMarkdownString())
            },
                    correctedLinePosSpan));
        }
コード例 #2
0
        public HoverTextProduced(RequestHoverText command, IReadOnlyCollection <FormattedValue> content, LinePositionSpan?range = null)
            : base(command)
        {
            if (content.Count == 0)
            {
                throw new ArgumentException(nameof(content), "At least one content required.");
            }

            Content = content;
            _range  = range;
        }
コード例 #3
0
        public HoverTextProduced(RequestHoverText command, IReadOnlyCollection <FormattedValue> content, LinePositionSpan linePositionSpan = null)
            : base(command)
        {
            if (content is null)
            {
                throw new ArgumentNullException(nameof(content));
            }

            if (content.Count == 0)
            {
                throw new ArgumentException("At least one content required.", nameof(content));
            }

            Content           = content;
            _linePositionSpan = linePositionSpan;
        }
コード例 #4
0
        public async Task HandleAsync(RequestHoverText command, KernelInvocationContext context)
        {
            var document = _workspace.ForkDocument(command.Code);
            var text     = await document.GetTextAsync();

            var cursorPosition = text.Lines.GetPosition(command.Position);
            var service        = QuickInfoService.GetService(document);
            var info           = await service.GetQuickInfoAsync(document, cursorPosition);

            if (info == null)
            {
                return;
            }

            var scriptSpanStart      = text.Lines.GetLinePosition(0);
            var linePosSpan          = text.Lines.GetLinePositionSpan(info.Span);
            var correctedLinePosSpan = linePosSpan.SubtractLineOffset(scriptSpanStart);

            context.PublishHoverTextMarkdownResponse(command, info.ToMarkdownString(), correctedLinePosSpan);
        }
コード例 #5
0
        public static IEnumerable <object[]> Events()
        {
            foreach (var @event in events())
            {
                yield return(new object[] { @event });
            }

            IEnumerable <KernelEvent> events()
            {
                var submitCode = new SubmitCode("123");

                yield return(new CodeSubmissionReceived(
                                 submitCode));

                yield return(new CommandFailed(
                                 "Oooops!",
                                 submitCode));

                yield return(new CommandFailed(
                                 new InvalidOperationException("Oooops!"),
                                 submitCode,
                                 "oops"));

                yield return(new CommandSucceeded(submitCode));

                yield return(new CompleteCodeSubmissionReceived(submitCode));

                var requestCompletion = new RequestCompletions("Console.Wri", new LinePosition(0, 11));

                yield return(new CompletionsProduced(
                                 new[]
                {
                    new CompletionItem(
                        "WriteLine",
                        "Method",
                        "WriteLine",
                        "WriteLine",
                        "WriteLine",
                        "Writes the line")
                },
                                 requestCompletion));

                yield return(new CompletionRequestReceived(requestCompletion));

                yield return(new DiagnosticLogEntryProduced("oops!", submitCode));

                yield return(new DisplayedValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new DisplayedValueUpdated(
                                 new HtmlString("<b>hi!</b>"),
                                 "the-value-id",
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new ErrorProduced("oops!"));

                yield return(new IncompleteCodeSubmissionReceived(submitCode));

                yield return(new InputRequested("prompt", submitCode));

                var requestHoverTextCommand = new RequestHoverText("document-contents", new LinePosition(1, 2));

                yield return(new HoverTextProduced(
                                 requestHoverTextCommand,
                                 new[] { new FormattedValue("text/markdown", "markdown") },
                                 new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4))));

                yield return(new PackageAdded(
                                 new ResolvedPackageReference("ThePackage", "1.2.3", new[] { new FileInfo(Path.GetTempFileName()) })));

                yield return(new PasswordRequested("password", submitCode));

                yield return(new ReturnValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new StandardErrorValueProduced(
                                 "oops!",
                                 submitCode,
                                 new[]
                {
                    new FormattedValue("text/plain", "oops!"),
                }));

                yield return(new StandardOutputValueProduced(
                                 123,
                                 new SubmitCode("Console.Write(123);", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/plain", "123"),
                }));

                yield return(new WorkingDirectoryChanged(
                                 new DirectoryInfo("some/different/directory"),
                                 new ChangeWorkingDirectory(new DirectoryInfo("some/different/directory"))));
            }
        }
コード例 #6
0
ファイル: FSharpKernel.cs プロジェクト: nicro950/interactive
 public Task HandleAsync(RequestHoverText command, KernelInvocationContext context) => HandleRequestHoverText(command, context);
 public static void PublishHoverTextMarkdownResponse(this KernelInvocationContext context, RequestHoverText command, string content, LinePositionSpan?linePositionSpan = null)
 {
     context.PublishHoverTextResponse(command, new FormattedValue("text/markdown", content), linePositionSpan);
 }
 public static void PublishHoverTextResponse(this KernelInvocationContext context, RequestHoverText command, FormattedValue value, LinePositionSpan?linePositionSpan = null)
 {
     context.PublishHoverTextResponse(command, new[] { value }, linePositionSpan);
 }
        public static void PublishHoverTextResponse(this KernelInvocationContext context, RequestHoverText command, IReadOnlyCollection <FormattedValue> content, LinePositionSpan?linePositionSpan = null)
        {
            var response = new HoverTextProduced(command, content, linePositionSpan);

            context.Publish(response);
        }
コード例 #10
0
        public static void PublishHoverPlainTextResponse(this KernelInvocationContext context, RequestHoverText command, string content, LinePositionSpan linePositionSpan)
        {
            var response = new HoverPlainTextProduced(command, content, linePositionSpan);

            context.Publish(response);
        }
コード例 #11
0
        public static IEnumerable <object[]> Events()
        {
            foreach (var @event in events())
            {
                yield return(new object[] { @event });
            }

            IEnumerable <KernelEvent> events()
            {
                var submitCode = new SubmitCode("123");

                yield return(new CodeSubmissionReceived(
                                 submitCode));

                yield return(new CommandFailed(
                                 "Oooops!",
                                 submitCode));

                yield return(new CommandFailed(
                                 new InvalidOperationException("Oooops!"),
                                 submitCode,
                                 "oops"));

                yield return(new CommandSucceeded(submitCode));

                yield return(new CompleteCodeSubmissionReceived(submitCode));

                var requestCompletion = new RequestCompletions("Console.Wri", new LinePosition(0, 11));

                yield return(new CompletionsProduced(
                                 new[]
                {
                    new CompletionItem(
                        "WriteLine",
                        "Method",
                        "WriteLine",
                        "WriteLine",
                        "WriteLine",
                        "Writes the line")
                },
                                 requestCompletion));

                yield return(new DiagnosticLogEntryProduced("oops!", submitCode));

                yield return(new DiagnosticsProduced(
                                 new[]
                {
                    new Diagnostic(
                        new LinePositionSpan(
                            new LinePosition(1, 2),
                            new LinePosition(3, 4)),
                        DiagnosticSeverity.Error,
                        "code",
                        "message")
                },
                                 submitCode));

                yield return(new DisplayedValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new DisplayedValueUpdated(
                                 new HtmlString("<b>hi!</b>"),
                                 "the-value-id",
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new ErrorProduced("oops!", submitCode));

                yield return(new IncompleteCodeSubmissionReceived(submitCode));

                var requestHoverTextCommand = new RequestHoverText("document-contents", new LinePosition(1, 2));

                yield return(new HoverTextProduced(
                                 requestHoverTextCommand,
                                 new[] { new FormattedValue("text/markdown", "markdown") },
                                 new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4))));

                yield return(new KernelReady());

                yield return(new InteractiveDocumentParsed(new Documents.InteractiveDocument(new[]
                {
                    new InteractiveDocumentElement("language", "contents", new InteractiveDocumentOutputElement[]
                    {
                        new DisplayElement(new Dictionary <string, object>()
                        {
                            { "text/html", "<b></b>" }
                        }),
                        new TextElement("text"),
                        new ErrorElement("e-name", "e-value", new[]
                        {
                            "at func1()",
                            "at func2()"
                        })
                    })
                }), new ParseInteractiveDocument("interactive.ipynb", new byte[0])));

                yield return(new InteractiveDocumentSerialized(new byte[] { 0x01, 0x02, 0x03, 0x04 }, new SerializeInteractiveDocument("interactive.ipynb", null, "\n")));

                yield return(new PackageAdded(
                                 new ResolvedPackageReference(
                                     packageName: "ThePackage",
                                     packageVersion: "1.2.3",
                                     assemblyPaths: new[] { "/path/to/a.dll" },
                                     packageRoot: "/the/package/root",
                                     probingPaths: new[] { "/probing/path/1", "/probing/path/2" }),
                                 new SubmitCode("#r \"nuget:ThePackage,1.2.3\"")));

                yield return(new ReturnValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new SignatureHelpProduced(
                                 new RequestSignatureHelp("sig-help-contents", new LinePosition(1, 2)),
                                 new[]
                {
                    new SignatureInformation("label",
                                             new FormattedValue("text/html", "sig-help-result"),
                                             new[]
                    {
                        new ParameterInformation("param1", new FormattedValue("text/html", "param1")),
                        new ParameterInformation("param2", new FormattedValue("text/html", "param2"))
                    })
                },
                                 0,
                                 1));

                yield return(new StandardErrorValueProduced(
                                 submitCode,
                                 new[]
                {
                    new FormattedValue("text/plain", "oops!"),
                }));

                yield return(new StandardOutputValueProduced(
                                 new SubmitCode("Console.Write(123);", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/plain", "123"),
                }));

                yield return(new WorkingDirectoryChanged(
                                 "some/different/directory",
                                 new ChangeWorkingDirectory("some/different/directory")));

                yield return(new KernelExtensionLoaded(new SubmitCode(@"#r ""nuget:package"" ")));
            }
        }
コード例 #12
0
        public static IEnumerable <object[]> Events()
        {
            foreach (var @event in events().Select(e =>
            {
                e.Command.Properties["id"] = "command-id";
                return(e);
            }))
            {
                yield return(new object[] { @event });
            }

            IEnumerable <KernelEvent> events()
            {
                var compileProject = new CompileProject("123");

                yield return(new AssemblyProduced(compileProject, new Base64EncodedAssembly("01020304")));

                var submitCode = new SubmitCode("123");

                yield return(new CodeSubmissionReceived(
                                 submitCode));

                yield return(new CommandFailed(
                                 "Oooops!",
                                 submitCode));

                yield return(new CommandFailed(
                                 new InvalidOperationException("Oooops!"),
                                 submitCode,
                                 "oops"));

                yield return(new CommandSucceeded(submitCode));

                yield return(new CompleteCodeSubmissionReceived(submitCode));

                var requestCompletion = new RequestCompletions("Console.Wri", new LinePosition(0, 11));

                yield return(new CompletionsProduced(
                                 new[]
                {
                    new CompletionItem(
                        "WriteLine",
                        "Method",
                        "WriteLine",
                        "WriteLine",
                        "WriteLine",
                        "Writes the line")
                },
                                 requestCompletion));

                yield return(new DiagnosticLogEntryProduced("oops!", submitCode));

                yield return(new DiagnosticsProduced(
                                 new[]
                {
                    new Diagnostic(
                        new LinePositionSpan(
                            new LinePosition(1, 2),
                            new LinePosition(3, 4)),
                        DiagnosticSeverity.Error,
                        "code",
                        "message")
                },
                                 submitCode));

                yield return(new DisplayedValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new DisplayedValueUpdated(
                                 new HtmlString("<b>hi!</b>"),
                                 "the-value-id",
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                var openDocument = new OpenDocument("path");

                yield return(new DocumentOpened(openDocument, "path", null, "file contents"));

                yield return(new ErrorProduced("oops!", submitCode));

                yield return(new IncompleteCodeSubmissionReceived(submitCode));

                var requestHoverTextCommand = new RequestHoverText("document-contents", new LinePosition(1, 2));

                yield return(new HoverTextProduced(
                                 requestHoverTextCommand,
                                 new[] { new FormattedValue("text/markdown", "markdown") },
                                 new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4))));

                yield return(new KernelInfoProduced(
                                 new KernelInfo("javascript", "javascript")
                {
                    Aliases = new[] { "js" },
                    DestinationUri = new Uri("kernel://vscode/javascript"),
                    SupportedDirectives = new[]
                    {
                        new DirectiveInfo("#r")
                    },
                    SupportedKernelCommands = new[]
                    {
                        new KernelCommandInfo(nameof(SubmitCode))
                    }
                },
                                 new RequestKernelInfo()));

                yield return(new KernelReady());

                yield return(new PackageAdded(
                                 new ResolvedPackageReference(
                                     packageName: "ThePackage",
                                     packageVersion: "1.2.3",
                                     assemblyPaths: new[] { "/path/to/a.dll" },
                                     packageRoot: "/the/package/root",
                                     probingPaths: new[] { "/probing/path/1", "/probing/path/2" }),
                                 new SubmitCode("#r \"nuget:ThePackage,1.2.3\"")));

                yield return(new ReturnValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new SignatureHelpProduced(
                                 new RequestSignatureHelp("sig-help-contents", new LinePosition(1, 2)),
                                 new[]
                {
                    new SignatureInformation("label",
                                             new FormattedValue("text/html", "sig-help-result"),
                                             new[]
                    {
                        new ParameterInformation("param1", new FormattedValue("text/html", "param1")),
                        new ParameterInformation("param2", new FormattedValue("text/html", "param2"))
                    })
                },
                                 0,
                                 1));

                yield return(new StandardErrorValueProduced(
                                 submitCode,
                                 new[]
                {
                    new FormattedValue("text/plain", "oops!"),
                }));

                yield return(new StandardOutputValueProduced(
                                 new SubmitCode("Console.Write(123);", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/plain", "123"),
                }));

                yield return(new WorkingDirectoryChanged(
                                 "some/different/directory",
                                 new ChangeWorkingDirectory("some/different/directory")));

                yield return(new KernelExtensionLoaded(new SubmitCode(@"#r ""nuget:package"" ")));

                yield return(new ValueInfosProduced(new[] { new KernelValueInfo("a", typeof(string)), new KernelValueInfo("b", typeof(string)), new KernelValueInfo("c", typeof(string)) }, new RequestValueInfos("csharp")));

                yield return(new ValueProduced("raw value", "a", new FormattedValue(HtmlFormatter.MimeType, "<span>formatted value</span>"), new RequestValue("a", "csharp", HtmlFormatter.MimeType)));

                yield return(new CommandCancelled(new Cancel(), new SubmitCode("var value = 1;", "csharp")));

                yield return(new InputProduced("user input", new GetInput(targetKernelName: "vscode")));
            }
        }
コード例 #13
0
 public static TextDocument FromDocumentContents(string code)
 {
     return(new TextDocument(RequestHoverText.MakeDataUriFromContents(code)));
 }
コード例 #14
0
 public Task HandleAsync(RequestHoverText command, KernelInvocationContext context)
 {
     return(SendCommandToRemoteKernel(command));
 }
コード例 #15
0
        private Task <KernelCommandResult> SendHoverRequest(Kernel kernel, string code, int line, int character)
        {
            var command = new RequestHoverText(code, new LinePosition(line, character));

            return(kernel.SendAsync(command));
        }
コード例 #16
0
        private Task <IKernelCommandResult> SendHoverRequest(KernelBase kernel, string code, int line, int character)
        {
            var command = new RequestHoverText(RequestHoverText.MakeDataUriFromContents(code), new LinePosition(line, character));

            return(kernel.SendAsync(command));
        }
コード例 #17
0
        public static IEnumerable <object[]> Events()
        {
            foreach (var @event in events())
            {
                yield return(new object[] { @event });
            }

            IEnumerable <KernelEvent> events()
            {
                var submitCode = new SubmitCode("123");

                yield return(new CodeSubmissionReceived(
                                 submitCode));

                yield return(new CommandFailed(
                                 "Oooops!",
                                 submitCode));

                yield return(new CommandFailed(
                                 new InvalidOperationException("Oooops!"),
                                 submitCode,
                                 "oops"));

                yield return(new CommandSucceeded(submitCode));

                yield return(new CompleteCodeSubmissionReceived(submitCode));

                var requestCompletion = new RequestCompletions("Console.Wri", new LinePosition(0, 11));

                yield return(new CompletionsProduced(
                                 new[]
                {
                    new CompletionItem(
                        "WriteLine",
                        "Method",
                        "WriteLine",
                        "WriteLine",
                        "WriteLine",
                        "Writes the line")
                },
                                 requestCompletion));

                yield return(new DiagnosticLogEntryProduced("oops!", submitCode));

                yield return(new DiagnosticsProduced(
                                 new[]
                {
                    new Diagnostic(
                        new LinePositionSpan(
                            new LinePosition(1, 2),
                            new LinePosition(3, 4)),
                        DiagnosticSeverity.Error,
                        "code",
                        "message")
                },
                                 submitCode));

                yield return(new DisplayedValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new DisplayedValueUpdated(
                                 new HtmlString("<b>hi!</b>"),
                                 "the-value-id",
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new ErrorProduced("oops!"));

                yield return(new IncompleteCodeSubmissionReceived(submitCode));

                yield return(new InputRequested("prompt", submitCode));

                var requestHoverTextCommand = new RequestHoverText("document-contents", new LinePosition(1, 2));

                yield return(new HoverTextProduced(
                                 requestHoverTextCommand,
                                 new[] { new FormattedValue("text/markdown", "markdown") },
                                 new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4))));

                yield return(new KernelReady());

                yield return(new PackageAdded(
                                 new ResolvedPackageReference(
                                     packageName: "ThePackage",
                                     packageVersion: "1.2.3",
                                     assemblyPaths: new[] { "/path/to/a.dll" },
                                     packageRoot: "/the/package/root",
                                     probingPaths: new[] { "/probing/path/1", "/probing/path/2" })));

                yield return(new PasswordRequested("password", submitCode));

                yield return(new ReturnValueProduced(
                                 new HtmlString("<b>hi!</b>"),
                                 new SubmitCode("b(\"hi!\")", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/html", "<b>hi!</b>"),
                }));

                yield return(new StandardErrorValueProduced(
                                 submitCode,
                                 new[]
                {
                    new FormattedValue("text/plain", "oops!"),
                }));

                yield return(new StandardOutputValueProduced(
                                 new SubmitCode("Console.Write(123);", "csharp", SubmissionType.Run),
                                 new[]
                {
                    new FormattedValue("text/plain", "123"),
                }));

                yield return(new WorkingDirectoryChanged(
                                 "some/different/directory",
                                 new ChangeWorkingDirectory("some/different/directory")));

                yield return(new KernelExtensionLoaded(new SubmitCode(@"#r ""nuget:package"" ")));
            }
        }