Example #1
0
        public async Task Subsequent_completion_commands_produce_the_expected_results()
        {
            var kernel = CreateKernel();

            var firstCodeSubmission = new SubmitCode("var jon = new { Name = \"Jon\" };");

            var secondCodeSubmission = new SubmitCode("var diego = new { Name = \"Diego\", AwesomeFriend = jon };");

            await kernel.SendAsync(firstCodeSubmission);

            await kernel.SendAsync(secondCodeSubmission);

            var firstCompletionRequest = new RequestCompletions("j", new LinePosition(0, 1));

            var secondCompletionRequest = new RequestCompletions("die", new LinePosition(0, 3));

            await kernel.SendAsync(firstCompletionRequest);

            var result = await kernel.SendAsync(secondCompletionRequest);

            var events = result.KernelEvents.ToSubscribedList();

            events
            .Should()
            .ContainSingle <CompletionsProduced>()
            .Which
            .Completions
            .Should()
            .Contain(item => item.DisplayText == "diego");
        }
Example #2
0
 public CompletionsProduced(
     IEnumerable <CompletionItem> completions,
     RequestCompletions command,
     LinePositionSpan linePositionSpan = null) : base(command)
 {
     Completions       = completions ?? throw new ArgumentNullException(nameof(completions));
     _linePositionSpan = linePositionSpan;
 }
        public async Task Handle(JupyterRequestContext context)
        {
            var completeRequest = GetJupyterRequest(context);

            var position = SourceUtilities.GetPositionFromCursorOffset(completeRequest.Code, completeRequest.CursorPosition);
            var command  = new RequestCompletions(completeRequest.Code, position);

            await SendAsync(context, command);
        }
Example #4
0
        public async Task RequestCompletions_prevents_RequestDiagnostics_from_producing_events(Language language)
        {
            var kernel = CreateKernel(language);

            MarkupTestFile.GetLineAndColumn("Console.$$", out var output, out var line, out var column);

            var requestDiagnosticsCommand = new RequestDiagnostics(output);

            var requestCompletionsCommand = new RequestCompletions(output, new LinePosition(line, column));
            var results = await Task.WhenAll(
                kernel.SendAsync(requestCompletionsCommand),
                kernel.SendAsync(requestDiagnosticsCommand)
                );

            var events = results.SelectMany(r => r.KernelEvents.ToSubscribedList()).ToList();

            events.Select(e => e.GetType())
            .Where(t => t == typeof(CommandSucceeded)).Should()
            .HaveCount(2);

            events.Should()
            .NotContain(e => e.GetType() == typeof(DiagnosticsProduced) && e.Command == requestDiagnosticsCommand);
        }
        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"))));
            }
        }
        public async Task <IEnumerable <CompletionItem> > ProvideCompletionItemsAsync(Uri fileUri, RequestCompletions command)
        {
            string oldFileContents = await UpdateFileContentsAsync(fileUri, command.Code);

            TextDocumentIdentifier docId = new TextDocumentIdentifier()
            {
                Uri = fileUri.ToString()
            };
            Position position = new Position()
            {
                Line = command.LinePosition.Line, Character = command.LinePosition.Character
            };
            CompletionContext context = new CompletionContext()
            {
                TriggerKind = (int)CompletionTriggerKind.Invoked
            };
            var completionParams = new CompletionParams()
            {
                TextDocument = docId, Position = position, Context = context
            };

            var sqlCompletionItems = await _rpc.InvokeWithParameterObjectAsync <SqlCompletionItem[]>("textDocument/completion", completionParams);

            return(sqlCompletionItems.Select(item =>
            {
                return new CompletionItem(
                    item.Label,
                    item.Kind != null ? Enum.GetName(typeof(SqlCompletionItemKind), item.Kind) : string.Empty,
                    item.FilterText,
                    item.SortText,
                    item.InsertText,
                    item.Documentation);
            }));
        }
Example #7
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"" ")));
            }
        }
        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")));
            }
        }
Example #9
0
 public Task HandleAsync(RequestCompletions command, KernelInvocationContext context)
 {
     return(SendCommandToRemoteKernel(command));
 }
Example #10
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"" ")));
            }
        }