mirror of
https://github.com/nushell/nushell
synced 2024-12-28 14:03:09 +00:00
7071617f18
# Description When nushell calls a plugin it now sends a configuration `Value` from the nushell config under `$env.config.plugins.PLUGIN_SHORT_NAME`. This allows plugin authors to read configuration provided by plugin users. The `PLUGIN_SHORT_NAME` must match the registered filename after `nu_plugin_`. If you register `target/debug/nu_plugin_config` the `PLUGIN_NAME` will be `config` and the nushell config will loook like: $env.config = { # ... plugins: { config: [ some values ] } } Configuration may also use a closure which allows passing values from `$env` to a plugin: $env.config = { # ... plugins: { config: {|| $env.some_value } } } This is a breaking change for the plugin API as the `Plugin::run()` function now accepts a new configuration argument which is an `&Option<Value>`. If no configuration was supplied the value is `None`. Plugins compiled after this change should work with older nushell, and will behave as if the configuration was not set. Initially discussed in #10867 # User-Facing Changes * Plugins can read configuration data stored in `$env.config.plugins` * The plugin `CallInfo` now includes a `config` entry, existing plugins will require updates # Tests + Formatting - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting - [ ] Update [Creating a plugin (in Rust)](https://www.nushell.sh/contributor-book/plugins.html#creating-a-plugin-in-rust) [source](https://github.com/nushell/nushell.github.io/blob/main/contributor-book/plugins.md) - [ ] Add "Configuration" section to [Plugins documentation](https://www.nushell.sh/contributor-book/plugins.html)
124 lines
2.9 KiB
Rust
124 lines
2.9 KiB
Rust
use super::{fail_test, run_test_std};
|
|
use crate::tests::TestResult;
|
|
|
|
#[test]
|
|
fn mutate_nu_config() -> TestResult {
|
|
run_test_std(
|
|
r#"$env.config.footer_mode = 30; $env.config.footer_mode"#,
|
|
"30",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_ls() -> TestResult {
|
|
run_test_std(
|
|
r#"$env.config.ls.clickable_links = false; $env.config.ls.clickable_links"#,
|
|
"false",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_table() -> TestResult {
|
|
run_test_std(
|
|
r#"
|
|
$env.config.table.trim.methodology = wrapping
|
|
$env.config.table.trim.wrapping_try_keep_words = false
|
|
$env.config.table.trim.wrapping_try_keep_words
|
|
"#,
|
|
"false",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_menu() -> TestResult {
|
|
run_test_std(
|
|
r#"
|
|
$env.config.menus = [
|
|
{
|
|
name: menu
|
|
only_buffer_difference: true
|
|
marker: "M "
|
|
type: {}
|
|
style: {}
|
|
}
|
|
];
|
|
$env.config.menus.0.type.columns = 3;
|
|
$env.config.menus.0.type.columns
|
|
"#,
|
|
"3",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_keybindings() -> TestResult {
|
|
run_test_std(
|
|
r#"
|
|
$env.config.keybindings = [
|
|
{
|
|
name: completion_previous
|
|
modifier: shift
|
|
keycode: backtab
|
|
mode: [ vi_normal, vi_insert ]
|
|
event: { send: menuprevious }
|
|
}
|
|
];
|
|
$env.config.keybindings.0.keycode = 'char_x';
|
|
$env.config.keybindings.0.keycode
|
|
"#,
|
|
"char_x",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_color_nested() -> TestResult {
|
|
run_test_std(
|
|
r#"$env.config.color_config.shape_flag = 'cyan'; $env.config.color_config.shape_flag"#,
|
|
"cyan",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_completion() -> TestResult {
|
|
run_test_std(
|
|
r#"$env.config.completions.external.enable = false; $env.config.completions.external.enable"#,
|
|
"false",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_history() -> TestResult {
|
|
run_test_std(
|
|
r#"$env.config.history.max_size = 100; $env.config.history.max_size"#,
|
|
"100",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_nested_filesize() -> TestResult {
|
|
run_test_std(
|
|
r#"$env.config.filesize.format = 'kb'; $env.config.filesize.format"#,
|
|
"kb",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn mutate_nu_config_plugin() -> TestResult {
|
|
run_test_std(
|
|
r#"
|
|
$env.config.plugins = {
|
|
config: {
|
|
key1: value
|
|
key2: other
|
|
}
|
|
};
|
|
$env.config.plugins.config.key1 = 'updated'
|
|
$env.config.plugins.config.key1
|
|
"#,
|
|
"updated",
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn reject_nu_config_plugin_non_record() -> TestResult {
|
|
fail_test(r#"$env.config.plugins = 5"#, "should be a record")
|
|
}
|