nushell/crates/nu-command/src/filesystem
Ian Manske 8da27a1a09
Create Record type (#10103)
# Description
This PR creates a new `Record` type to reduce duplicate code and
possibly bugs as well. (This is an edited version of #9648.)
- `Record` implements `FromIterator` and `IntoIterator` and so can be
iterated over or collected into. For example, this helps with
conversions to and from (hash)maps. (Also, no more
`cols.iter().zip(vals)`!)
- `Record` has a `push(col, val)` function to help insure that the
number of columns is equal to the number of values. I caught a few
potential bugs thanks to this (e.g. in the `ls` command).
- Finally, this PR also adds a `record!` macro that helps simplify
record creation. It is used like so:
   ```rust
   record! {
       "key1" => some_value,
       "key2" => Value::string("text", span),
       "key3" => Value::int(optional_int.unwrap_or(0), span),
       "key4" => Value::bool(config.setting, span),
   }
   ```
Since macros hinder formatting, etc., the right hand side values should
be relatively short and sweet like the examples above.

Where possible, prefer `record!` or `.collect()` on an iterator instead
of multiple `Record::push`s, since the first two automatically set the
record capacity and do less work overall.

# User-Facing Changes
Besides the changes in `nu-protocol` the only other breaking changes are
to `nu-table::{ExpandedTable::build_map, JustTable::kv_table}`.
2023-08-25 07:50:29 +12:00
..
cd_query.rs Fix typos by codespell (#7600) 2022-12-26 02:31:26 -05:00
cd.rs Replace users with nix crate (#9610) 2023-07-06 00:07:07 +02:00
cp.rs Fix cp -u/mv -u when the dst doesn't exist (#9662) 2023-07-12 18:12:59 +02:00
glob.rs add the ability to have a list of glob excludes (#9343) 2023-06-02 12:37:17 -05:00
ls.rs Create Record type (#10103) 2023-08-25 07:50:29 +12:00
mkdir.rs Document and critically review ShellError variants - Ep. 2 (#8326) 2023-03-06 11:31:07 +01:00
mod.rs move BufferedReader out of nu-command (#7697) 2023-01-06 15:22:17 -08:00
mv.rs Fix cp -u/mv -u when the dst doesn't exist (#9662) 2023-07-12 18:12:59 +02:00
open.rs Add rest and glob support to 'open' (#8506) 2023-03-18 08:51:39 +13:00
rm.rs fix removing symlinks on windows (#9704) 2023-07-20 20:16:03 +02:00
save.rs Fix wrong path expansion in save (#10046) 2023-08-18 20:45:10 +03:00
start.rs Apply nightly clippy lints (#9654) 2023-07-12 00:00:31 +02:00
touch.rs Document and critically review ShellError variants - Ep. 2 (#8326) 2023-03-06 11:31:07 +01:00
util.rs Fix cp -u/mv -u when the dst doesn't exist (#9662) 2023-07-12 18:12:59 +02:00
watch.rs Fix watch not detecting modifications on Windows (#10109) 2023-08-23 19:07:39 -07:00