mirror of
https://github.com/nushell/nushell
synced 2024-12-25 12:33:17 +00:00
4af24363c2
# Description For years, Nushell has used `let-env` to set a single environment variable. As our work on scoping continued, we refined what it meant for a variable to be in scope using `let` but never updated how `let-env` would work. Instead, `let-env` confusingly created mutations to the command's copy of `$env`. So, to help fix the mental model and point people to the right way of thinking about what changing the environment means, this PR removes `let-env` to encourage people to think of it as updating the command's environment variable via mutation. Before: ``` let-env FOO = "BAR" ``` Now: ``` $env.FOO = "BAR" ``` It's also a good reminder that the environment owned by the command is in the `$env` variable rather than global like it is in other shells. # User-Facing Changes BREAKING CHANGE BREAKING CHANGE This completely removes `let-env FOO = "BAR"` so that we can focus on `$env.FOO = "BAR"`. # 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 -A clippy::result_large_err` 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 > ``` --> # After / Before Submitting integration scripts to update: - ✔️ [starship](https://github.com/starship/starship/blob/master/src/init/starship.nu) - ✔️ [virtualenv](https://github.com/pypa/virtualenv/blob/main/src/virtualenv/activation/nushell/activate.nu) - ✔️ [atuin](https://github.com/ellie/atuin/blob/main/atuin/src/shell/atuin.nu) (PR: https://github.com/ellie/atuin/pull/1080) - ❌ [zoxide](https://github.com/ajeetdsouza/zoxide/blob/main/templates/nushell.txt) (PR: https://github.com/ajeetdsouza/zoxide/pull/587) - ✔️ [oh-my-posh](https://github.com/JanDeDobbeleer/oh-my-posh/blob/main/src/shell/scripts/omp.nu) (pr: https://github.com/JanDeDobbeleer/oh-my-posh/pull/4011)
63 lines
2.5 KiB
Text
Executable file
63 lines
2.5 KiB
Text
Executable file
#!/usr/bin/env nu
|
|
use std log warning
|
|
|
|
warning "./scripts/coverage-local.nu will be deprecated, please use the `toolkit cov` command instead"
|
|
|
|
def compute-coverage [] {
|
|
cd ($env.CURRENT_FILE | path dirname -n 2)
|
|
|
|
print "Setting up environment variables for coverage"
|
|
# Enable LLVM coverage tracking through environment variables
|
|
# show env outputs .ini/.toml style description of the variables
|
|
# In order to use from toml, we need to make sure our string literals are single quoted
|
|
# This is especially important when running on Windows since "C:\blah" is treated as an escape
|
|
cargo llvm-cov show-env | str replace (char dq) (char sq) -a | from toml | load-env
|
|
|
|
print "Cleaning up coverage data"
|
|
cargo llvm-cov clean --workspace
|
|
|
|
print "Building with workspace and profile=ci"
|
|
# Apparently we need to explicitly build the necessary parts
|
|
# using the `--profile=ci` is basically `debug` build with unnecessary symbols stripped
|
|
# leads to smaller binaries and potential savings when compiling and running
|
|
cargo build --workspace --profile=ci
|
|
|
|
print "Running tests with --workspace and profile=ci"
|
|
cargo test --workspace --profile=ci
|
|
|
|
# You need to provide the used profile to find the raw data
|
|
print "Generating coverage report as lcov.info"
|
|
cargo llvm-cov report --lcov --output-path lcov.info --profile=ci
|
|
}
|
|
|
|
let start = (date now)
|
|
# Script to generate coverage locally
|
|
#
|
|
# Output: `lcov.info` file
|
|
#
|
|
# Relies on `cargo-llvm-cov`. Install via `cargo install cargo-llvm-cov`
|
|
# https://github.com/taiki-e/cargo-llvm-cov
|
|
|
|
# You probably have to run `cargo llvm-cov clean` once manually,
|
|
# as you have to confirm to install additional tooling for your rustup toolchain.
|
|
# Else the script might stall waiting for your `y<ENTER>`
|
|
|
|
# Some of the internal tests rely on the exact cargo profile
|
|
# (This is somewhat criminal itself)
|
|
# but we have to signal to the tests that we use the `ci` `--profile`
|
|
$env.NUSHELL_CARGO_TARGET = "ci"
|
|
|
|
# Manual gathering of coverage to catch invocation of the `nu` binary.
|
|
# This is relevant for tests using the `nu!` macro from `nu-test-support`
|
|
# see: https://github.com/taiki-e/cargo-llvm-cov#get-coverage-of-external-tests
|
|
|
|
compute-coverage
|
|
|
|
let end = (date now)
|
|
print $"Coverage generation took ($end - $start)."
|
|
|
|
# To display the coverage in your editor see:
|
|
#
|
|
# - https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters
|
|
# - https://github.com/umaumax/vim-lcov
|
|
# - https://github.com/andythigpen/nvim-coverage (probably needs some additional config)
|