# Description
As part of the refactor to split spans off of Value, this moves to using
helper functions to create values, and using `.span()` instead of
matching span out of Value directly.
Hoping to get a few more helping hands to finish this, as there are a
lot of commands to update :)
# 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` to
check that you're using the standard code style
- `cargo test --workspace` to check that all tests pass (on Windows make
sure to [enable developer
mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging))
- `cargo run -- -c "use std testing; testing run-tests --path
crates/nu-std"` 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 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.
-->
---------
Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
Co-authored-by: WindSoilder <windsoilder@outlook.com>
# Description
This doesn't really do much that the user could see, but it helps get us
ready to do the steps of the refactor to split the span off of Value, so
that values can be spanless. This allows us to have top-level values
that can hold both a Value and a Span, without requiring that all values
have them.
We expect to see significant memory reduction by removing so many
unnecessary spans from values. For example, a table of 100,000 rows and
5 columns would have a savings of ~8megs in just spans that are almost
always duplicated.
# User-Facing Changes
Nothing yet
# 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 -- -c "use std testing; testing run-tests --path
crates/nu-std"` 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 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.
-->
# Description
This PR fixes some problems I found in scripts by adding some additional
input_output_types.
Here's a list of nushell scripts that it fixed. Look for `# broke here:`
below.
This PR fixes 3, 4, 6, 7 by adding additional input_output_types. 1 was
fixed by changing the script. 2. just doesn't work anymore because mkdir
return type has changed. 5, is a problem with the script, the datatype
for `...rest` needed to be removed.
```nushell
# 1.
def terminal-size [] {
let sz = (input (ansi size) --bytes-until 'R')
# $sz should look like this
# Length: 9 (0x9) bytes | printable whitespace ascii_other non_ascii
# 00000000: 1b 5b 33 38 3b 31 35 30 52 •[38;150R
let sz_len = ($sz | bytes length)
# let's skip the esc[ and R
let r = ($sz | bytes at 2..($sz_len - 2) | into string)
# $r should look like 38;150
# broke here: because $r needed to be a string for split row
let size = ($r | split row ';')
# output in record syntax
{
rows: ($size | get 0)
columns: ($size | get 1)
}
}
# 2.
# make and cd to a folder
def-env mkcd [name: path] {
# broke here: but apparently doesn't work anymore
# It looks like mkdir returns nothing where it used to return a value
cd (mkdir $name -v | first)
}
# 3.
# changed 'into datetime'
def get-monday [] {
(seq date -r --days 7 |
# broke here: because into datetime didn't support list input
into datetime |
where { |e|
($e | date format %u) == "1" }).0 |
date format "%Y-%m-%d"
}
# 4.
# Delete all branches that are not in the excepts list
# Usage: del-branches [main]
def del-branches [
excepts:list # don't delete branch in the list
--dry-run(-d) # do a dry-run
] {
let branches = (git branch | lines | str trim)
# broke here: because str replace didn't support list<string>
let remote_branches = (git branch -r | lines | str replace '^.+?/' '' | uniq)
if $dry_run {
print "Starting Dry-Run"
} else {
print "Deleting for real"
}
$branches | each {|it|
if ($it not-in $excepts) and ($it not-in $remote_branches) and (not ($it | str starts-with "*")) {
# git branch -D $it
if $dry_run {
print $"git branch -D ($it)"
} else {
print $"Deleting ($it) for real"
#git branch -D $it
}
}
}
}
# 5.
# zoxide script
def-env __zoxide_z [...rest] {
# `z -` does not work yet, see https://github.com/nushell/nushell/issues/4769
# broke here: 'append doesn't support string input'
let arg0 = ($rest | append '~').0
# broke here: 'length doesn't support string input' so change `...rest:string` to `...rest`
let path = if (($rest | length) <= 1) and ($arg0 == '-' or ($arg0 | path expand | path type) == dir) {
$arg0
} else {
(zoxide query --exclude $env.PWD -- $rest | str trim -r -c "\n")
}
cd $path
}
# 6.
def a [] {
let x = (commandline)
if ($x | is-empty) { return }
# broke here: because commandline was previously only returning Type::Nothing
if not ($x | str starts-with "aaa") { print "bbb" }
}
# 7.
# repeat a string x amount of times
def repeat [arg: string, dupe: int] {
# broke here: 'command does not support range input'
0..<$dupe | reduce -f '' {|i acc| $acc + $arg}
}
```
# 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 -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 -- -c "use std testing; testing run-tests --path
crates/nu-std"` 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 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.
-->
# Description
Use `buffer.len()` instead of `cursor_pos`, so the `.expect()` isn't
useless.
# User-Facing Changes
# Tests + Formatting
# After Submitting
# Description
Fix getting the cursor position, when it's at the end of the
commandline.
# User-Facing Changes
<!-- List of all changes that impact the user experience here. This
helps us keep track of breaking changes. -->
# Tests + Formatting
# After Submitting
# Description
Part of the larger cratification effort.
Moves all `reedline` or shell line editor specific commands to `nu-cli`.
## From `nu-cmd-lang`:
- `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
## From `nu-command`:
- `keybindings` and subcommands
- `keybindings default`
- `keybindings list`
- `keybindings listen`
- very `reedline` specific
- `history`
- needs `reedline`
- `history session`
## internal use
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`
# User-Facing Changes
None
## Build time comparison
`cargo build --timings` from a `cargo clean --profile dev`
### total
main: 64 secs
this: 59 secs
### `nu-command` build time
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)
# Tests + Formatting
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`