Merge branch 'main' into alacritty-terminal

This commit is contained in:
YizhePKU 2024-06-03 22:06:44 +08:00
commit 9f5f6b836c
45 changed files with 573 additions and 290 deletions

72
Cargo.lock generated
View File

@ -2824,7 +2824,7 @@ dependencies = [
[[package]]
name = "nu"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"alacritty_terminal",
"assert_cmd",
@ -2878,7 +2878,7 @@ dependencies = [
[[package]]
name = "nu-cli"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"chrono",
"crossterm",
@ -2913,7 +2913,7 @@ dependencies = [
[[package]]
name = "nu-cmd-base"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"indexmap",
"miette",
@ -2925,7 +2925,7 @@ dependencies = [
[[package]]
name = "nu-cmd-extra"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"fancy-regex",
"heck 0.5.0",
@ -2950,7 +2950,7 @@ dependencies = [
[[package]]
name = "nu-cmd-lang"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"itertools 0.12.1",
"nu-engine",
@ -2962,7 +2962,7 @@ dependencies = [
[[package]]
name = "nu-cmd-plugin"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"itertools 0.12.1",
"nu-engine",
@ -2973,7 +2973,7 @@ dependencies = [
[[package]]
name = "nu-color-config"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"nu-ansi-term",
"nu-engine",
@ -2985,7 +2985,7 @@ dependencies = [
[[package]]
name = "nu-command"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"alphanumeric-sort",
"base64 0.22.1",
@ -3094,7 +3094,7 @@ dependencies = [
[[package]]
name = "nu-engine"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"nu-glob",
"nu-path",
@ -3104,7 +3104,7 @@ dependencies = [
[[package]]
name = "nu-explore"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"ansi-str",
"anyhow",
@ -3129,14 +3129,14 @@ dependencies = [
[[package]]
name = "nu-glob"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"doc-comment",
]
[[package]]
name = "nu-json"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"linked-hash-map",
"num-traits",
@ -3146,7 +3146,7 @@ dependencies = [
[[package]]
name = "nu-lsp"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"assert-json-diff",
"crossbeam-channel",
@ -3167,7 +3167,7 @@ dependencies = [
[[package]]
name = "nu-parser"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"bytesize",
"chrono",
@ -3183,7 +3183,7 @@ dependencies = [
[[package]]
name = "nu-path"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"dirs-next",
"omnipath",
@ -3192,7 +3192,7 @@ dependencies = [
[[package]]
name = "nu-plugin"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"log",
"nix",
@ -3207,7 +3207,7 @@ dependencies = [
[[package]]
name = "nu-plugin-core"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"interprocess",
"log",
@ -3221,7 +3221,7 @@ dependencies = [
[[package]]
name = "nu-plugin-engine"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"log",
"nu-engine",
@ -3236,7 +3236,7 @@ dependencies = [
[[package]]
name = "nu-plugin-protocol"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"bincode",
"nu-protocol",
@ -3248,7 +3248,7 @@ dependencies = [
[[package]]
name = "nu-plugin-test-support"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"nu-ansi-term",
"nu-cmd-lang",
@ -3266,7 +3266,7 @@ dependencies = [
[[package]]
name = "nu-pretty-hex"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"heapless",
"nu-ansi-term",
@ -3275,7 +3275,7 @@ dependencies = [
[[package]]
name = "nu-protocol"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"brotli 5.0.0",
"byte-unit",
@ -3306,7 +3306,7 @@ dependencies = [
[[package]]
name = "nu-std"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"log",
"miette",
@ -3317,7 +3317,7 @@ dependencies = [
[[package]]
name = "nu-system"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"chrono",
"itertools 0.12.1",
@ -3335,7 +3335,7 @@ dependencies = [
[[package]]
name = "nu-table"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"fancy-regex",
"nu-ansi-term",
@ -3349,7 +3349,7 @@ dependencies = [
[[package]]
name = "nu-term-grid"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"nu-utils",
"unicode-width",
@ -3357,7 +3357,7 @@ dependencies = [
[[package]]
name = "nu-test-support"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"alacritty_terminal",
"nu-glob",
@ -3370,7 +3370,7 @@ dependencies = [
[[package]]
name = "nu-utils"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"crossterm_winapi",
"log",
@ -3396,7 +3396,7 @@ dependencies = [
[[package]]
name = "nu_plugin_example"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"nu-cmd-lang",
"nu-plugin",
@ -3406,7 +3406,7 @@ dependencies = [
[[package]]
name = "nu_plugin_formats"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"eml-parser",
"ical",
@ -3419,7 +3419,7 @@ dependencies = [
[[package]]
name = "nu_plugin_gstat"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"git2",
"nu-plugin",
@ -3428,7 +3428,7 @@ dependencies = [
[[package]]
name = "nu_plugin_inc"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"nu-plugin",
"nu-protocol",
@ -3437,7 +3437,7 @@ dependencies = [
[[package]]
name = "nu_plugin_polars"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"chrono",
"chrono-tz 0.9.0",
@ -3468,7 +3468,7 @@ dependencies = [
[[package]]
name = "nu_plugin_query"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"gjson",
"nu-plugin",
@ -3480,7 +3480,7 @@ dependencies = [
[[package]]
name = "nu_plugin_stress_internals"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"interprocess",
"serde",
@ -3606,7 +3606,7 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
[[package]]
name = "nuon"
version = "0.94.1"
version = "0.94.2"
dependencies = [
"chrono",
"fancy-regex",

View File

@ -11,7 +11,7 @@ license = "MIT"
name = "nu"
repository = "https://github.com/nushell/nushell"
rust-version = "1.77.2"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -175,22 +175,22 @@ windows = "0.54"
winreg = "0.52"
[dependencies]
nu-cli = { path = "./crates/nu-cli", version = "0.94.1" }
nu-cmd-base = { path = "./crates/nu-cmd-base", version = "0.94.1" }
nu-cmd-lang = { path = "./crates/nu-cmd-lang", version = "0.94.1" }
nu-cmd-plugin = { path = "./crates/nu-cmd-plugin", version = "0.94.1", optional = true }
nu-cmd-extra = { path = "./crates/nu-cmd-extra", version = "0.94.1" }
nu-command = { path = "./crates/nu-command", version = "0.94.1" }
nu-engine = { path = "./crates/nu-engine", version = "0.94.1" }
nu-explore = { path = "./crates/nu-explore", version = "0.94.1" }
nu-lsp = { path = "./crates/nu-lsp/", version = "0.94.1" }
nu-parser = { path = "./crates/nu-parser", version = "0.94.1" }
nu-path = { path = "./crates/nu-path", version = "0.94.1" }
nu-plugin-engine = { path = "./crates/nu-plugin-engine", optional = true, version = "0.94.1" }
nu-protocol = { path = "./crates/nu-protocol", version = "0.94.1" }
nu-std = { path = "./crates/nu-std", version = "0.94.1" }
nu-system = { path = "./crates/nu-system", version = "0.94.1" }
nu-utils = { path = "./crates/nu-utils", version = "0.94.1" }
nu-cli = { path = "./crates/nu-cli", version = "0.94.2" }
nu-cmd-base = { path = "./crates/nu-cmd-base", version = "0.94.2" }
nu-cmd-lang = { path = "./crates/nu-cmd-lang", version = "0.94.2" }
nu-cmd-plugin = { path = "./crates/nu-cmd-plugin", version = "0.94.2", optional = true }
nu-cmd-extra = { path = "./crates/nu-cmd-extra", version = "0.94.2" }
nu-command = { path = "./crates/nu-command", version = "0.94.2" }
nu-engine = { path = "./crates/nu-engine", version = "0.94.2" }
nu-explore = { path = "./crates/nu-explore", version = "0.94.2" }
nu-lsp = { path = "./crates/nu-lsp/", version = "0.94.2" }
nu-parser = { path = "./crates/nu-parser", version = "0.94.2" }
nu-path = { path = "./crates/nu-path", version = "0.94.2" }
nu-plugin-engine = { path = "./crates/nu-plugin-engine", optional = true, version = "0.94.2" }
nu-protocol = { path = "./crates/nu-protocol", version = "0.94.2" }
nu-std = { path = "./crates/nu-std", version = "0.94.2" }
nu-system = { path = "./crates/nu-system", version = "0.94.2" }
nu-utils = { path = "./crates/nu-utils", version = "0.94.2" }
reedline = { workspace = true, features = ["bashisms", "sqlite"] }
@ -219,9 +219,9 @@ nix = { workspace = true, default-features = false, features = [
] }
[dev-dependencies]
nu-test-support = { path = "./crates/nu-test-support", version = "0.94.1" }
nu-plugin-protocol = { path = "./crates/nu-plugin-protocol", version = "0.94.1" }
nu-plugin-core = { path = "./crates/nu-plugin-core", version = "0.94.1" }
nu-test-support = { path = "./crates/nu-test-support", version = "0.94.2" }
nu-plugin-protocol = { path = "./crates/nu-plugin-protocol", version = "0.94.2" }
nu-plugin-core = { path = "./crates/nu-plugin-core", version = "0.94.2" }
alacritty_terminal = { workspace = true }
assert_cmd = "2.0"
dirs-next = { workspace = true }

View File

@ -5,27 +5,27 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-cli"
edition = "2021"
license = "MIT"
name = "nu-cli"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dev-dependencies]
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-command = { path = "../nu-command", version = "0.94.1" }
nu-test-support = { path = "../nu-test-support", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }
nu-command = { path = "../nu-command", version = "0.94.2" }
nu-test-support = { path = "../nu-test-support", version = "0.94.2" }
rstest = { workspace = true, default-features = false }
tempfile = { workspace = true }
[dependencies]
nu-cmd-base = { path = "../nu-cmd-base", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.94.1", optional = true }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-color-config = { path = "../nu-color-config", version = "0.94.1" }
nu-cmd-base = { path = "../nu-cmd-base", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.94.2", optional = true }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
nu-color-config = { path = "../nu-color-config", version = "0.94.2" }
nu-ansi-term = { workspace = true }
reedline = { workspace = true, features = ["bashisms", "sqlite"] }

View File

@ -5,15 +5,15 @@ edition = "2021"
license = "MIT"
name = "nu-cmd-base"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-cmd-base"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
indexmap = { workspace = true }
miette = { workspace = true }

View File

@ -5,7 +5,7 @@ edition = "2021"
license = "MIT"
name = "nu-cmd-extra"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-cmd-extra"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -13,13 +13,13 @@ version = "0.94.1"
bench = false
[dependencies]
nu-cmd-base = { path = "../nu-cmd-base", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-json = { version = "0.94.1", path = "../nu-json" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-pretty-hex = { version = "0.94.1", path = "../nu-pretty-hex" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-cmd-base = { path = "../nu-cmd-base", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-json = { version = "0.94.2", path = "../nu-json" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-pretty-hex = { version = "0.94.2", path = "../nu-pretty-hex" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
# Potential dependencies for extras
heck = { workspace = true }
@ -37,6 +37,6 @@ extra = ["default"]
default = []
[dev-dependencies]
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-command = { path = "../nu-command", version = "0.94.1" }
nu-test-support = { path = "../nu-test-support", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }
nu-command = { path = "../nu-command", version = "0.94.2" }
nu-test-support = { path = "../nu-test-support", version = "0.94.2" }

View File

@ -6,16 +6,16 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-cmd-lang"
edition = "2021"
license = "MIT"
name = "nu-cmd-lang"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
itertools = { workspace = true }
shadow-rs = { version = "0.28", default-features = false }

View File

@ -5,15 +5,15 @@ edition = "2021"
license = "MIT"
name = "nu-cmd-plugin"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-cmd-plugin"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.94.2" }
itertools = { workspace = true }

View File

@ -5,18 +5,18 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-color-confi
edition = "2021"
license = "MIT"
name = "nu-color-config"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-json = { path = "../nu-json", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-json = { path = "../nu-json", version = "0.94.2" }
nu-ansi-term = { workspace = true }
serde = { workspace = true, features = ["derive"] }
[dev-dependencies]
nu-test-support = { path = "../nu-test-support", version = "0.94.1" }
nu-test-support = { path = "../nu-test-support", version = "0.94.2" }

View File

@ -5,7 +5,7 @@ edition = "2021"
license = "MIT"
name = "nu-command"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-command"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -13,21 +13,21 @@ version = "0.94.1"
bench = false
[dependencies]
nu-cmd-base = { path = "../nu-cmd-base", version = "0.94.1" }
nu-color-config = { path = "../nu-color-config", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-glob = { path = "../nu-glob", version = "0.94.1" }
nu-json = { path = "../nu-json", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-pretty-hex = { path = "../nu-pretty-hex", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-system = { path = "../nu-system", version = "0.94.1" }
nu-table = { path = "../nu-table", version = "0.94.1" }
nu-term-grid = { path = "../nu-term-grid", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-cmd-base = { path = "../nu-cmd-base", version = "0.94.2" }
nu-color-config = { path = "../nu-color-config", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-glob = { path = "../nu-glob", version = "0.94.2" }
nu-json = { path = "../nu-json", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-pretty-hex = { path = "../nu-pretty-hex", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-system = { path = "../nu-system", version = "0.94.2" }
nu-table = { path = "../nu-table", version = "0.94.2" }
nu-term-grid = { path = "../nu-term-grid", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
nu-ansi-term = { workspace = true }
nuon = { path = "../nuon", version = "0.94.1" }
nuon = { path = "../nuon", version = "0.94.2" }
alphanumeric-sort = { workspace = true }
base64 = { workspace = true }
@ -137,8 +137,8 @@ trash-support = ["trash"]
which-support = []
[dev-dependencies]
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-test-support = { path = "../nu-test-support", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }
nu-test-support = { path = "../nu-test-support", version = "0.94.2" }
dirs-next = { workspace = true }
mockito = { workspace = true, default-features = false }

View File

@ -4,7 +4,7 @@ use nu_protocol::{
ast::{Expr, Expression},
did_you_mean,
process::ChildProcess,
ByteStream, OutDest,
ByteStream, NuGlob, OutDest,
};
use nu_system::ForegroundChild;
use nu_utils::IgnoreCaseExt;
@ -13,7 +13,7 @@ use std::{
io::Write,
path::{Path, PathBuf},
process::Stdio,
sync::Arc,
sync::{atomic::AtomicBool, Arc},
thread,
};
@ -155,6 +155,9 @@ impl Command for External {
}
};
// Log the command we're about to run in case it's useful for debugging purposes.
log::trace!("run-external spawning: {command:?}");
// Spawn the child process. On Unix, also put the child process to
// foreground if we're in an interactive session.
#[cfg(windows)]
@ -232,6 +235,7 @@ pub fn eval_arguments_from_call(
stack: &mut Stack,
call: &Call,
) -> Result<Vec<Spanned<String>>, ShellError> {
let ctrlc = &engine_state.ctrlc;
let cwd = engine_state.cwd(Some(stack))?;
let mut args: Vec<Spanned<String>> = vec![];
for (expr, spread) in call.rest_iter(1) {
@ -240,7 +244,7 @@ pub fn eval_arguments_from_call(
// glob-expansion, and inner-quotes-removal, in that order.
for arg in eval_argument(engine_state, stack, expr, spread)? {
let tilde_expanded = expand_tilde(&arg);
for glob_expanded in expand_glob(&tilde_expanded, &cwd, expr.span)? {
for glob_expanded in expand_glob(&tilde_expanded, &cwd, expr.span, ctrlc)? {
let inner_quotes_removed = remove_inner_quotes(&glob_expanded);
args.push(inner_quotes_removed.into_owned().into_spanned(expr.span));
}
@ -321,37 +325,75 @@ fn expand_tilde(arg: &str) -> String {
///
/// Note: This matches the default behavior of Bash, but is known to be
/// error-prone. We might want to change this behavior in the future.
fn expand_glob(arg: &str, cwd: &Path, span: Span) -> Result<Vec<String>, ShellError> {
let Ok(paths) = nu_glob::glob_with_parent(arg, nu_glob::MatchOptions::default(), cwd) else {
fn expand_glob(
arg: &str,
cwd: &Path,
span: Span,
interrupt: &Option<Arc<AtomicBool>>,
) -> Result<Vec<String>, ShellError> {
const GLOB_CHARS: &[char] = &['*', '?', '['];
// Don't expand something that doesn't include the GLOB_CHARS
if !arg.contains(GLOB_CHARS) {
return Ok(vec![arg.into()]);
}
// We must use `nu_engine::glob_from` here, in order to ensure we get paths from the correct
// dir
let glob = NuGlob::Expand(arg.to_owned()).into_spanned(span);
let Ok((_prefix, paths)) = nu_engine::glob_from(&glob, cwd, span, None) else {
// If an error occurred, return the original input
return Ok(vec![arg.into()]);
};
let mut result = vec![];
for path in paths {
let path = path.map_err(|err| ShellError::IOErrorSpanned {
msg: format!("{}: {:?}", err.path().display(), err.error()),
span,
})?;
// Strip PWD from the resulting paths if possible.
let path_stripped = if let Ok(remainder) = path.strip_prefix(cwd) {
// If stripping PWD results in an empty path, return `.` instead.
if remainder.components().next().is_none() {
Path::new(".")
} else {
remainder
// If the first component of the original `arg` string path was '.', that should be preserved
let relative_to_dot = Path::new(arg).starts_with(".");
let paths = paths
// Skip over glob failures. These are usually just inaccessible paths.
.flat_map(|path_result| match path_result {
Ok(path) => Some(path),
Err(err) => {
// But internally log them just in case we need to debug this.
log::warn!("Error in run_external::expand_glob(): {}", err);
None
}
} else {
&path
};
let path_string = path_stripped.to_string_lossy().to_string();
result.push(path_string);
}
})
// Make the paths relative to the cwd
.map(|path| {
path.strip_prefix(cwd)
.map(|path| path.to_owned())
.unwrap_or(path)
})
// Add './' to relative paths if the original pattern had it
.map(|path| {
if relative_to_dot && path.is_relative() {
Path::new(".").join(path)
} else {
path
}
})
// Convert the paths returned to UTF-8 strings.
//
// FIXME: this fails to return the correct results for non-UTF-8 paths, but we don't support
// those in Nushell yet.
.map(|path| path.to_string_lossy().into_owned())
// Abandon if ctrl-c is pressed
.map(|path| {
if !nu_utils::ctrl_c::was_pressed(interrupt) {
Ok(path)
} else {
Err(ShellError::InterruptedByUser { span: Some(span) })
}
})
.collect::<Result<Vec<String>, ShellError>>()?;
if result.is_empty() {
result.push(arg.to_string());
if !paths.is_empty() {
Ok(paths)
} else {
// If we failed to match, return the original input
Ok(vec![arg.into()])
}
Ok(result)
}
/// Transforms `--option="value"` into `--option=value`. `value` can be quoted
@ -607,6 +649,7 @@ fn escape_cmd_argument(arg: &Spanned<String>) -> Result<Cow<'_, str>, ShellError
mod test {
use super::*;
use nu_protocol::ast::ListItem;
use nu_test_support::{fs::Stub, playground::Playground};
#[test]
fn test_remove_quotes() {
@ -669,26 +712,38 @@ mod test {
#[test]
fn test_expand_glob() {
let tempdir = tempfile::tempdir().unwrap();
let cwd = tempdir.path();
std::fs::File::create(cwd.join("a.txt")).unwrap();
std::fs::File::create(cwd.join("b.txt")).unwrap();
Playground::setup("test_expand_glob", |dirs, play| {
play.with_files(&[Stub::EmptyFile("a.txt"), Stub::EmptyFile("b.txt")]);
let actual = expand_glob("*.txt", cwd, Span::unknown()).unwrap();
let expected = &["a.txt", "b.txt"];
assert_eq!(actual, expected);
let cwd = dirs.test();
let actual = expand_glob("'*.txt'", cwd, Span::unknown()).unwrap();
let expected = &["'*.txt'"];
assert_eq!(actual, expected);
let actual = expand_glob("*.txt", cwd, Span::unknown(), &None).unwrap();
let expected = &["a.txt", "b.txt"];
assert_eq!(actual, expected);
let actual = expand_glob(cwd.to_str().unwrap(), cwd, Span::unknown()).unwrap();
let expected = &["."];
assert_eq!(actual, expected);
let actual = expand_glob("./*.txt", cwd, Span::unknown(), &None).unwrap();
let expected = vec![
Path::new(".").join("a.txt").to_string_lossy().into_owned(),
Path::new(".").join("b.txt").to_string_lossy().into_owned(),
];
assert_eq!(actual, expected);
let actual = expand_glob("[*.txt", cwd, Span::unknown()).unwrap();
let expected = &["[*.txt"];
assert_eq!(actual, expected);
let actual = expand_glob("'*.txt'", cwd, Span::unknown(), &None).unwrap();
let expected = &["'*.txt'"];
assert_eq!(actual, expected);
let actual = expand_glob(".", cwd, Span::unknown(), &None).unwrap();
let expected = &["."];
assert_eq!(actual, expected);
let actual = expand_glob("./a.txt", cwd, Span::unknown(), &None).unwrap();
let expected = &["./a.txt"];
assert_eq!(actual, expected);
let actual = expand_glob("[*.txt", cwd, Span::unknown(), &None).unwrap();
let expected = &["[*.txt"];
assert_eq!(actual, expected);
})
}
#[test]

View File

@ -5,16 +5,16 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-engine"
edition = "2021"
license = "MIT"
name = "nu-engine"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", features = ["plugin"], version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-glob = { path = "../nu-glob", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", features = ["plugin"], version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-glob = { path = "../nu-glob", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
[features]
plugin = []

View File

@ -5,21 +5,21 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-explore"
edition = "2021"
license = "MIT"
name = "nu-explore"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-color-config = { path = "../nu-color-config", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-table = { path = "../nu-table", version = "0.94.1" }
nu-json = { path = "../nu-json", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-color-config = { path = "../nu-color-config", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-table = { path = "../nu-table", version = "0.94.2" }
nu-json = { path = "../nu-json", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
nu-ansi-term = { workspace = true }
nu-pretty-hex = { path = "../nu-pretty-hex", version = "0.94.1" }
nu-pretty-hex = { path = "../nu-pretty-hex", version = "0.94.2" }
anyhow = { workspace = true }
log = { workspace = true }

View File

@ -1,6 +1,6 @@
[package]
name = "nu-glob"
version = "0.94.1"
version = "0.94.2"
authors = ["The Nushell Project Developers", "The Rust Project Developers"]
license = "MIT/Apache-2.0"
description = """

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-json"
edition = "2021"
license = "MIT"
name = "nu-json"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -23,5 +23,5 @@ serde = { workspace = true }
serde_json = { workspace = true }
[dev-dependencies]
# nu-path = { path="../nu-path", version = "0.94.1" }
# nu-path = { path="../nu-path", version = "0.94.2" }
# serde_json = "1.0"

View File

@ -3,14 +3,14 @@ authors = ["The Nushell Project Developers"]
description = "Nushell's integrated LSP server"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-lsp"
name = "nu-lsp"
version = "0.94.1"
version = "0.94.2"
edition = "2021"
license = "MIT"
[dependencies]
nu-cli = { path = "../nu-cli", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-cli = { path = "../nu-cli", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
reedline = { workspace = true }
@ -23,8 +23,8 @@ serde = { workspace = true }
serde_json = { workspace = true }
[dev-dependencies]
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-command = { path = "../nu-command", version = "0.94.1" }
nu-test-support = { path = "../nu-test-support", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }
nu-command = { path = "../nu-command", version = "0.94.2" }
nu-test-support = { path = "../nu-test-support", version = "0.94.2" }
assert-json-diff = "2.0"

View File

@ -5,17 +5,17 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-parser"
edition = "2021"
license = "MIT"
name = "nu-parser"
version = "0.94.1"
version = "0.94.2"
exclude = ["/fuzz"]
[lib]
bench = false
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-plugin-engine = { path = "../nu-plugin-engine", optional = true, version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-plugin-engine = { path = "../nu-plugin-engine", optional = true, version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
bytesize = { workspace = true }
chrono = { default-features = false, features = ['std'], workspace = true }

View File

@ -16,6 +16,7 @@ use nu_protocol::{
IN_VARIABLE_ID,
};
use std::{
borrow::Cow,
collections::{HashMap, HashSet},
num::ParseIntError,
str,
@ -241,15 +242,10 @@ fn parse_external_arg(working_set: &mut StateWorkingSet, span: Span) -> External
))
} else {
// Eval stage trims the quotes, so we don't have to do the same thing when parsing.
let contents = if contents.starts_with(b"\"") {
let (contents, err) = unescape_string(contents, span);
if let Some(err) = err {
working_set.error(err)
}
String::from_utf8_lossy(&contents).to_string()
} else {
String::from_utf8_lossy(contents).to_string()
};
let (contents, err) = unescape_string_preserving_quotes(contents, span);
if let Some(err) = err {
working_set.error(err);
}
ExternalArgument::Regular(Expression {
expr: Expr::String(contents),
@ -279,13 +275,13 @@ pub fn parse_external_call(working_set: &mut StateWorkingSet, spans: &[Span]) ->
Box::new(arg)
} else {
// Eval stage will unquote the string, so we don't bother with that here
let (contents, err) = unescape_string(&head_contents, head_span);
let (contents, err) = unescape_string_preserving_quotes(&head_contents, head_span);
if let Some(err) = err {
working_set.error(err)
}
Box::new(Expression {
expr: Expr::String(String::from_utf8_lossy(&contents).into_owned()),
expr: Expr::String(contents),
span: head_span,
ty: Type::String,
custom_completion: None,
@ -2699,6 +2695,23 @@ pub fn unescape_unquote_string(bytes: &[u8], span: Span) -> (String, Option<Pars
}
}
/// XXX: This is here temporarily as a patch, but we should replace this with properly representing
/// the quoted state of a string in the AST
fn unescape_string_preserving_quotes(bytes: &[u8], span: Span) -> (String, Option<ParseError>) {
let (bytes, err) = if bytes.starts_with(b"\"") {
let (bytes, err) = unescape_string(bytes, span);
(Cow::Owned(bytes), err)
} else {
(Cow::Borrowed(bytes), None)
};
// The original code for args used lossy conversion here, even though that's not what we
// typically use for strings. Revisit whether that's actually desirable later, but don't
// want to introduce a breaking change for this patch.
let token = String::from_utf8_lossy(&bytes).into_owned();
(token, err)
}
pub fn parse_string(working_set: &mut StateWorkingSet, span: Span) -> Expression {
trace!("parsing: string");

View File

@ -694,6 +694,221 @@ pub fn parse_call_missing_req_flag() {
));
}
#[rstest]
#[case("foo-external-call", "foo-external-call", "bare word")]
#[case("^foo-external-call", "foo-external-call", "bare word with caret")]
#[case(
"foo/external-call",
"foo/external-call",
"bare word with forward slash"
)]
#[case(
"^foo/external-call",
"foo/external-call",
"bare word with forward slash and caret"
)]
#[case(r"foo\external-call", r"foo\external-call", "bare word with backslash")]
#[case(
r"^foo\external-call",
r"foo\external-call",
"bare word with backslash and caret"
)]
#[case(
"^'foo external call'",
"'foo external call'",
"single quote with caret"
)]
#[case(
"^'foo/external call'",
"'foo/external call'",
"single quote with forward slash and caret"
)]
#[case(
r"^'foo\external call'",
r"'foo\external call'",
"single quote with backslash and caret"
)]
#[case(
r#"^"foo external call""#,
r#""foo external call""#,
"double quote with caret"
)]
#[case(
r#"^"foo/external call""#,
r#""foo/external call""#,
"double quote with forward slash and caret"
)]
#[case(
r#"^"foo\\external call""#,
r#""foo\external call""#,
"double quote with backslash and caret"
)]
#[case("`foo external call`", "`foo external call`", "backtick quote")]
#[case(
"^`foo external call`",
"`foo external call`",
"backtick quote with caret"
)]
#[case(
"`foo/external call`",
"`foo/external call`",
"backtick quote with forward slash"
)]
#[case(
"^`foo/external call`",
"`foo/external call`",
"backtick quote with forward slash and caret"
)]
#[case(
r"^`foo\external call`",
r"`foo\external call`",
"backtick quote with backslash"
)]
#[case(
r"^`foo\external call`",
r"`foo\external call`",
"backtick quote with backslash and caret"
)]
fn test_external_call_name(#[case] input: &str, #[case] expected: &str, #[case] tag: &str) {
let engine_state = EngineState::new();
let mut working_set = StateWorkingSet::new(&engine_state);
let block = parse(&mut working_set, None, input.as_bytes(), true);
assert!(
working_set.parse_errors.is_empty(),
"{tag}: errors: {:?}",
working_set.parse_errors
);
let pipeline = &block.pipelines[0];
assert_eq!(1, pipeline.len());
let element = &pipeline.elements[0];
match &element.expr.expr {
Expr::ExternalCall(name, args) => {
match &name.expr {
Expr::String(string) => {
assert_eq!(expected, string);
}
other => {
panic!("{tag}: Unexpected expression in command name position: {other:?}");
}
}
assert_eq!(0, args.len());
}
other => {
panic!("{tag}: Unexpected expression in pipeline: {other:?}");
}
}
}
#[rstest]
#[case("^foo bar-baz", "bar-baz", "bare word")]
#[case("^foo bar/baz", "bar/baz", "bare word with forward slash")]
#[case(r"^foo bar\baz", r"bar\baz", "bare word with backslash")]
#[case("^foo 'bar baz'", "'bar baz'", "single quote")]
#[case("foo 'bar/baz'", "'bar/baz'", "single quote with forward slash")]
#[case(r"foo 'bar\baz'", r"'bar\baz'", "single quote with backslash")]
#[case(r#"^foo "bar baz""#, r#""bar baz""#, "double quote")]
#[case(r#"^foo "bar/baz""#, r#""bar/baz""#, "double quote with forward slash")]
#[case(r#"^foo "bar\\baz""#, r#""bar\baz""#, "double quote with backslash")]
#[case("^foo `bar baz`", "`bar baz`", "backtick quote")]
#[case("^foo `bar/baz`", "`bar/baz`", "backtick quote with forward slash")]
#[case(r"^foo `bar\baz`", r"`bar\baz`", "backtick quote with backslash")]
fn test_external_call_argument_regular(
#[case] input: &str,
#[case] expected: &str,
#[case] tag: &str,
) {
let engine_state = EngineState::new();
let mut working_set = StateWorkingSet::new(&engine_state);
let block = parse(&mut working_set, None, input.as_bytes(), true);
assert!(
working_set.parse_errors.is_empty(),
"{tag}: errors: {:?}",
working_set.parse_errors
);
let pipeline = &block.pipelines[0];
assert_eq!(1, pipeline.len());
let element = &pipeline.elements[0];
match &element.expr.expr {
Expr::ExternalCall(name, args) => {
match &name.expr {
Expr::String(string) => {
assert_eq!("foo", string, "{tag}: incorrect name");
}
other => {
panic!("{tag}: Unexpected expression in command name position: {other:?}");
}
}
assert_eq!(1, args.len());
match &args[0] {
ExternalArgument::Regular(expr) => match &expr.expr {
Expr::String(string) => {
assert_eq!(expected, string, "{tag}: incorrect arg");
}
other => {
panic!("Unexpected expression in command arg position: {other:?}")
}
},
other @ ExternalArgument::Spread(..) => {
panic!("Unexpected external spread argument in command arg position: {other:?}")
}
}
}
other => {
panic!("{tag}: Unexpected expression in pipeline: {other:?}");
}
}
}
#[test]
fn test_external_call_argument_spread() {
let engine_state = EngineState::new();
let mut working_set = StateWorkingSet::new(&engine_state);
let block = parse(&mut working_set, None, b"^foo ...[a b c]", true);
assert!(
working_set.parse_errors.is_empty(),
"errors: {:?}",
working_set.parse_errors
);
let pipeline = &block.pipelines[0];
assert_eq!(1, pipeline.len());
let element = &pipeline.elements[0];
match &element.expr.expr {
Expr::ExternalCall(name, args) => {
match &name.expr {
Expr::String(string) => {
assert_eq!("foo", string, "incorrect name");
}
other => {
panic!("Unexpected expression in command name position: {other:?}");
}
}
assert_eq!(1, args.len());
match &args[0] {
ExternalArgument::Spread(expr) => match &expr.expr {
Expr::List(items) => {
assert_eq!(3, items.len());
// that's good enough, don't really need to go so deep into it...
}
other => {
panic!("Unexpected expression in command arg position: {other:?}")
}
},
other @ ExternalArgument::Regular(..) => {
panic!(
"Unexpected external regular argument in command arg position: {other:?}"
)
}
}
}
other => {
panic!("Unexpected expression in pipeline: {other:?}");
}
}
}
#[test]
fn test_nothing_comparison_eq() {
let engine_state = EngineState::new();

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-path"
edition = "2021"
license = "MIT"
name = "nu-path"
version = "0.94.1"
version = "0.94.2"
exclude = ["/fuzz"]
[lib]

View File

@ -5,14 +5,14 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-plugin-core
edition = "2021"
license = "MIT"
name = "nu-plugin-core"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.1", default-features = false }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.2", default-features = false }
rmp-serde = { workspace = true }
serde = { workspace = true }

View File

@ -5,17 +5,17 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-plugin-engi
edition = "2021"
license = "MIT"
name = "nu-plugin-engine"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-system = { path = "../nu-system", version = "0.94.1" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.1" }
nu-plugin-core = { path = "../nu-plugin-core", version = "0.94.1", default-features = false }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-system = { path = "../nu-system", version = "0.94.2" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.2" }
nu-plugin-core = { path = "../nu-plugin-core", version = "0.94.2", default-features = false }
serde = { workspace = true }
log = { workspace = true }

View File

@ -5,14 +5,14 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-plugin-prot
edition = "2021"
license = "MIT"
name = "nu-plugin-protocol"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
bincode = "1.3"
serde = { workspace = true, features = ["derive"] }

View File

@ -1,6 +1,6 @@
[package]
name = "nu-plugin-test-support"
version = "0.94.1"
version = "0.94.2"
edition = "2021"
license = "MIT"
description = "Testing support for Nushell plugins"
@ -12,14 +12,14 @@ bench = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1", features = ["plugin"] }
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-parser = { path = "../nu-parser", version = "0.94.1", features = ["plugin"] }
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-plugin-core = { path = "../nu-plugin-core", version = "0.94.1" }
nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.94.1" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.2", features = ["plugin"] }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
nu-parser = { path = "../nu-parser", version = "0.94.2", features = ["plugin"] }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-plugin-core = { path = "../nu-plugin-core", version = "0.94.2" }
nu-plugin-engine = { path = "../nu-plugin-engine", version = "0.94.2" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.2" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }
nu-ansi-term = { workspace = true }
similar = "2.5"

View File

@ -5,16 +5,16 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-plugin"
edition = "2021"
license = "MIT"
name = "nu-plugin"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.1" }
nu-plugin-core = { path = "../nu-plugin-core", version = "0.94.1", default-features = false }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-plugin-protocol = { path = "../nu-plugin-protocol", version = "0.94.2" }
nu-plugin-core = { path = "../nu-plugin-core", version = "0.94.2", default-features = false }
log = { workspace = true }
thiserror = "1.0"

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-pretty-hex"
edition = "2021"
license = "MIT"
name = "nu-pretty-hex"
version = "0.94.1"
version = "0.94.2"
[lib]
doctest = false

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-protocol"
edition = "2021"
license = "MIT"
name = "nu-protocol"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -13,9 +13,9 @@ version = "0.94.1"
bench = false
[dependencies]
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-system = { path = "../nu-system", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-system = { path = "../nu-system", version = "0.94.2" }
brotli = { workspace = true, optional = true }
byte-unit = { version = "5.1", features = [ "serde" ] }
@ -45,7 +45,7 @@ plugin = [
serde_json = { workspace = true }
strum = "0.26"
strum_macros = "0.26"
nu-test-support = { path = "../nu-test-support", version = "0.94.1" }
nu-test-support = { path = "../nu-test-support", version = "0.94.2" }
pretty_assertions = { workspace = true }
rstest = { workspace = true }
tempfile = { workspace = true }

View File

@ -5,12 +5,12 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-std"
edition = "2021"
license = "MIT"
name = "nu-std"
version = "0.94.1"
version = "0.94.2"
[dependencies]
nu-parser = { version = "0.94.1", path = "../nu-parser" }
nu-protocol = { version = "0.94.1", path = "../nu-protocol" }
nu-engine = { version = "0.94.1", path = "../nu-engine" }
nu-parser = { version = "0.94.2", path = "../nu-parser" }
nu-protocol = { version = "0.94.2", path = "../nu-protocol" }
nu-engine = { version = "0.94.2", path = "../nu-engine" }
miette = { workspace = true, features = ["fancy-no-backtrace"] }
log = "0.4"

View File

@ -3,7 +3,7 @@ authors = ["The Nushell Project Developers", "procs creators"]
description = "Nushell system querying"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-system"
name = "nu-system"
version = "0.94.1"
version = "0.94.2"
edition = "2021"
license = "MIT"

View File

@ -5,20 +5,20 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-table"
edition = "2021"
license = "MIT"
name = "nu-table"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-color-config = { path = "../nu-color-config", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-color-config = { path = "../nu-color-config", version = "0.94.2" }
nu-ansi-term = { workspace = true }
once_cell = { workspace = true }
fancy-regex = { workspace = true }
tabled = { workspace = true, features = ["color"], default-features = false }
[dev-dependencies]
# nu-test-support = { path="../nu-test-support", version = "0.94.1" }
# nu-test-support = { path="../nu-test-support", version = "0.94.2" }

View File

@ -5,12 +5,12 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-term-grid"
edition = "2021"
license = "MIT"
name = "nu-term-grid"
version = "0.94.1"
version = "0.94.2"
[lib]
bench = false
[dependencies]
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
unicode-width = { workspace = true }

View File

@ -5,16 +5,16 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu-test-suppor
edition = "2021"
license = "MIT"
name = "nu-test-support"
version = "0.94.1"
version = "0.94.2"
[lib]
doctest = false
bench = false
[dependencies]
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-glob = { path = "../nu-glob", version = "0.94.1" }
nu-utils = { path = "../nu-utils", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.2" }
nu-glob = { path = "../nu-glob", version = "0.94.2" }
nu-utils = { path = "../nu-utils", version = "0.94.2" }
num-format = { workspace = true }
which = { workspace = true }

View File

@ -5,7 +5,7 @@ edition = "2021"
license = "MIT"
name = "nu-utils"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-utils"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[[bin]]

View File

@ -1,6 +1,6 @@
# Nushell Config File
#
# version = "0.94.1"
# version = "0.94.2"
# For more information on defining custom themes, see
# https://www.nushell.sh/book/coloring_and_theming.html

View File

@ -1,6 +1,6 @@
# Nushell Environment Config File
#
# version = "0.94.1"
# version = "0.94.2"
def create_left_prompt [] {
let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) {

View File

@ -10,10 +10,10 @@ name = "nu_plugin_custom_values"
bench = false
[dependencies]
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
serde = { workspace = true, default-features = false }
typetag = "0.2"
[dev-dependencies]
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.1" }
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.2" }

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_exam
edition = "2021"
license = "MIT"
name = "nu_plugin_example"
version = "0.94.1"
version = "0.94.2"
[[bin]]
name = "nu_plugin_example"
@ -15,9 +15,9 @@ bench = false
bench = false
[dependencies]
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
[dev-dependencies]
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.2" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }

View File

@ -5,12 +5,12 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_form
edition = "2021"
license = "MIT"
name = "nu_plugin_formats"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
indexmap = { workspace = true }
eml-parser = "0.1"
@ -18,4 +18,4 @@ ical = "0.11"
rust-ini = "0.21.0"
[dev-dependencies]
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.1" }
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.2" }

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_gsta
edition = "2021"
license = "MIT"
name = "nu_plugin_gstat"
version = "0.94.1"
version = "0.94.2"
[lib]
doctest = false
@ -16,7 +16,7 @@ name = "nu_plugin_gstat"
bench = false
[dependencies]
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
git2 = "0.18"

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_inc"
edition = "2021"
license = "MIT"
name = "nu_plugin_inc"
version = "0.94.1"
version = "0.94.2"
[lib]
doctest = false
@ -16,7 +16,7 @@ name = "nu_plugin_inc"
bench = false
[dependencies]
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1", features = ["plugin"] }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2", features = ["plugin"] }
semver = "1.0"

View File

@ -6,7 +6,7 @@
# it also allows us to test the plugin interface with something manually implemented in a scripting
# language without adding any extra dependencies to our tests.
const NUSHELL_VERSION = "0.94.1"
const NUSHELL_VERSION = "0.94.2"
def main [--stdio] {
if ($stdio) {

View File

@ -5,7 +5,7 @@ edition = "2021"
license = "MIT"
name = "nu_plugin_polars"
repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_polars"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -17,9 +17,9 @@ bench = false
bench = false
[dependencies]
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-path = { path = "../nu-path", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-path = { path = "../nu-path", version = "0.94.2" }
# Potential dependencies for extras
chrono = { workspace = true, features = ["std", "unstable-locales"], default-features = false }
@ -73,9 +73,9 @@ optional = false
version = "0.39"
[dev-dependencies]
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-command = { path = "../nu-command", version = "0.94.1" }
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.1" }
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-command = { path = "../nu-command", version = "0.94.2" }
nu-plugin-test-support = { path = "../nu-plugin-test-support", version = "0.94.2" }
tempfile.workspace = true

View File

@ -27,7 +27,7 @@ import sys
import json
NUSHELL_VERSION = "0.94.1"
NUSHELL_VERSION = "0.94.2"
def signatures():

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_quer
edition = "2021"
license = "MIT"
name = "nu_plugin_query"
version = "0.94.1"
version = "0.94.2"
[lib]
doctest = false
@ -16,8 +16,8 @@ name = "nu_plugin_query"
bench = false
[dependencies]
nu-plugin = { path = "../nu-plugin", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-plugin = { path = "../nu-plugin", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
gjson = "0.8"
scraper = { default-features = false, version = "0.19" }

View File

@ -5,7 +5,7 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nu_plugin_stre
edition = "2021"
license = "MIT"
name = "nu_plugin_stress_internals"
version = "0.94.1"
version = "0.94.2"
[[bin]]
name = "nu_plugin_stress_internals"

View File

@ -5,14 +5,14 @@ repository = "https://github.com/nushell/nushell/tree/main/crates/nuon"
edition = "2021"
license = "MIT"
name = "nuon"
version = "0.94.1"
version = "0.94.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
nu-parser = { path = "../nu-parser", version = "0.94.1" }
nu-protocol = { path = "../nu-protocol", version = "0.94.1" }
nu-engine = { path = "../nu-engine", version = "0.94.1" }
nu-parser = { path = "../nu-parser", version = "0.94.2" }
nu-protocol = { path = "../nu-protocol", version = "0.94.2" }
nu-engine = { path = "../nu-engine", version = "0.94.2" }
once_cell = { workspace = true }
fancy-regex = { workspace = true }