stdlib: make the library a standalone crate#8770
Conversation
Command used
```bash
[.github/**/* **/*.rs **/*.nu]
| each {|target|
sd 'crates/nu-utils/standard_library' 'crates/standard_library' $target
}
```
i used this complex command because of
```bash
>_ sd 'crates/nu-utils/standard_library' 'crates/standard_library' **/*
Error: nu::shell::external_command
× External command failed
╭─[entry nushell#67:1:1]
1 │ sd 'crates/nu-utils/standard_library' 'crates/standard_library' **/*
· ─┬
· ╰── can't run executable
╰────
help: Argument list too long (os error 7)
```
|
For consistency, I'd call it nu-std. It would be nice to have nu-something since that's the name of all our other crates. We also have to have some rust code I think in order to publish. Not sure what that is though. |
Command used: ```bash mv crates/standard_library/ crates/nu-std ``
Command used:
```bash
[.github/**/* **/*.rs **/*.nu]
| each {|target|
sd 'crates/standard_library' 'crates/nu-std' $target
}
```
oh yeah that is soooo much better 😮
i know exactly what to add there 😏 i'll do that once this lands 👍 |
This adds the `help` commands from nushell#8505 and the `assert skip` from nushell#8748.
|
and conflict solved 👌 |
|
Without a There is some potential configuration what non- Furthermore the code like this is not publishable, as you are referencing assets across crate boundaries right now. |
src/run.rs
Outdated
| fn get_standard_library() -> &'static str { | ||
| include_str!("../crates/nu-utils/standard_library/std.nu") | ||
| include_str!("../crates/nu-std/std.nu") | ||
| } |
There was a problem hiding this comment.
this would need to live in the nu-std crate and imported here via nu_std::get_standard_library()
There was a problem hiding this comment.
yup that's exactly what i have in mind 😋
|
could we call this a "crate" for this very instant?
|
|
i've changed the title and the message of the PR, they were too vague, sorry for this 😢 |
|
Alternatively we could place it in some non There are some folks that want to build upon nushell crates. e.g. @stormasm and also the couchbase-shell folks. Moving everything into the |
|
i can move all the directory to another place but i'd place it again here in the next PR with the you tell me 😉 |
|
My take is, then it should be one PR :P |
this is a perfect argument, will do that right now 😇 |
Commands used:
```bash
[nu-cli nu-parser nu-protocol]
| each {|dep|
cargo add --package nu-std $dep --path ("crates/" | path join $dep)
}
cargo add --package nu-std miette@5.6.0 --features [fancy-no-backtrace]
```
This is to allow it to be used in `run.rs`
Get the changes from nushell#8765 about the parser.
|
i think we're good now 😌
|
This brings the new `help` prelude from nushell#8794.
This brings back the changes from nushell#8797.
|
that's fun, we all decided to edit this one piece of that should be the last conflict merge 😌 |
|
@amtoine this looks good to me as well ! Thanks for doing this work... One of the first things I think I would do is try and remove the dependency in this crate from nu-cli. And then both nu-cli and nu-std will depend upon those functions... The advantage of doing it this way --- is it will enable developers to use our nu-std crate and build their own cli for their application... Once this lands and a few days have passed of testing etc... This looks good to me for starters though, excellent effort, I am excited to have this code in its own crate 😄 |
|
I think we need the LICENSE file in the crate folder too. |
|
@fdncred thanks for catching this I just added it 😄 |
> **Note** > waiting for > - #8770 > - #8815 # Description this PR adds a very basic completion support to the `help` implementations of the `std`. # User-Facing Changes completion on all the `std help ...` commands, based on the names in `$nu.scope.` # Tests + Formatting - ⚫ `toolkit fmt` - ⚫ `toolkit clippy` - ⚫ `toolkit test` - ⚫ `toolkit test stdlib` # After Submitting ``` $nothing ```
commit 8ee52b6 Author: JT <547158+jntrnr@users.noreply.github.com> Date: Wed Apr 12 05:21:52 2023 +1200 Relax the closure syntax, highlight differently (nushell#8846) This relaxes the closure syntax so that `||` is no longer required. This allows for `ls | each { $in.name }` for example. I've gone ahead and changed the syntax highlighting so that blocks and closures are distinct for now. Removes `||` requirement for closures. 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit 46dba88 Author: JT <547158+jntrnr@users.noreply.github.com> Date: Wed Apr 12 05:21:31 2023 +1200 Revert numberlike parsing restriction (nushell#8845) This effectively reverts nushell#8635. We shipped this change with 0.78 and received many comments/issues related to this restriction feeling like a step backward. fixes: nushell#8844 (and probably other issues) Returns numbers and number-like values to being allowed to be bare words. Examples: `3*`, `1fb43`, `4,5`, and related. 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit eb4d19f Author: federico viscomi <federicoviscomi@gmail.com> Date: Mon Apr 10 22:52:51 2023 +0100 Parser panic for signature with multibyte char for short flag nushell#8821 (nushell#8849) Hey I'm a developer and I'm still new to nushell and rust but I would like to learn more about both. This is my first PR for this project. The intent of my change is to allow to use multibyte utf-8 characters in commands short flags. commit c367876 Author: Máté FARKAS <fm@farkas-mate.hu> Date: Mon Apr 10 22:42:11 2023 +0200 stdlib test runner: implement `setup` and `teardown` commands to unit tests (nushell#8776) As in other testing frameworks, the `setup` runs before every test case, and the `teardown` after that. A context can be created in `setup`, which will be in the `$in` variable in the test cases, and in the `teardown`. The `teardown` is called regardless of the test is passed, skipped, or failed. For example: ```nushell use std.nu * export def setup [] { log debug "Setup is running" {msg: "This is the context"} } export def teardown [] { log debug $"Teardown is running. Context: ($in)" } export def test_assert_pass [] { log debug $"Assert is running. Context: ($in)" } export def test_assert_skip [] { log debug $"Assert is running. Context: ($in)" assert skip } export def test_assert_fail_skipped_by_default [] { log debug $"Assert is running. Context: ($in)" assert false } ```  I'll update the documentation. --------- Co-authored-by: Mate Farkas <Mate.Farkas@oneidentity.com> commit 9bb2c8f Author: Justin Ma <hustcer@outlook.com> Date: Tue Apr 11 04:10:41 2023 +0800 Upgrade to nu v0.78 for binaries release workflow (nushell#8840) Upgrade to nu v0.78 for binary packages release workflow Test Release: https://github.com/hustcer/nu-release/releases/tag/v0.78.2 Release workflow running output: https://github.com/hustcer/nu-release/actions/runs/4656319252/jobs/8239828202 _(List of all changes that impact the user experience here. This helps us keep track of breaking changes.)_ 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit 74dcac3 Author: nibon7 <nibon7@163.com> Date: Tue Apr 11 02:52:42 2023 +0800 Fix process_range on 32-bit platforms (nushell#8842) This PR fixes `commands::str_::substrings_the_input_and_treats_end_index_as_length_if_blank_end_index_given` testcase on 32-bit platform. ``` failures: ---- commands::str_::substrings_the_input_and_treats_end_index_as_length_if_blank_end_index_given stdout ---- === stderr thread 'commands::str_::substrings_the_input_and_treats_end_index_as_length_if_blank_end_index_given' panicked at 'assertion failed: `(left == right)` left: `"arepa"`, right: `"arepas"`', crates/nu-command/tests/commands/str_/mod.rs:363:9 failures: commands::str_::substrings_the_input_and_treats_end_index_as_length_if_blank_end_index_given test result: FAILED. 1072 passed; 1 failed; 23 ignored; 0 measured; 0 filtered out; finished in 2.98s error: test failed, to rerun pass `-p nu-command --test main` ``` https://gitlab.alpinelinux.org/nibon7/aports/-/jobs/1005935#L3864 https://gitlab.alpinelinux.org/nibon7/aports/-/jobs/1005931#L3867 N/A 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit 6d51e34 Author: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Mon Apr 10 20:32:33 2023 +0200 stdlib: make helper modules available in std (nushell#8841) > **Note** > waiting for the following to land > - nushell#8824 to avoid conflicts, i'll add this to `CONTRIBUTING.md` once it's ready 👍 should close nushell#8839 this PR moves the `log` submodule of `std` to the top of the call stack, making it available in the rest of the library as `log`. i've added some comments around the `submodules` list in `load_standard_library` to make it clear how it should work. `log` and `assert` are now available in the rest of `std`. - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - ⚫ `toolkit test` - 🟢 `toolkit test stdlib` ``` $nothing ``` commit de76c7a Author: WindSoilder <WindSoilder@outlook.com> Date: Tue Apr 11 01:23:22 2023 +0800 Remove autoprinting of `for` loop (nushell#8843) It's an addition to nushell#8618 And I think it's good to keep the same behavior when we use for loop for list. 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit 0e23400 Author: Stefan Holderbach <sholderbach@users.noreply.github.com> Date: Mon Apr 10 03:42:43 2023 +0200 Follow up nushell#8758 with a style fix (nushell#8822) The old comment around the question mark operator doesn't make sense to me based on the closure signature. The `match` expressions were thus superfluous. None No change commit d0a83fe Author: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Mon Apr 10 00:59:57 2023 +0200 stdlib: add completion to `help` commands (nushell#8799) > **Note** > waiting for > - nushell#8770 > - nushell#8815 this PR adds a very basic completion support to the `help` implementations of the `std`. completion on all the `std help ...` commands, based on the names in `$nu.scope.` - ⚫ `toolkit fmt` - ⚫ `toolkit clippy` - ⚫ `toolkit test` - ⚫ `toolkit test stdlib` ``` $nothing ``` commit 57510f2 Author: Stefan Holderbach <sholderbach@users.noreply.github.com> Date: Mon Apr 10 00:56:47 2023 +0200 Move CLI related commands to `nu-cli` (nushell#8832) Part of the larger cratification effort. Moves all `reedline` or shell line editor specific commands to `nu-cli`. - `commandline` - This shouldn't have moved there. Doesn't directly depend on reedline but assumes parts in the engine state that are specific to the use of reedline or a REPL - `keybindings` and subcommands - `keybindings default` - `keybindings list` - `keybindings listen` - very `reedline` specific - `history` - needs `reedline` - `history session` Instead of having a separate `create_default_context()` that calls `nu-command`'s `create_default_context()`, I added a `add_cli_context()` that updates an `EngineState` None `cargo build --timings` from a `cargo clean --profile dev` main: 64 secs this: 59 secs branch | total| codegen | fraction ---|---|---|--- main | 14.0s | 6.2s | (44%) this | 12.5s | 5.5s | (44%) `nu-cli` depends on `nu-command` at the moment. Thus it is built during the code-gen phase of `nu-command` (on 16 virtual cores) I removed the `test_example()` facilities for now as we had not run any of the commands in an `Example` test and importing the right context for those tests seemed more of a hassle than the duplicated `test_examples()` implementations in `nu-cmd-lang` and `nu-command` commit 58b96fd Author: JT <547158+jntrnr@users.noreply.github.com> Date: Mon Apr 10 10:55:29 2023 +1200 Add option to not load std-lib. Default tests to not use std-lib (nushell#8833) this adds a `--no-std-lib` flag. Moves `nu!` to use the `--no-std-lib`. Adds a new `nu_with_std!` macro for future tests that need the std-lib. _(Thank you for improving Nushell. Please, check our [contributing guide](../CONTRIBUTING.md) and talk to the core team before making major changes.)_ _(Description of your pull request goes here. **Provide examples and/or screenshots** if your changes affect the user experience.)_ _(List of all changes that impact the user experience here. This helps us keep track of breaking changes.)_ 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit 9e3d6c3 Author: JT <547158+jntrnr@users.noreply.github.com> Date: Mon Apr 10 08:55:47 2023 +1200 Only add the std lib files once (nushell#8830) We were seeing duplicate entries for the std lib files, and this PR addresses that. Each file should now only be added once. Note: they are still parsed twice because it's hard to recover the module from the output of `parse` but a bit of clever hacking in a future PR might be able to do that. _(List of all changes that impact the user experience here. This helps us keep track of breaking changes.)_ 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 - `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the standard library > **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 > ``` 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. commit 4a955d7 Author: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Sun Apr 9 19:00:20 2023 +0200 stdlib: refactor into a multi-module library (nushell#8815) commit 637283f Author: mike <98623181+1Kinoti@users.noreply.github.com> Date: Sat Apr 8 23:04:57 2023 +0300 allow register to accept a const argument (nushell#8758) this pr allows `register` to be used with const variables ```nu const math_plugin = "~/.config/nushell/plugins/nu_plugin_math" register $math_plugin ``` should close nushell#8208, previous work nushell#8435 commit 5afbfb5 Author: Maria José Solano <majosolano99@gmail.com> Date: Sat Apr 8 11:52:37 2023 -0700 Use `pretty_assertions` in the root crate (nushell#8818) This PR is just a minor development improvement. While working on another feature, I noticed that the root crate lists the super useful `pretty_assertions` in the root crate but doesn't use it in most tests. With this change `pretty_assertions::assert_eq!` is used instead of `core::assert_eq!` for better diffs when debugging the tests. I thought of adding the dependency to other crates but I decided not to since I didn't want a huge disruptive PR :) commit d128c0e Author: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Sat Apr 8 14:35:16 2023 +0200 stdlib: use the loaded library in tests and update `README` (nushell#8811) Should close nushell#8809. this PR uses the automatically loaded library from the tests by replacing `use std.nu ...` with `use std ...`. the `README` has been updated by - removing the very deprencated "concrete examples" - fixing the `use std` and the "run the tests" sections the `README` can be previewed [here](https://github.com/amtoine/nushell/blob/refactor/stdlib/use-std-in-tests-and-update-readme/crates/nu-std/README.md) 👍 ``` $nothing ``` - 🟢 `toolkit test stdlib` ``` $nothing ``` commit 60e6ea5 Author: Michael Angerman <1809991+stormasm@users.noreply.github.com> Date: Sat Apr 8 04:53:43 2023 -0700 remove nu_cli crate dependency from nu_std (nushell#8807) now nu_std only depends on nu_parser, nu_protocol and miette and removes the nu_cli dependency this enables developers moving forward to come along and implement their own CLI's without having to pull in a redundant nu-cli which will not be needed for them. I did this by moving report_error into nu_protocol which nu_std already has a dependency on anyway.... - `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 - `cargo run -- crates/nu-std/tests.nu` to run the tests for the standard library > **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 > ``` commit 4156077 Author: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Sat Apr 8 13:19:09 2023 +0200 remove the "MODULE NOT FOUND" print from the parser (nushell#8816) related to nushell#8765. should close nushell#8812. this PR simply removes the `prinln("MODULE NOT FOUND")` from the parser. no more `MODULE NOT FOUND` while typing a `use` command
Description
as we now have a prelude thanks to #8627, i'd like to work on the structure of the library 😋
and i think the first step is to make it a true standalone crate 😏
this PR
crates/nu-utils/standard_library/tocrates/nu-std/rustloading code fromsrc/run.rstocrates/nu-std/src/lib.rsUser-Facing Changes
Tests + Formatting
toolkit fmttoolkit clippytoolkit test=> fails on the unrelatedcargo test --workspace test_stdlibpasses 👍toolkit test stdlibAfter Submitting