Implement programmatic ReplMain API that allows binding local variables
#24257
+144
−4
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.
Possibly the last feature to port from Ammonite, as documented at https://ammonite.io/#Embedding. Can be used via
We basically wrap the
ReplDriverin a convenientReplMainclass that lets you call.runand pass in a bunch of(String, Any)key value pairs, with some implicit macros to also capture the type names.ReplMainstores these in a threadlocalMap[String, Any]and generates a REPL predef that reads the threadlocal map and assigns them to localdefs in the REPLLike Ammonite's implementation, this doesn't handle more sophisticated use cases like binding types or binding path-dependently-typed values. But for most day-to-day use it should be enough
Covered by unit tests, and tweaked
runUntilQuitslightly to allow an optionalhardcodedInput: java.io.InputStreamto be passed to simplify testing