Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
2fdebfb
Add the F# Interactive window on the JSON-RPC protocol
xperiandri Aug 30, 2026
bc7bc75
Put the interactive window into the VSIX
xperiandri Aug 30, 2026
dccca06
Point the editor's interactive commands at the new window
xperiandri Aug 30, 2026
c5f8f81
Let the window be pointed at an F# Interactive that speaks the protocol
xperiandri Aug 30, 2026
9b2f694
Use string interpolation instead of sprintf
xperiandri Aug 30, 2026
24f758b
Compare strings with an explicit StringComparison
xperiandri Aug 30, 2026
9a814d3
Declare the window's identities publicly and reuse the language servi…
xperiandri Aug 30, 2026
2c35384
Prefer ValueOption in the new code
xperiandri Aug 30, 2026
a36bf29
Build the strings by interpolation
xperiandri Aug 30, 2026
e717220
Finish the ValueOption conversion
xperiandri Aug 30, 2026
9f901fb
Check nullness in the interactive window
xperiandri Aug 30, 2026
94a6d0b
Test for null by matching
xperiandri Aug 30, 2026
f7f2a3e
Test for null by matching in the editor command filter
xperiandri Aug 30, 2026
fb306e2
Match instead of laddering through if and elif
xperiandri Aug 30, 2026
500a53a
Name the command and bracket cases with active patterns
xperiandri Aug 30, 2026
43b387e
Share the server option name with the hosts that pass it
xperiandri Aug 30, 2026
c3e7720
Compare platform names with an explicit StringComparison again
xperiandri Aug 30, 2026
87bff12
Point the F5 experimental instance at the locally built fsi
xperiandri Aug 30, 2026
7a25a9a
Colour the interactive window's input lexically
xperiandri Aug 30, 2026
bd2c835
Colour the session's output too
xperiandri Aug 30, 2026
1a40aee
Recognise the output buffer as ours
xperiandri Aug 30, 2026
135102d
Name the host process on the session's command line
xperiandri Sep 20, 2026
b98b1ad
Start the window's session where `dotnet fsi` would, and only on .NET
xperiandri Sep 20, 2026
7ce46ae
Put the window's server switches after the user's arguments
xperiandri Sep 21, 2026
a117071
Leave the lexer to the editor: the window no longer compiles against …
xperiandri Sep 21, 2026
fb40ffc
Install the .NET F# Interactive with Visual Studio
xperiandri Sep 24, 2026
7580397
Fall back to the F# Interactive installed with Visual Studio
xperiandri Sep 24, 2026
6db76da
Claim only the send commands in the editor's command status
xperiandri Sep 29, 2026
81b7c43
Do not install a session that exited before it was published
xperiandri Sep 29, 2026
c9b1932
Forget an editor submission's origin when its execution fails
xperiandri Sep 29, 2026
b543537
Open a new window after the old one is closed
xperiandri Sep 29, 2026
d74dfcc
Bring the interactive window plan's status up to date
xperiandri Sep 29, 2026
9b95f7a
Compact the interactive window: no plan document, no unused members, …
xperiandri Oct 11, 2026
512effa
Compact the interactive window further: tabled tests, one candidate c…
xperiandri Oct 11, 2026
4e2785d
Merge branch 'main' into modern-repl
abonie Oct 21, 2026
aa8e698
Remove duplicate Shell.Design central package version
abonie Oct 22, 2026
09f9fa9
Fix VS SDK compatibility after merging main
abonie Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions VisualFSharp.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@
<Project Path="vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj">
<BuildType Solution="Proto|*" Project="Release" />
</Project>
<Project Path="vsintegration/src/FSharp.Interactive.Window/FSharp.Interactive.Window.fsproj">
<BuildType Solution="Proto|*" Project="Release" />
</Project>
<Project Path="vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj">
<BuildType Solution="Proto|*" Project="Release" />
</Project>
Expand Down
2 changes: 2 additions & 0 deletions docs/release-notes/.VisualStudio/18.vNext.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

* Add maintainer-requested F# Apex Visual Studio integration tests on DartLab-1ES CloudTest, using PR pipeline definitions pinned to an explicitly requested commit SHA. ([PR #20625](https://github.com/dotnet/fsharp/pull/20625))
* Code-fixes for FS3888 (compiler-semantic attribute on the `.fs` but not the `.fsi`): copy the attribute into the `.fsi`, or remove it from the `.fs`. ([Issue #19560](https://github.com/dotnet/fsharp/issues/19560), [PR #19880](https://github.com/dotnet/fsharp/pull/19880))
* The F# Interactive window is rebuilt on the Interactive Window package and talks to `dotnet fsi` over its JSON-RPC server mode: the input and output are coloured, Enter submits only a complete interaction, diagnostics carry positions in the submitted file, and the session starts in the solution folder, so the SDK that `global.json` names supplies the compiler; until the .NET SDK includes the server (11.0.200), Visual Studio installs an F# Interactive of its own for the window to fall back to. ([PR #20565](https://github.com/dotnet/fsharp/pull/20565))
* Expand `<inheritdoc/>` in IDE tooltips, completion, and signature help, inheriting XML documentation from base classes, interfaces, overridden members, and constructors. ([Issue #19175](https://github.com/dotnet/fsharp/issues/19175), [PR #19188](https://github.com/dotnet/fsharp/pull/19188))
* Added a **Tools > Options > F# Tools > Compiler** option, **"Use the .NET SDK F# compiler for builds"**, on by default. Visual Studio uses the .NET SDK F# compiler when the project supplies SDK paths, matching `dotnet build`. Otherwise, it uses the bundled .NET Framework compiler. Turn the option off to use the bundled compiler for all projects. Changes are saved on Apply or OK; Cancel discards unsaved changes. Command-line builds are unaffected. ([Issue #20484](https://github.com/dotnet/fsharp/issues/20484), [PR #20485](https://github.com/dotnet/fsharp/pull/20485))
* F# types, modules, members and values now appear in the GitHub Copilot Chat `#` mention picker, and attach their declaration source as context. ([PR #20409](https://github.com/dotnet/fsharp/pull/20409))
Expand All @@ -21,6 +22,7 @@
* Make Alt+F1 (momentary toggle) work for inlay hints. ([PR #19421](https://github.com/dotnet/fsharp/pull/19421))
* Fix doubled F# diagnostics in tooltips. ([Issue #16360](https://github.com/dotnet/fsharp/issues/16360))
* Fix `NotSupportedException` in the memory-mapped-file optimization when copying `ReadOnlyMemory` into `MemoryMappedFileViewStream`. ([Issue #20263](https://github.com/dotnet/fsharp/issues/20263))
* Handle unavailable document and classification information in the F# Interactive window with the updated Visual Studio SDK. ([PR #20565](https://github.com/dotnet/fsharp/pull/20565))
* Reduce allocations in the VS project options reactor: the command-line options and project options caches and the mailbox reply payloads now hold struct tuples, and `IProjectSite.CompilationBinOutputPath` returns `string voption` picked with a new `Array.tryPickV`. ([PR #20413](https://github.com/dotnet/fsharp/pull/20413))
* Build a single-file project's `OtherOptions` reference flags with one array comprehension instead of two `Array.ofSeq` calls and an `Array.append`. ([PR #20499](https://github.com/dotnet/fsharp/pull/20499))
* Fix syntax coloring being lost for a whole file when one symbol resolves into metadata that could not be read. ([Issue #20269](https://github.com/dotnet/fsharp/issues/20269), [PR #20274](https://github.com/dotnet/fsharp/pull/20274))
Expand Down
4 changes: 4 additions & 0 deletions eng/Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Sdk" Version="17.13.39620" />
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Testing.SourceGenerator" Version="$(MicrosoftVisualStudioExtensibilityTestingVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Testing.Xunit" Version="$(MicrosoftVisualStudioExtensibilityTestingVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.InteractiveWindow" Version="4.0.0" />
<PackageVersion Include="Microsoft.VisualStudio.Language.Intellisense" Version="$(VisualStudioEditorPackagesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Language.StandardClassification" Version="$(VisualStudioEditorPackagesVersion)" />
<!-- Pinned to 17.13.9 (not the projects' 17.13.6-preview floor) because Protocol.Internal 17.13.9,
Expand All @@ -93,6 +94,9 @@
<PackageVersion Include="Microsoft.VisualStudio.ProjectSystem" Version="18.0.1237-pre" />
<PackageVersion Include="Microsoft.VisualStudio.ProjectSystem.Managed" Version="2.3.6152103" />
<PackageVersion Include="Microsoft.VisualStudio.ProjectSystem.Query" Version="17.13.66" />
<!-- Match the minimum required by Shell.Design, Package.LanguageService.15.0, and the Roslyn IDE packages. -->
<PackageVersion Include="Microsoft.VisualStudio.Shell.15.0" Version="18.12.772" />
<PackageVersion Include="Microsoft.VisualStudio.VsInteractiveWindow" Version="4.0.0" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Design" Version="18.12.772" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Immutable.10.0" Version="10.0.30319" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Immutable.11.0" Version="11.0.50727" />
Expand Down
2 changes: 1 addition & 1 deletion eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
via Microsoft.CodeAnalysis.EditorFeatures / .LanguageServices.ExternalAccess 5.11.0). Full NU1109
rationale lives there, next to the 18.9.x pins. -->
<VisualStudioEditorPackagesVersion>18.12.46</VisualStudioEditorPackagesVersion>
<MicrosoftVisualStudioExtensibilityTestingVersion>0.1.800-beta</MicrosoftVisualStudioExtensibilityTestingVersion>
<MicrosoftVisualStudioExtensibilityTestingVersion>5.6.0-2.26151.2</MicrosoftVisualStudioExtensibilityTestingVersion>

<!-- Apex VS integration-test packages, consumed by-name via $(...) in
vsintegration/tests/FSharp.Editor.Apex.IntegrationTests, so they stay properties here. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
<ProjectReference Include="$(FSharpSourcesRoot)\fsc\fscAnyCpuProject\fscAnyCpu.fsproj" />
<ProjectReference Include="$(FSharpSourcesRoot)\fsc\fscArm64Project\fscArm64.fsproj" />
<ProjectReference Include="$(FSharpSourcesRoot)\fsi\fsiProject\fsi.fsproj" />
<!-- The .NET build of fsi, the only one with the JSON-RPC server: the F# Interactive window falls
back to it when the SDK's `dotnet fsi` has none. -->
<ProjectReference Include="$(FSharpSourcesRoot)\fsi\fsiProject\fsi.fsproj"
SetTargetFramework="TargetFramework=$(FSharpNetCoreProductTargetFramework)"
ReferenceOutputAssembly="false"
SkipGetTargetFrameworkProperties="true"
Private="false" />
<ProjectReference Include="$(FSharpSourcesRoot)\fsi\fsiAnyCpuProject\fsiAnyCpu.fsproj" />
<ProjectReference Include="$(FSharpSourcesRoot)\fsi\fsiArm64Project\fsiArm64.fsproj" />
<ProjectReference Include="$(FSharpSourcesRoot)\FSharp.Build\FSharp.Build.fsproj" />
Expand Down Expand Up @@ -40,8 +47,43 @@
</CreateItem>
</Target>

<PropertyGroup>
<_InteractiveBinaries>$(BinariesFolder)fsi\$(Configuration)\$(FSharpNetCoreProductTargetFramework)\</_InteractiveBinaries>
<_InteractiveInstallDir>InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\Interactive</_InteractiveInstallDir>
<_SwrNewLine><![CDATA[
]]></_SwrNewLine>
</PropertyGroup>

<!-- Under `dotnet exec` and without fsi.deps.json the host loads the assemblies next to fsi.dll, so the
folder is those and the runtime configuration. The block is one item, as the other blocks are:
MSBuild trims the indentation from the start of each item. -->
<Target Name="_GenerateInteractiveSwrFileContents">
<ItemGroup>
<_InteractiveFile Include="$(_InteractiveBinaries)*.dll;$(_InteractiveBinaries)fsi.runtimeconfig.json" />
</ItemGroup>
<PropertyGroup>
<_InteractiveBlock>folder "$(_InteractiveInstallDir)"$(_SwrNewLine)@(_InteractiveFile->' file source="%(FullPath)"', '$(_SwrNewLine)')$(_SwrNewLine)</_InteractiveBlock>
</PropertyGroup>
<ItemGroup>
<_BuiltSwrLines Include="$(_InteractiveBlock)" />
</ItemGroup>
</Target>

<!-- For each localization language, include the appropriate satellite assemblies. -->
<Target Name="_GenerateLocSwrFileContents" DependsOnTargets="_GenerateLanguageList" Outputs="%(_XlfLanguages.Identity)">
<PropertyGroup>
<_Language>%(_XlfLanguages.Identity)</_Language>
</PropertyGroup>
<ItemGroup>
<_InteractiveSatellite Remove="@(_InteractiveSatellite)" />
<_InteractiveSatellite Include="$(_InteractiveBinaries)$(_Language)\*.resources.dll" />
</ItemGroup>
<PropertyGroup>
<_InteractiveSatelliteBlock>folder "$(_InteractiveInstallDir)\$(_Language)"$(_SwrNewLine)@(_InteractiveSatellite->' file source="%(FullPath)"', '$(_SwrNewLine)')$(_SwrNewLine)</_InteractiveSatelliteBlock>
</PropertyGroup>
<ItemGroup>
<_BuiltSwrLines Include="$(_InteractiveSatelliteBlock)" Condition="'@(_InteractiveSatellite)' != ''" />
</ItemGroup>
<PropertyGroup>
<_Line>
<![CDATA[
Expand All @@ -64,7 +106,7 @@ folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\%(_XlfLan
</PropertyGroup>
</Target>

<Target Name="_GenerateSwrFile" AfterTargets="Build" BeforeTargets="SwixBuild" DependsOnTargets="_SetSwrFilePath;_GenerateLocSwrFileContents" Outputs="$(_SwrFilePath)">
<Target Name="_GenerateSwrFile" AfterTargets="Build" BeforeTargets="SwixBuild" DependsOnTargets="_SetSwrFilePath;_GenerateInteractiveSwrFileContents;_GenerateLocSwrFileContents" Outputs="$(_SwrFilePath)">

<PropertyGroup>
<_Lines>
Expand Down
12 changes: 8 additions & 4 deletions src/fsi/interactiveProtocol.fs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ module Methods =
[<Literal>]
let Shutdown = "fsi/shutdown"

module CommandLine =
[<Literal>]
let ServerOption = "--fsi-server-jsonrpc:"

[<CLIMutable>]
type InitializeResult =
{
Expand Down Expand Up @@ -67,7 +71,7 @@ type ExecuteRequest =
/// with <c>startLine</c> this makes diagnostics point at the user's own source rather than
/// at a position within the submission.
/// </summary>
sourcePath: string
sourcePath: string | null

startLine: System.Nullable<int>
}
Expand All @@ -78,7 +82,7 @@ type ExecuteFileRequest = { path: string }
[<CLIMutable>]
type SetPathsRequest =
{
includePaths: string[]
includePaths: string[] | null
workingDirectory: string
}

Expand Down Expand Up @@ -123,8 +127,8 @@ type ExecutionResult =
success: bool

cancelled: bool
diagnostics: DiagnosticInfo[]
``exception``: ExceptionInfo
diagnostics: DiagnosticInfo[] | null
``exception``: ExceptionInfo | null
values: ValueInfo[]

/// Reported after every interaction so that the host can keep its own view of the session
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,18 @@
<Compile Include="$(FSharpSourcesRoot)\fsi\interactiveProtocol.fs">
<Link>interactiveProtocol.fs</Link>
</Compile>
<!-- The Visual Studio window's submission rule and the editor's lexer it runs on, linked here so
that testing the two together needs no Windows-only host. -->
<Compile Include="$(MSBuildThisFileDirectory)..\..\vsintegration\src\FSharp.Interactive.Window\LexicalScanning.fs">
<Link>LexicalScanning.fs</Link>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)..\..\vsintegration\src\FSharp.Editor\Commands\InteractiveLexicalScanner.fs">
<Link>InteractiveLexicalScanner.fs</Link>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)..\..\vsintegration\src\FSharp.Interactive.Window\SubmissionAnalysis.fs">
<Link>SubmissionAnalysis.fs</Link>
</Compile>
<Compile Include="SubmissionAnalysisTests.fs" />
<Compile Include="FsiServerHarness.fs" />
<Compile Include="FsiJsonRpcServerTests.fs" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,24 @@ let ``the session exits when its host process exits`` () =

Assert.True(session.WaitForExit 30_000, "the session outlived its host process")

[<Fact>]
let ``the last owner named on the command line is the one that counts`` () =
// A host puts its own switches after the user's arguments to keep them from naming another owner,
// which holds only if the last occurrence wins.
use earlier = new FsiServerHarness()

use session =
new FsiServerHarness(
serverSwitches = fun pipeName -> [ $"--fsi-server-client-pid:{earlier.ProcessId}"; $"--fsi-server-jsonrpc:{pipeName}" ]
)

session.Initialize() |> ignore

(earlier :> IDisposable).Dispose()

Assert.False(session.WaitForExit 5_000, "the session followed the owner named first")
Assert.True(succeeded (session.Execute "1 + 1"))

//-------------------------------------------------------------------------
// What ships
//-------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ type FsiServerHarness
locateFsi (defaultArg fsiDirectory (fsiOutputDirectory ()))

let serverSwitches =
defaultArg serverSwitches (fun pipeName -> [ $"--fsi-server-jsonrpc:{pipeName}" ])
defaultArg serverSwitches (fun pipeName -> [ $"{CommandLine.ServerOption}{pipeName}" ])

let arguments =
[
Expand Down Expand Up @@ -229,7 +229,7 @@ type FsiServerHarness
let deadline = DateTime.UtcNow + defaultArg timeout (TimeSpan.FromSeconds 30.0)

let rec wait () =
if this.StandardOutput.Contains text then true
if this.StandardOutput.Contains(text, StringComparison.Ordinal) then true
elif DateTime.UtcNow > deadline then false
else
Thread.Sleep 50
Expand Down Expand Up @@ -331,10 +331,10 @@ let diagnostics (result: ExecutionResult) =
| items -> items

let errors result =
diagnostics result |> Array.filter (fun d -> d.severity = "error")
diagnostics result |> Array.filter (fun d -> String.Equals(d.severity, "error", StringComparison.Ordinal))

let warnings result =
diagnostics result |> Array.filter (fun d -> d.severity = "warning")
diagnostics result |> Array.filter (fun d -> String.Equals(d.severity, "warning", StringComparison.Ordinal))

let succeeded (result: ExecutionResult) = result.success

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.

/// The rule that decides whether Enter submits an interaction or adds another line.
module FSharp.Compiler.Interactive.Server.Tests.SubmissionAnalysisTests

open Xunit

open Microsoft.VisualStudio.FSharp.Editor
open Microsoft.VisualStudio.FSharp.Interactive

let private scanners = FSharpLexicalScannerFactory() :> ILexicalScannerFactory

let private scenario (completes: bool) (name: string) (texts: string list) : obj[] list =
texts |> List.map (fun text -> [| box name; box completes; box text |])

let private submits = scenario true
let private takesAnotherLine = scenario false

let scenarios: obj[] seq =
[
submits "an explicit terminator always submits, even mid-construct" [ "1 + 1;;"; "let f x =\n x + 1\n;;"; "let xs = [1; 2];;" ]
submits "a finished expression submits without a terminator" [ "1 + 1"; "printfn \"hi\""; "let x = 40"; "let f a b =\n a + b" ]
takesAnotherLine "a line that visibly continues" [ "let x ="; "fun x ->"; "1 +"; "if true then" ]
takesAnotherLine "an unclosed bracket" [ "printfn (\"a\""; "let xs = [1; 2"; "let xs = [| 1; 2"; "let r = {| A = 1" ]
submits "closed brackets do not hold the submission open" [ "printfn (\"a\")"; "let xs = [1; 2]"; "let xs = [| 1; 2 |]" ]
takesAnotherLine "an unterminated string or comment" [ "let s = \"abc"; "(* comment" ]
submits "brackets and terminators inside a string do not count" [ "let s = \"([{\""; "let s = \"a;;b\"" ]
submits "a string literal can end a submission: the last token is the literal, not the '=' before it" [ "let greeting = \"hello\"" ]
takesAnotherLine "a terminator inside a string is not a terminator" [ "let s = \";;" ]
submits "a comment does not change what the last token was" [ "let x = 1 // ([\n"; "(* c *) let x = 1" ]
takesAnotherLine "a comment does not change what the last token was" [ "let x = // nothing yet" ]
submits "an empty submission, which the window uses to start a session that has gone away" [ ""; " \n " ]
]
|> Seq.concat

[<Theory>]
[<MemberData(nameof scenarios)>]
let ``Enter submits only what is visibly finished`` (scenario: string) (completes: bool) (text: string) =
Assert.True((SubmissionAnalysis.isComplete scanners text = completes), $"{scenario}: <<{text}>>")

[<Theory>]
[<InlineData("1 + 1;;", "1 + 1;;")>]
[<InlineData("1 + 1", "1 + 1\n;;")>]
[<InlineData("let s = \"a;;b\"", "let s = \"a;;b\"\n;;")>]
let ``the terminator is added only when it is missing`` (text: string) (expected: string) =
Assert.Equal(expected, SubmissionAnalysis.withTerminator scanners text)
2 changes: 2 additions & 0 deletions vsintegration/Vsix/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
<VSSDKTargetPlatformRegRootSuffix>$(VSRootSuffix)</VSSDKTargetPlatformRegRootSuffix>
<!-- Path to the locally built F# compiler for use during VSIX debugging -->
<FSharpCompilerPathForDebuggingLocally>$(ArtifactsDir)bin\fscAnyCpu\$(Configuration)\net472\</FSharpCompilerPathForDebuggingLocally>
<!-- Same for F# Interactive: the .NET build, the one with the JSON-RPC server, run on the repository's dotnet -->
<FSharpInteractivePathForDebuggingLocally>$(ArtifactsDir)bin\fsi\$(Configuration)\$(FSharpNetCoreProductTargetFramework)\fsi.dll</FSharpInteractivePathForDebuggingLocally>
<CreateVsixContainer>true</CreateVsixContainer>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"FSharpPreferAnyCpuTools": "true",
"Fsc_NetFramework_ToolPath": "$(FSharpCompilerPathForDebuggingLocally)",
"Fsc_NetFramework_AnyCpu_ToolExe": "fscAnyCpu.exe",
"FSHARP_OTEL_EXPORT": ""
"FSHARP_OTEL_EXPORT": "",
"FSHARP_INTERACTIVE_PATH": "$(FSharpInteractivePathForDebuggingLocally)"
}
},
"OTEL Export": {
Expand All @@ -27,7 +28,8 @@
"FSharpPreferAnyCpuTools": "true",
"Fsc_NetFramework_ToolPath": "$(FSharpCompilerPathForDebuggingLocally)",
"Fsc_NetFramework_AnyCpu_ToolExe": "fscAnyCpu.exe",
"FSHARP_OTEL_EXPORT": "http://127.0.0.1:4317"
"FSHARP_OTEL_EXPORT": "http://127.0.0.1:4317",
"FSHARP_INTERACTIVE_PATH": "$(FSharpInteractivePathForDebuggingLocally)"
}
}
}
Expand Down
Loading
Loading