nushell/crates/nu-cmd-extra
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
..
assets REFACTOR: move the 0% commands to nu-cmd-extra (#9404) 2023-07-06 08:31:31 -07:00
src Create Record type (#10103) 2023-08-25 07:50:29 +12:00
tests Clean up tests containing unnecessary cwd: tokens (#9692) 2023-07-17 18:43:51 +02:00
Cargo.toml bump nushell to dev version 0.84.1 (#10101) 2023-08-23 15:23:27 -05:00
LICENSE nu-cmd-extra crate infrastructure in place with the Bits command as the model for adding other commands (#9327) 2023-06-01 10:46:16 -07:00
README.md add in a Readme for the crate nu-cmd-extra (#9745) 2023-07-19 21:35:58 -07:00

nu-cmd-extra

the extra commands are not part of the Nushell binary

The commands in this crate are the extra commands of Nushell. They do not get built for the release and it is the responsibility of the developer to build these commands if they want to use them.

These commands are not going to part of the 1.0 Api; meaning that there is no guarantee longer term that these commands will be around into the future. Of course since they are part of the source tree one could always incorporate them into their own custom release.

How to build the commands in this crate

Step 1 is to read the installation notes for Nushell which is located in our Nushell book.

Once Rust is installed you can then build Nushell with the following command.

cargo build --features=extra

Your Nushell binary which just got built is called nu and will be located here.

nushell/target/debug/nu