forked from extern/nushell
be52f7fb07
# Description This PR just tweaks the std.nu logging a bit. It looks like this after this PR. I like the ability to have a parse-able file, which is why there are pipes, and I like to have a pretty granular time date stamp in order to get rough performance metrics. ``` nu crates\nu-utils\standard_library\tests.nu INF|2023-03-23T15:02:00.284|Run test test_asserts test_assert INF|2023-03-23T15:02:00.372|Run test test_asserts test_assert_equal INF|2023-03-23T15:02:00.461|Run test test_asserts test_assert_error INF|2023-03-23T15:02:00.585|Run test test_asserts test_assert_greater INF|2023-03-23T15:02:00.674|Run test test_asserts test_assert_greater_or_equal INF|2023-03-23T15:02:00.762|Run test test_asserts test_assert_length INF|2023-03-23T15:02:00.847|Run test test_asserts test_assert_less INF|2023-03-23T15:02:00.933|Run test test_asserts test_assert_less_or_equal INF|2023-03-23T15:02:01.021|Run test test_asserts test_assert_not_equal INF|2023-03-23T15:02:01.110|Run test test_dirs test_dirs_command INF|2023-03-23T15:02:01.300|Run test test_logger test_critical INF|2023-03-23T15:02:01.558|Run test test_logger test_debug INF|2023-03-23T15:02:01.818|Run test test_logger test_error INF|2023-03-23T15:02:02.074|Run test test_logger test_info INF|2023-03-23T15:02:02.331|Run test test_logger test_warning INF|2023-03-23T15:02:02.573|Run test test_std test_match INF|2023-03-23T15:02:02.678|Run test test_std test_path_add ``` # User-Facing Changes _(List of all changes that impact the user experience here. This helps us keep track of breaking changes.)_ # 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. |
||
---|---|---|
.. | ||
README.md | ||
std.nu | ||
test_asserts.nu | ||
test_dirs.nu | ||
test_logger.nu | ||
test_std.nu | ||
tests.nu |
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 managegit
projectsNote
ghq
stores any repository inside$env.GHQ_ROOT
under<host>/<owner>/<repo>/
- the path to my local fork of
nushell
is then defined aslet-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 totest_<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"
- define a new exported (!)
🧪 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 aboveNU_LOG_LEVEL=DEBUG nu ($env.STD_LIB | path join "tests.nu")