nushell/crates
Devyn Cairns 0c4d5330ee
Split the plugin crate (#12563)
# 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`
2024-04-27 12:08:12 -05:00
..
nu_plugin_custom_values Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_example Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu_plugin_formats Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu_plugin_gstat Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_inc Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_nu_example Add an example Nushell plugin written in Nushell itself (#12574) 2024-04-19 09:53:30 +03:00
nu_plugin_polars add tests to polars unique (#12683) 2024-04-27 12:04:54 -05:00
nu_plugin_python Fix the error output in the python plugin to match LabeledError (#12575) 2024-04-18 20:01:35 -05:00
nu_plugin_query Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_stress_internals Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-cli Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-cmd-base Remove the Value::Block case (#12582) 2024-04-21 07:03:33 +02:00
nu-cmd-dataframe Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-cmd-extra Fix an into bits example (#12668) 2024-04-25 19:38:28 -05:00
nu-cmd-lang Add deprecation warning to describe --collect-lazyrecords (#12667) 2024-04-26 16:36:30 +00:00
nu-cmd-plugin Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-color-config Refactor using ClosureEval types (#12541) 2024-04-22 14:15:09 +08:00
nu-command Fix inconsistent print behavior (#12675) 2024-04-27 00:25:11 +00:00
nu-engine Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-explore Replace subtraction of Instants and Durations with saturating subtractions (#12549) 2024-04-17 07:25:16 -05:00
nu-glob Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-json Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-lsp improve nu --lsp command tooltips (#12589) 2024-04-20 07:16:38 -05:00
nu-parser Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-path Accept filenames in other plugin management commands (#12639) 2024-04-24 06:28:45 -05:00
nu-plugin Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-plugin-core Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-plugin-engine Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-plugin-protocol Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-plugin-test-support Split the plugin crate (#12563) 2024-04-27 12:08:12 -05:00
nu-pretty-hex Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-protocol Fix inconsistent print behavior (#12675) 2024-04-27 00:25:11 +00:00
nu-std Fix circular source causing Nushell to crash (#12262) 2024-04-19 09:38:08 +03:00
nu-system Replace subtraction of Instants and Durations with saturating subtractions (#12549) 2024-04-17 07:25:16 -05:00
nu-table Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-term-grid Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-test-support Msgpack commands (#12664) 2024-04-26 06:23:16 -05:00
nu-utils Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nuon Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.