From 651779b90a2f1780071a3d1f1d6d9455e5bdbdd9 Mon Sep 17 00:00:00 2001 From: Jon Sequeira Date: Sat, 27 Aug 2022 14:35:25 -0700 Subject: [PATCH 1/2] make #!who/#!whos formatting --- src/dotnet-repl/DefaultSpectreFormatterSet.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/dotnet-repl/DefaultSpectreFormatterSet.cs b/src/dotnet-repl/DefaultSpectreFormatterSet.cs index c70d970..aeffa3d 100644 --- a/src/dotnet-repl/DefaultSpectreFormatterSet.cs +++ b/src/dotnet-repl/DefaultSpectreFormatterSet.cs @@ -4,6 +4,7 @@ using Microsoft.DotNet.Interactive; using Microsoft.DotNet.Interactive.Formatting; using Microsoft.DotNet.Interactive.Formatting.TabularData; +using Microsoft.DotNet.Interactive.ValueSharing; using Spectre.Console; using Spectre.Console.Rendering; @@ -83,6 +84,37 @@ internal class DefaultSpectreFormatterSet return true; }), + + new SpectreFormatter((values, context, console) => + { + if (values.Detailed) + { + var table = new Table(); + + table.AddColumn("Name"); + table.AddColumn("Type"); + table.AddColumn("Value"); + + foreach (var value in values) + { + table.AddRow( + value.Name, + value.Type.ToDisplayString("text/plain"), + value.Value.ToDisplayString("text/plain")); + } + + console.Write(table); + } + else + { + foreach (var value in values) + { + console.WriteLine(value.Name); + } + } + + return true; + }) }; public void Register() From f1ac3c70098b81c0f56cd6d29b2c1aefe787710b Mon Sep 17 00:00:00 2001 From: Jon Sequeira Date: Sat, 27 Aug 2022 14:36:02 -0700 Subject: [PATCH 2/2] improve HTML support --- src/dotnet-repl/CommandLineParser.cs | 4 +--- src/dotnet-repl/HtmlKernel.cs | 25 ------------------------- src/dotnet-repl/KernelBuilder.cs | 15 +++++++++++---- src/dotnet-repl/StartupOptions.cs | 2 ++ src/dotnet-repl/dotnet-repl.csproj | 22 +++++++++++----------- 5 files changed, 25 insertions(+), 43 deletions(-) delete mode 100644 src/dotnet-repl/HtmlKernel.cs diff --git a/src/dotnet-repl/CommandLineParser.cs b/src/dotnet-repl/CommandLineParser.cs index 5fd3728..996b4b6 100644 --- a/src/dotnet-repl/CommandLineParser.cs +++ b/src/dotnet-repl/CommandLineParser.cs @@ -133,9 +133,7 @@ public static async Task StartAsync( } } - var isAutomationMode = options.ExitAfterRun || !isTerminal || options.OutputPath is { }; - - if (!isAutomationMode) + if (!options.IsAutomationMode) { Repl.UseDefaultSpectreFormatting(); diff --git a/src/dotnet-repl/HtmlKernel.cs b/src/dotnet-repl/HtmlKernel.cs deleted file mode 100644 index a462ea1..0000000 --- a/src/dotnet-repl/HtmlKernel.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System.Threading.Tasks; -using Microsoft.DotNet.Interactive; -using Microsoft.DotNet.Interactive.Commands; - -namespace dotnet_repl; - -public class HtmlKernel : Kernel, IKernelCommandHandler -{ - private readonly Kernel _innerJsKernel; - - public HtmlKernel(Kernel innerJsKernel) : base("html", "HTML", "5.0") - { - _innerJsKernel = innerJsKernel; - } - - public async Task HandleAsync(SubmitCode command, KernelInvocationContext context) - { - var jsCode = $"await dotnetInteractive.domHtmlFragmentProcessor('{command.Code}');"; - - await _innerJsKernel.SendAsync(new SubmitCode(jsCode)); - } -} \ No newline at end of file diff --git a/src/dotnet-repl/KernelBuilder.cs b/src/dotnet-repl/KernelBuilder.cs index fa4733c..64cc8f4 100644 --- a/src/dotnet-repl/KernelBuilder.cs +++ b/src/dotnet-repl/KernelBuilder.cs @@ -76,10 +76,17 @@ public static CompositeKernel CreateKernel(StartupOptions? options = null) new KeyValueStoreKernel() .UseWho()); - var playwrightKernel = Task.Run(() => new PlaywrightKernelConnector().CreateKernelAsync("javascript")).Result; - compositeKernel.Add(playwrightKernel, new[] { "js" }); - playwrightKernel.KernelInfo.SupportedKernelCommands.Add(new KernelCommandInfo("SubmitCode")); - compositeKernel.Add(new HtmlKernel(playwrightKernel)); + var playwrightConnector = new PlaywrightKernelConnector(); + + var (htmlKernel, jsKernel) = Task.Run(async () => + { + var htmlKernel = await playwrightConnector.CreateKernelAsync("html"); + var jsKernel = await playwrightConnector.CreateKernelAsync("javascript"); + return (htmlKernel, jsKernel); + }).Result; + + compositeKernel.Add(jsKernel, new[] { "js" }); + compositeKernel.Add(htmlKernel); compositeKernel.Add(new MarkdownKernel()); compositeKernel.Add(new SqlDiscoverabilityKernel()); compositeKernel.Add(new KqlDiscoverabilityKernel()); diff --git a/src/dotnet-repl/StartupOptions.cs b/src/dotnet-repl/StartupOptions.cs index 0a95de1..d5d7219 100644 --- a/src/dotnet-repl/StartupOptions.cs +++ b/src/dotnet-repl/StartupOptions.cs @@ -35,4 +35,6 @@ public StartupOptions( public OutputFormat OutputFormat { get; } public FileInfo? OutputPath { get; } + + public bool IsAutomationMode => ExitAfterRun || OutputPath is { }; } \ No newline at end of file diff --git a/src/dotnet-repl/dotnet-repl.csproj b/src/dotnet-repl/dotnet-repl.csproj index b08f4cf..5d4dad0 100644 --- a/src/dotnet-repl/dotnet-repl.csproj +++ b/src/dotnet-repl/dotnet-repl.csproj @@ -25,12 +25,17 @@ - - - - - - + + + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -43,11 +48,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - -