nushell/crates/nu-utils/standard_library
Antoine Stevan 6af59cb0ea
FEATURE: add a path add to the standard library (#8303)
# Description
this PR adds the `path add` command to
`crates/nu-utils/standard_library/std.nu`
- this comes from frequent questions over on the discord server, about
how to add directories to the `PATH`
- this is greatly inspired from the [original
`path-add`](https://discord.com/channels/601130461678272522/615253963645911060/1081206660816699402)
from @melMass
- allows to prepend and append a variable number of directories to the
`PATH`
- i've added a description with an example
- i've added tests in `crates/nu-utils/standard_library/tests.nu` that
hopefully covers all the features

# User-Facing Changes
`path add` can now be used from `std.nu`

# Tests + Formatting
the tests pass with
```bash
nu crates/nu-utils/standard_library/tests.nu
```

# After Submitting
```bash
$nothing
```
2023-03-07 17:06:14 -06:00
..
README.md DOC: add a README to the standard library (#8304) 2023-03-04 08:30:36 -06:00
std.nu FEATURE: add a path add to the standard library (#8303) 2023-03-07 17:06:14 -06:00
tests.nu FEATURE: add a path add to the standard library (#8303) 2023-03-07 17:06:14 -06: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

🔧 add new commands

  • add new standard commands to std.nu
  • add associated tests to tests.nu
    • define a new test_<feature> before the main
    • import the assert functions you need at the top of the functions, e.g. use std.nu "assert eq"
    • add a call to test_<feature> at the bottom of the main

🧪 run the tests

the following call should return nothing

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