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"); }
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); }
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); })); }
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"))); } }
public Task HandleAsync(RequestCompletions command, KernelInvocationContext context) { return(SendCommandToRemoteKernel(command)); }
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"" "))); } }