mirror of
https://github.com/nushell/nushell
synced 2024-11-10 07:04:13 +00:00
update
command: make $in
(in closure body) takes cell path (#8610)
# Description Make `$in` takes cell path in `update` command The reason behind the change: https://discord.com/channels/601130461678272522/615329862395101194/1088405671080370196 > when i use update on some cell path, it's almost always because i want to start with its previous value and change it. cc @amtoine # User-Facing Changes ## Before ``` open Cargo.toml | get package | update metadata.binstall.pkg-fmt {|| $in.metadata.binstall.pkg-fmt | str replace "g" "FOO"} ``` ## After ``` open Cargo.toml | get package | update metadata.binstall.pkg-fmt {|| str replace "g" "FOO"} ``` If use want to access original raw, it can be accessed by parameters in closure: ``` open Cargo.toml | get package | update metadata.binstall.pkg-fmt {|$it| $it.metadata.binstall.pkg-fmt | str replace "g" "FOO"} ``` For this reason, I don't think we need to add a flag like `--whole` # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date.
This commit is contained in:
parent
1d68c48a92
commit
cbedc8403f
1 changed files with 11 additions and 1 deletions
|
@ -75,6 +75,11 @@ impl Command for Update {
|
|||
example: "[[project, authors]; ['nu', ['Andrés', 'JT', 'Yehuda']]] | update authors {|row| $row.authors | str join ','}",
|
||||
result: Some(Value::List { vals: vec![Value::Record { cols: vec!["project".into(), "authors".into()], vals: vec![Value::test_string("nu"), Value::test_string("Andrés,JT,Yehuda")], span: Span::test_data()}], span: Span::test_data()}),
|
||||
},
|
||||
Example {
|
||||
description: "You can also use a simple command to update 'authors' to a single string",
|
||||
example: "[[project, authors]; ['nu', ['Andrés', 'JT', 'Yehuda']]] | update authors {|| str join ','}",
|
||||
result: Some(Value::List { vals: vec![Value::Record { cols: vec!["project".into(), "authors".into()], vals: vec![Value::test_string("nu"), Value::test_string("Andrés,JT,Yehuda")], span: Span::test_data()}], span: Span::test_data()}),
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -118,11 +123,16 @@ fn update(
|
|||
}
|
||||
}
|
||||
|
||||
let input_at_path = match input.clone().follow_cell_path(&cell_path.members, false)
|
||||
{
|
||||
Err(e) => return Value::Error { error: Box::new(e) },
|
||||
Ok(v) => v,
|
||||
};
|
||||
let output = eval_block(
|
||||
&engine_state,
|
||||
&mut stack,
|
||||
&block,
|
||||
input.clone().into_pipeline_data(),
|
||||
input_at_path.into_pipeline_data(),
|
||||
redirect_stdout,
|
||||
redirect_stderr,
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue