Conversation
…SI session - Add 'inherit System.IDisposable' to IFsiEvaluator interface - Add Dispose() implementation in FsiEvaluator that calls fsiSession.Dispose() - In BuildCommand.fs, wrap ParseAndTransformScriptFile in try/finally to guarantee the FSI session is disposed after each .fsx file is processed - Update call sites to use 'new FsiEvaluator(...)' syntax as recommended when constructing IDisposable types Breaking change: custom implementations of IFsiEvaluator must now add a Dispose() method. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dsyme
approved these changes
Feb 26, 2026
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 This PR was created by Repo Assist, an automated AI assistant.
Closes #341.
Summary
IFsiEvaluatordid not inheritIDisposable, so the underlying F# interactive session started byFsiEvaluatorwas never disposed. Since a newFsiEvaluatoris created for each.fsxfile processed byfsdocs build, this caused a session leak on every literate script file evaluation.Changes
IFsiEvaluatornow inheritsSystem.IDisposable(breaking change — custom implementations must addDispose())FsiEvaluatorimplementsIDisposableby forwarding tofsiSession.Dispose()BuildCommand.fswrapsParseAndTransformScriptFileintry/finallyto guarantee the FSI session is disposed after each.fsxfile is processed, even if evaluation throwsnew FsiEvaluator(...)syntax as recommended for IDisposable typesBreaking Change Note
Adding
inherit IDisposabletoIFsiEvaluatoris a breaking change for any user who has implemented the interface directly. The more common usage — constructing and usingFsiEvaluator— is unaffected. This change should be noted in the release notes as a minor breaking addition.Test Status