nushell/crates/nu-utils/standard_library
Artemiy f723bc6989
Std xml utils (#8437)
# Description

Add `xaccess`,`xupdate` and `xinsert` scripts to standard library. They
allow accessing and manipulating data in new xml format
https://github.com/nushell/nushell/pull/7947 with relative ease.

Access some data in nushell xml structure:

![image](https://user-images.githubusercontent.com/17511668/224785447-317359e2-1430-4dfc-9307-73f1d5e50098.png)

Update attributes of xml tags matching a path:

![image](https://user-images.githubusercontent.com/17511668/224785506-85e9aa30-b36b-43db-af1d-2f4460563124.png)


# User-Facing Changes

New commands `std xaccess`, `std xupdate` and `std xinsert`

# 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.
2023-04-05 13:54:08 -05:00
..
README.md standard library: fix the readme (#8526) 2023-03-20 17:05:49 +13:00
std.nu Std xml utils (#8437) 2023-04-05 13:54:08 -05:00
test_asserts.nu stdlib: fix the assert equal tests (#8650) 2023-03-28 13:34:26 -05:00
test_dirs.nu REFACTOR: remove the redundant path expand from the tests of the standard library (#8666) 2023-03-29 16:17:00 -05:00
test_logger.nu tweak logging format (#8588) 2023-03-23 15:59:49 -05:00
test_std.nu remove match from the standard library (#8625) 2023-03-26 10:57:41 +02:00
test_xml.nu Std xml utils (#8437) 2023-04-05 13:54:08 -05:00
tests.nu stdlib: Add back recursive lookup for tests (#8632) 2023-03-28 13:17:46 -05:00

Welcome to the standard library of `nushell`!

The standard library is a pure-nushell collection of commands to allow anyone to build complex applications using standardized tools gathered incrementally.

In this library, you might find rust-like assert commands to write tests, tools to manipulate paths and strings, etc, etc, ...

🧰 use the standard library in the REPL or in scripts

in order to "import" the standard library to either the interactive REPL of nushell or inside some .nu script, you might want to use the use command!

use /path/to/standard_library/std.nu

🔍 a concrete example

  • my name is @amtoine and i use the ghq tool to manage git projects

Note


ghq stores any repository inside $env.GHQ_ROOT under <host>/<owner>/<repo>/

  • the path to my local fork of nushell is then defined as
let-env NUSHELL_REPO = ($env.GHQ_ROOT | path join "github.com" "amtoine" "nushell")
  • and the full path to the standard library is defined as
let-env STD_LIB = ($env.NUSHELL_REPO | path join "crates" "nu-utils" "standard_library")

see the content of $env.STD_LIB 😋

>_ ls $env.STD_LIB | get name | str replace $env.STD_LIB "" | str trim -l -c "/"
╭───┬───────────╮
│ 0 │ README.md │
│ 1 │ std.nu    │
│ 2 │ tests.nu  │
╰───┴───────────╯
  • finally we can use the standard library and have access to the commands it exposes 👍
>_ use std.nu
>_ help std
Module: std

Exported commands:
  assert (std assert), assert eq (std assert eq), assert ne (std assert ne), match (std match)

This module does not export environment.

✏️ contribute to the standard library

  • all the commands of the standard_library are located in std.nu
  • the tests are located in files that have a name starting with "test_", e.g. test_std.nu
  • a test runner, at tests.nu, allows to run all the tests automatically

🔧 add new commands

  • add new standard commands by appending to std.nu
  • add associated tests to test_std.nu or preferably to test_<submodule>.nu.
    • define a new exported (!) test_<feature> command
    • import the assert functions you need at the top of the functions, e.g. use std.nu "assert eq"

🧪 run the tests

the following call should return no errors

NU_LOG_LEVEL=DEBUG nu /path/to/standard_library/tests.nu

🔍 a concrete example

with STD_LIB defined as in the example above

NU_LOG_LEVEL=DEBUG nu ($env.STD_LIB | path join "tests.nu")