-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.
Already on GitHub? Sign in to your account
Split the plugin crate #12563
Split the plugin crate #12563
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That was quick and seemingly relatively painless.
Not quite sure if we need the nu-plugin-protocol
/ nu-plugin-core
split yet but there is probably not much harm.
Is there a specificly raised need to remove the socket support, otherwise I am inclined to say that added feature causes complexity for testing and ensuring compatibility between nu and plugin builds.
With your recent polishing here, are we good to go to land this and prep the release script? |
I think I'd probably like to see #12607 merge too first, then I can fix all of the conflicts from all of that effort |
It's ok for now, but will probably conflict with some of the other PRs |
And the guaranteed conflicts came 馃槅 |
# Description This breaks `nu-plugin` up into four crates: - `nu-plugin-protocol`: just the type definitions for the protocol, no I/O. If someone wanted to wire up something more bare metal, maybe for async I/O, they could use this. - `nu-plugin-core`: the shared stuff between engine/plugin. Less stable interface. - `nu-plugin-engine`: everything required for the engine to talk to plugins. Less stable interface. - `nu-plugin`: everything required for the plugin to talk to the engine, what plugin developers use. Should be the most stable interface. No changes are made to the interface exposed by `nu-plugin` - it should all still be there. Re-exports from `nu-plugin-protocol` or `nu-plugin-core` are used as required. Plugins shouldn't ever have to use those crates directly. This should be somewhat faster to compile as `nu-plugin-engine` and `nu-plugin` can compile in parallel, and the engine doesn't need `nu-plugin` and plugins don't need `nu-plugin-engine` (except for test support), so that should reduce what needs to be compiled too. The only significant change here other than splitting stuff up was to break the `source` out of `PluginCustomValue` and create a new `PluginCustomValueWithSource` type that contains that instead. One bonus of that is we get rid of the option and it's now more type-safe, but it also means that the logic for that stuff (actually running the plugin for custom value ops) can live entirely within the `nu-plugin-engine` crate. # User-Facing Changes - New crates. - Added `local-socket` feature for `nu` to try to make it possible to compile without that support if needed. # Tests + Formatting - 馃煝 `toolkit fmt` - 馃煝 `toolkit clippy` - 馃煝 `toolkit test` - 馃煝 `toolkit test stdlib`
Description
This breaks
nu-plugin
up into four crates:nu-plugin-protocol
: just the type definitions for the protocol, no I/O. If someone wanted to wire up something more bare metal, maybe for async I/O, they could use this.nu-plugin-core
: the shared stuff between engine/plugin. Less stable interface.nu-plugin-engine
: everything required for the engine to talk to plugins. Less stable interface.nu-plugin
: everything required for the plugin to talk to the engine, what plugin developers use. Should be the most stable interface.No changes are made to the interface exposed by
nu-plugin
- it should all still be there. Re-exports fromnu-plugin-protocol
ornu-plugin-core
are used as required. Plugins shouldn't ever have to use those crates directly.This should be somewhat faster to compile as
nu-plugin-engine
andnu-plugin
can compile in parallel, and the engine doesn't neednu-plugin
and plugins don't neednu-plugin-engine
(except for test support), so that should reduce what needs to be compiled too.The only significant change here other than splitting stuff up was to break the
source
out ofPluginCustomValue
and create a newPluginCustomValueWithSource
type that contains that instead. One bonus of that is we get rid of the option and it's now more type-safe, but it also means that the logic for that stuff (actually running the plugin for custom value ops) can live entirely within thenu-plugin-engine
crate.User-Facing Changes
local-socket
feature fornu
to try to make it possible to compile without that support if needed.Tests + Formatting
toolkit fmt
toolkit clippy
toolkit test
toolkit test stdlib