-
Notifications
You must be signed in to change notification settings - Fork 375
/
FSharpKernelExtensions.fs
57 lines (44 loc) · 2.18 KB
/
FSharpKernelExtensions.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// 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.
namespace Microsoft.DotNet.Interactive.FSharp
open System
open System.Runtime.CompilerServices
open Microsoft.AspNetCore.Html
open Microsoft.DotNet.Interactive
open Microsoft.DotNet.Interactive.Commands
open Microsoft.DotNet.Interactive.FSharp
open Microsoft.DotNet.Interactive.Formatting
[<AbstractClass; Extension; Sealed>]
type FSharpKernelExtensions private () =
static let referenceFromType (typ: Type) = sprintf "#r \"%s\"" (typ.Assembly.Location.Replace("\\", "/"))
static let openNamespaceOrType (whatToOpen: string) = sprintf "open %s" whatToOpen
[<Extension>]
static member UseDefaultFormatting(kernel: FSharpKernel) =
let code =
[
referenceFromType typeof<IHtmlContent>
referenceFromType typeof<Kernel>
referenceFromType typeof<FSharpKernelHelpers.IMarker>
referenceFromType typeof<Formatter>
openNamespaceOrType typeof<System.Console>.Namespace
openNamespaceOrType typeof<System.IO.File>.Namespace
openNamespaceOrType typeof<System.Text.StringBuilder>.Namespace
openNamespaceOrType typeof<Formatter>.Namespace
] |> String.concat Environment.NewLine
kernel.DeferCommand(SubmitCode code)
kernel
[<Extension>]
static member UseDefaultNamespaces(kernel: FSharpKernel) =
// F# has its own views on what namespaces are open by default in its scripting model
kernel
[<Extension>]
static member UseKernelHelpers(kernel: FSharpKernel) =
let code =
[
referenceFromType typeof<FSharpKernelHelpers.IMarker>
// opens Microsoft.DotNet.Interactive.FSharp.FSharpKernelHelpers
// note this has some AutoOpen content inside
openNamespaceOrType (typeof<FSharpKernelHelpers.IMarker>.Namespace)
] |> String.concat Environment.NewLine
kernel.DeferCommand(SubmitCode code)
kernel