From 9d00d4d6fe00c715cb0f501d1cc1da079728d7f6 Mon Sep 17 00:00:00 2001 From: Ian Manske Date: Sat, 6 Jul 2024 19:27:55 -0700 Subject: [PATCH] Rename `Interrupt` to `Signals` --- benches/benchmarks.rs | 4 +- .../nu-cli/src/commands/history/history_.rs | 6 +- crates/nu-cli/src/nu_highlight.rs | 4 +- crates/nu-cli/src/repl.rs | 4 +- crates/nu-cmd-base/src/input_handler.rs | 8 +- crates/nu-cmd-extra/src/extra/bits/and.rs | 2 +- crates/nu-cmd-extra/src/extra/bits/into.rs | 2 +- crates/nu-cmd-extra/src/extra/bits/not.rs | 2 +- crates/nu-cmd-extra/src/extra/bits/or.rs | 2 +- .../src/extra/bits/rotate_left.rs | 2 +- .../src/extra/bits/rotate_right.rs | 2 +- .../nu-cmd-extra/src/extra/bits/shift_left.rs | 2 +- .../src/extra/bits/shift_right.rs | 2 +- crates/nu-cmd-extra/src/extra/bits/xor.rs | 2 +- .../nu-cmd-extra/src/extra/conversions/fmt.rs | 2 +- .../src/extra/filters/each_while.rs | 4 +- .../src/extra/filters/update_cells.rs | 2 +- crates/nu-cmd-extra/src/extra/math/arccos.rs | 2 +- crates/nu-cmd-extra/src/extra/math/arccosh.rs | 2 +- crates/nu-cmd-extra/src/extra/math/arcsin.rs | 2 +- crates/nu-cmd-extra/src/extra/math/arcsinh.rs | 2 +- crates/nu-cmd-extra/src/extra/math/arctan.rs | 2 +- crates/nu-cmd-extra/src/extra/math/arctanh.rs | 2 +- crates/nu-cmd-extra/src/extra/math/cos.rs | 2 +- crates/nu-cmd-extra/src/extra/math/cosh.rs | 2 +- crates/nu-cmd-extra/src/extra/math/exp.rs | 2 +- crates/nu-cmd-extra/src/extra/math/ln.rs | 2 +- crates/nu-cmd-extra/src/extra/math/sin.rs | 2 +- crates/nu-cmd-extra/src/extra/math/sinh.rs | 2 +- crates/nu-cmd-extra/src/extra/math/tan.rs | 2 +- crates/nu-cmd-extra/src/extra/math/tanh.rs | 2 +- .../src/extra/platform/ansi/gradient.rs | 2 +- .../src/extra/strings/encode_decode/hex.rs | 2 +- .../src/extra/strings/format/command.rs | 2 +- .../src/extra/strings/str_/case/mod.rs | 2 +- crates/nu-cmd-lang/src/core_commands/for_.rs | 8 +- crates/nu-cmd-lang/src/core_commands/loop_.rs | 2 +- .../nu-cmd-lang/src/core_commands/while_.rs | 2 +- crates/nu-command/src/bytes/add.rs | 2 +- crates/nu-command/src/bytes/at.rs | 2 +- crates/nu-command/src/bytes/collect.rs | 2 +- crates/nu-command/src/bytes/ends_with.rs | 2 +- crates/nu-command/src/bytes/index_of.rs | 2 +- crates/nu-command/src/bytes/length.rs | 2 +- crates/nu-command/src/bytes/remove.rs | 2 +- crates/nu-command/src/bytes/replace.rs | 2 +- crates/nu-command/src/bytes/reverse.rs | 2 +- crates/nu-command/src/bytes/starts_with.rs | 2 +- crates/nu-command/src/conversions/fill.rs | 2 +- .../nu-command/src/conversions/into/binary.rs | 2 +- .../nu-command/src/conversions/into/bool.rs | 2 +- .../src/conversions/into/datetime.rs | 2 +- .../src/conversions/into/duration.rs | 2 +- .../src/conversions/into/filesize.rs | 2 +- .../nu-command/src/conversions/into/float.rs | 2 +- .../nu-command/src/conversions/into/glob.rs | 2 +- crates/nu-command/src/conversions/into/int.rs | 2 +- .../nu-command/src/conversions/into/record.rs | 2 +- .../nu-command/src/conversions/into/string.rs | 2 +- .../nu-command/src/conversions/into/value.rs | 2 +- .../src/database/commands/into_sqlite.rs | 16 +-- .../nu-command/src/database/values/sqlite.rs | 58 ++++----- crates/nu-command/src/date/humanize.rs | 2 +- crates/nu-command/src/date/list_timezone.rs | 2 +- crates/nu-command/src/date/to_record.rs | 2 +- crates/nu-command/src/date/to_table.rs | 2 +- crates/nu-command/src/date/to_timezone.rs | 2 +- crates/nu-command/src/debug/debug_.rs | 2 +- crates/nu-command/src/debug/metadata_set.rs | 8 +- crates/nu-command/src/filesystem/du.rs | 14 +-- crates/nu-command/src/filesystem/glob.rs | 12 +- crates/nu-command/src/filesystem/ls.rs | 37 +++--- crates/nu-command/src/filesystem/open.rs | 6 +- crates/nu-command/src/filesystem/rm.rs | 2 +- crates/nu-command/src/filesystem/save.rs | 32 ++--- crates/nu-command/src/filesystem/watch.rs | 2 +- crates/nu-command/src/filters/append.rs | 2 +- crates/nu-command/src/filters/compact.rs | 2 +- crates/nu-command/src/filters/default.rs | 4 +- crates/nu-command/src/filters/drop/column.rs | 2 +- crates/nu-command/src/filters/drop/nth.rs | 4 +- crates/nu-command/src/filters/each.rs | 6 +- crates/nu-command/src/filters/enumerate.rs | 2 +- crates/nu-command/src/filters/every.rs | 2 +- crates/nu-command/src/filters/filter.rs | 6 +- crates/nu-command/src/filters/find.rs | 6 +- crates/nu-command/src/filters/first.rs | 8 +- crates/nu-command/src/filters/flatten.rs | 2 +- crates/nu-command/src/filters/get.rs | 2 +- crates/nu-command/src/filters/group.rs | 2 +- crates/nu-command/src/filters/insert.rs | 2 +- crates/nu-command/src/filters/interleave.rs | 2 +- crates/nu-command/src/filters/items.rs | 2 +- crates/nu-command/src/filters/last.rs | 2 +- crates/nu-command/src/filters/lines.rs | 2 +- crates/nu-command/src/filters/merge.rs | 2 +- crates/nu-command/src/filters/move_.rs | 2 +- crates/nu-command/src/filters/par_each.rs | 14 +-- crates/nu-command/src/filters/prepend.rs | 2 +- crates/nu-command/src/filters/range.rs | 4 +- crates/nu-command/src/filters/reduce.rs | 2 +- crates/nu-command/src/filters/rename.rs | 2 +- crates/nu-command/src/filters/reverse.rs | 2 +- crates/nu-command/src/filters/select.rs | 6 +- crates/nu-command/src/filters/shuffle.rs | 2 +- crates/nu-command/src/filters/skip/skip_.rs | 6 +- .../nu-command/src/filters/skip/skip_until.rs | 2 +- .../nu-command/src/filters/skip/skip_while.rs | 2 +- crates/nu-command/src/filters/sort.rs | 2 +- crates/nu-command/src/filters/sort_by.rs | 2 +- crates/nu-command/src/filters/take/take_.rs | 10 +- .../nu-command/src/filters/take/take_until.rs | 2 +- .../nu-command/src/filters/take/take_while.rs | 2 +- crates/nu-command/src/filters/tee.rs | 28 ++--- crates/nu-command/src/filters/transpose.rs | 2 +- crates/nu-command/src/filters/uniq.rs | 4 +- crates/nu-command/src/filters/update.rs | 2 +- crates/nu-command/src/filters/upsert.rs | 2 +- crates/nu-command/src/filters/utils.rs | 2 +- crates/nu-command/src/filters/values.rs | 10 +- crates/nu-command/src/filters/where_.rs | 2 +- crates/nu-command/src/filters/window.rs | 2 +- crates/nu-command/src/filters/wrap.rs | 2 +- crates/nu-command/src/filters/zip.rs | 2 +- .../nu-command/src/formats/from/delimited.rs | 8 +- crates/nu-command/src/formats/from/json.rs | 10 +- crates/nu-command/src/formats/from/msgpack.rs | 10 +- .../nu-command/src/formats/from/msgpackz.rs | 2 +- crates/nu-command/src/formats/to/delimited.rs | 4 +- crates/nu-command/src/formats/to/msgpack.rs | 4 +- crates/nu-command/src/formats/to/text.rs | 2 +- crates/nu-command/src/generators/generate.rs | 2 +- crates/nu-command/src/generators/seq.rs | 4 +- crates/nu-command/src/hash/generic_digest.rs | 2 +- crates/nu-command/src/math/abs.rs | 2 +- crates/nu-command/src/math/ceil.rs | 2 +- crates/nu-command/src/math/floor.rs | 2 +- crates/nu-command/src/math/log.rs | 2 +- crates/nu-command/src/math/round.rs | 2 +- crates/nu-command/src/math/sqrt.rs | 2 +- crates/nu-command/src/math/utils.rs | 4 +- crates/nu-command/src/network/http/client.rs | 39 +++--- crates/nu-command/src/network/http/delete.rs | 2 +- crates/nu-command/src/network/http/get.rs | 2 +- crates/nu-command/src/network/http/head.rs | 8 +- crates/nu-command/src/network/http/options.rs | 2 +- crates/nu-command/src/network/http/patch.rs | 2 +- crates/nu-command/src/network/http/post.rs | 2 +- crates/nu-command/src/network/http/put.rs | 2 +- crates/nu-command/src/network/url/decode.rs | 2 +- crates/nu-command/src/network/url/encode.rs | 4 +- crates/nu-command/src/path/basename.rs | 4 +- crates/nu-command/src/path/dirname.rs | 4 +- crates/nu-command/src/path/exists.rs | 4 +- crates/nu-command/src/path/expand.rs | 4 +- crates/nu-command/src/path/parse.rs | 4 +- crates/nu-command/src/path/relative_to.rs | 4 +- crates/nu-command/src/path/split.rs | 4 +- crates/nu-command/src/path/type.rs | 4 +- crates/nu-command/src/platform/ansi/ansi_.rs | 10 +- crates/nu-command/src/platform/ansi/link.rs | 4 +- crates/nu-command/src/platform/ansi/strip.rs | 2 +- crates/nu-command/src/platform/dir_info.rs | 12 +- crates/nu-command/src/platform/sleep.rs | 2 +- crates/nu-command/src/random/dice.rs | 2 +- crates/nu-command/src/stor/create.rs | 12 +- crates/nu-command/src/stor/delete.rs | 4 +- crates/nu-command/src/stor/export.rs | 4 +- crates/nu-command/src/stor/import.rs | 4 +- crates/nu-command/src/stor/insert.rs | 16 +-- crates/nu-command/src/stor/open.rs | 4 +- crates/nu-command/src/stor/reset.rs | 4 +- crates/nu-command/src/stor/update.rs | 4 +- crates/nu-command/src/strings/char_.rs | 10 +- .../nu-command/src/strings/detect_columns.rs | 6 +- .../src/strings/encode_decode/base64.rs | 2 +- crates/nu-command/src/strings/format/date.rs | 2 +- .../nu-command/src/strings/format/duration.rs | 4 +- .../nu-command/src/strings/format/filesize.rs | 4 +- crates/nu-command/src/strings/parse.rs | 16 +-- crates/nu-command/src/strings/split/chars.rs | 2 +- crates/nu-command/src/strings/split/column.rs | 2 +- crates/nu-command/src/strings/split/list.rs | 2 +- crates/nu-command/src/strings/split/row.rs | 2 +- crates/nu-command/src/strings/split/words.rs | 2 +- .../src/strings/str_/case/capitalize.rs | 2 +- .../src/strings/str_/case/downcase.rs | 2 +- .../nu-command/src/strings/str_/case/mod.rs | 2 +- .../src/strings/str_/case/upcase.rs | 2 +- .../nu-command/src/strings/str_/contains.rs | 4 +- .../nu-command/src/strings/str_/deunicode.rs | 4 +- .../nu-command/src/strings/str_/distance.rs | 4 +- .../nu-command/src/strings/str_/ends_with.rs | 4 +- crates/nu-command/src/strings/str_/expand.rs | 2 +- .../nu-command/src/strings/str_/index_of.rs | 4 +- crates/nu-command/src/strings/str_/join.rs | 4 +- crates/nu-command/src/strings/str_/length.rs | 2 +- crates/nu-command/src/strings/str_/replace.rs | 4 +- crates/nu-command/src/strings/str_/reverse.rs | 4 +- .../src/strings/str_/starts_with.rs | 4 +- crates/nu-command/src/strings/str_/stats.rs | 2 +- .../nu-command/src/strings/str_/substring.rs | 4 +- .../nu-command/src/strings/str_/trim/trim_.rs | 2 +- crates/nu-command/src/system/ps.rs | 2 +- .../nu-command/src/system/registry_query.rs | 2 +- crates/nu-command/src/system/run_external.rs | 25 ++-- crates/nu-command/src/system/which_.rs | 2 +- crates/nu-command/src/viewers/table.rs | 59 ++++----- crates/nu-engine/src/eval.rs | 2 +- crates/nu-explore/src/commands/expand.rs | 2 +- crates/nu-explore/src/nu_common/table.rs | 16 +-- crates/nu-explore/src/pager/mod.rs | 2 +- crates/nu-lsp/src/lib.rs | 4 +- crates/nu-plugin-core/src/interface/mod.rs | 11 +- crates/nu-plugin-core/src/interface/tests.rs | 16 +-- crates/nu-plugin-engine/src/context.rs | 16 +-- crates/nu-plugin-engine/src/interface/mod.rs | 30 ++--- .../nu-plugin-engine/src/interface/tests.rs | 26 ++-- crates/nu-plugin-test-support/src/lib.rs | 6 +- .../nu-plugin-test-support/src/plugin_test.rs | 12 +- .../tests/lowercase/mod.rs | 6 +- crates/nu-plugin/src/plugin/command.rs | 4 +- crates/nu-plugin/src/plugin/interface/mod.rs | 6 +- .../nu-plugin/src/plugin/interface/tests.rs | 18 +-- crates/nu-protocol/src/engine/engine_state.rs | 20 +-- .../nu-protocol/src/pipeline/byte_stream.rs | 118 +++++++++--------- crates/nu-protocol/src/pipeline/interrupt.rs | 76 ----------- .../nu-protocol/src/pipeline/list_stream.rs | 18 +-- crates/nu-protocol/src/pipeline/mod.rs | 4 +- .../nu-protocol/src/pipeline/pipeline_data.rs | 60 ++++----- crates/nu-protocol/src/pipeline/signals.rs | 76 +++++++++++ crates/nu-protocol/src/value/mod.rs | 4 +- crates/nu-protocol/src/value/range.rs | 28 ++--- crates/nu-table/src/types/expanded.rs | 8 +- crates/nu-table/src/types/general.rs | 6 +- crates/nu-table/src/types/mod.rs | 8 +- .../src/commands/collect_bytes.rs | 4 +- .../src/commands/generate.rs | 4 +- crates/nu_plugin_example/src/commands/seq.rs | 4 +- src/signals.rs | 4 +- 240 files changed, 781 insertions(+), 810 deletions(-) delete mode 100644 crates/nu-protocol/src/pipeline/interrupt.rs create mode 100644 crates/nu-protocol/src/pipeline/signals.rs diff --git a/benches/benchmarks.rs b/benches/benchmarks.rs index cb85fe424a..ea296f0d06 100644 --- a/benches/benchmarks.rs +++ b/benches/benchmarks.rs @@ -4,7 +4,7 @@ use nu_plugin_protocol::{PluginCallResponse, PluginOutput}; use nu_protocol::{ engine::{EngineState, Stack}, - Interrupt, PipelineData, Span, Spanned, Value, + PipelineData, Signals, Span, Spanned, Value, }; use nu_std::load_standard_library; use nu_utils::{get_default_config, get_default_env}; @@ -253,7 +253,7 @@ fn bench_eval_interleave(n: i32) -> impl IntoBenchmarks { fn bench_eval_interleave_with_interrupt(n: i32) -> impl IntoBenchmarks { let mut engine = setup_engine(); - engine.set_interrupt(Interrupt::new(Arc::new(AtomicBool::new(false)))); + engine.set_signals(Signals::new(Arc::new(AtomicBool::new(false)))); let stack = Stack::new(); bench_command( &format!("eval_interleave_with_interrupt_{n}"), diff --git a/crates/nu-cli/src/commands/history/history_.rs b/crates/nu-cli/src/commands/history/history_.rs index 112d8373f4..cdf85eea72 100644 --- a/crates/nu-cli/src/commands/history/history_.rs +++ b/crates/nu-cli/src/commands/history/history_.rs @@ -47,7 +47,7 @@ impl Command for History { if let Some(config_path) = nu_path::config_dir() { let clear = call.has_flag(engine_state, stack, "clear")?; let long = call.has_flag(engine_state, stack, "long")?; - let interrupt = engine_state.interrupt().clone(); + let signals = engine_state.signals().clone(); let mut history_path = config_path; history_path.push("nushell"); @@ -107,7 +107,7 @@ impl Command for History { file: history_path.display().to_string(), span: head, })? - .into_pipeline_data(head, interrupt)), + .into_pipeline_data(head, signals)), HistoryFileFormat::Sqlite => Ok(history_reader .and_then(|h| { h.search(SearchQuery::everything(SearchDirection::Forward, None)) @@ -122,7 +122,7 @@ impl Command for History { file: history_path.display().to_string(), span: head, })? - .into_pipeline_data(head, interrupt)), + .into_pipeline_data(head, signals)), } } } else { diff --git a/crates/nu-cli/src/nu_highlight.rs b/crates/nu-cli/src/nu_highlight.rs index e0c798bdcd..f4f38296de 100644 --- a/crates/nu-cli/src/nu_highlight.rs +++ b/crates/nu-cli/src/nu_highlight.rs @@ -32,7 +32,7 @@ impl Command for NuHighlight { ) -> Result { let head = call.head; - let interrupt = engine_state.interrupt(); + let signals = engine_state.signals(); let engine_state = std::sync::Arc::new(engine_state.clone()); let config = engine_state.get_config().clone(); @@ -50,7 +50,7 @@ impl Command for NuHighlight { } Err(err) => Value::error(err, head), }, - interrupt, + signals, ) } diff --git a/crates/nu-cli/src/repl.rs b/crates/nu-cli/src/repl.rs index 6dc9f1853a..12df46ecc3 100644 --- a/crates/nu-cli/src/repl.rs +++ b/crates/nu-cli/src/repl.rs @@ -271,8 +271,8 @@ fn loop_iteration(ctx: LoopContext) -> (bool, Stack, Reedline) { perf!("merge env", start_time, use_color); start_time = std::time::Instant::now(); - engine_state.reset_interrupt(); - perf!("reset interrupt", start_time, use_color); + engine_state.reset_signals(); + perf!("reset signals", start_time, use_color); start_time = std::time::Instant::now(); // Right before we start our prompt and take input from the user, diff --git a/crates/nu-cmd-base/src/input_handler.rs b/crates/nu-cmd-base/src/input_handler.rs index 2baa881a26..7d61f90cb0 100644 --- a/crates/nu-cmd-base/src/input_handler.rs +++ b/crates/nu-cmd-base/src/input_handler.rs @@ -1,4 +1,4 @@ -use nu_protocol::{ast::CellPath, Interrupt, PipelineData, ShellError, Span, Value}; +use nu_protocol::{ast::CellPath, PipelineData, ShellError, Signals, Span, Value}; use std::sync::Arc; pub trait CmdArgument { @@ -40,7 +40,7 @@ pub fn operate( mut arg: A, input: PipelineData, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result where A: CmdArgument + Send + Sync + 'static, @@ -55,7 +55,7 @@ where _ => cmd(&v, &arg, span), } }, - interrupt, + signals, ), Some(column_paths) => { let arg = Arc::new(arg); @@ -79,7 +79,7 @@ where } v }, - interrupt, + signals, ) } } diff --git a/crates/nu-cmd-extra/src/extra/bits/and.rs b/crates/nu-cmd-extra/src/extra/bits/and.rs index a78781b1e6..234b4e5cc1 100644 --- a/crates/nu-cmd-extra/src/extra/bits/and.rs +++ b/crates/nu-cmd-extra/src/extra/bits/and.rs @@ -79,7 +79,7 @@ impl Command for BitsAnd { input.map( move |value| binary_op(&value, &target, little_endian, |(l, r)| l & r, head), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/bits/into.rs b/crates/nu-cmd-extra/src/extra/bits/into.rs index 8bde6cd3f2..ac2a618c13 100644 --- a/crates/nu-cmd-extra/src/extra/bits/into.rs +++ b/crates/nu-cmd-extra/src/extra/bits/into.rs @@ -123,7 +123,7 @@ fn into_bits( Ok(Value::binary(stream.into_bytes()?, head).into_pipeline_data()) } else { let args = Arguments { cell_paths }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } } diff --git a/crates/nu-cmd-extra/src/extra/bits/not.rs b/crates/nu-cmd-extra/src/extra/bits/not.rs index f1cbbc363e..405cc79d7e 100644 --- a/crates/nu-cmd-extra/src/extra/bits/not.rs +++ b/crates/nu-cmd-extra/src/extra/bits/not.rs @@ -82,7 +82,7 @@ impl Command for BitsNot { number_size, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/bits/or.rs b/crates/nu-cmd-extra/src/extra/bits/or.rs index 8125822fcd..a0af2dc8d0 100644 --- a/crates/nu-cmd-extra/src/extra/bits/or.rs +++ b/crates/nu-cmd-extra/src/extra/bits/or.rs @@ -80,7 +80,7 @@ impl Command for BitsOr { input.map( move |value| binary_op(&value, &target, little_endian, |(l, r)| l | r, head), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/bits/rotate_left.rs b/crates/nu-cmd-extra/src/extra/bits/rotate_left.rs index b472002ea4..5bb9e42f6b 100644 --- a/crates/nu-cmd-extra/src/extra/bits/rotate_left.rs +++ b/crates/nu-cmd-extra/src/extra/bits/rotate_left.rs @@ -86,7 +86,7 @@ impl Command for BitsRol { bits, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/bits/rotate_right.rs b/crates/nu-cmd-extra/src/extra/bits/rotate_right.rs index 7f4f5a5e94..31e17891a3 100644 --- a/crates/nu-cmd-extra/src/extra/bits/rotate_right.rs +++ b/crates/nu-cmd-extra/src/extra/bits/rotate_right.rs @@ -86,7 +86,7 @@ impl Command for BitsRor { bits, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/bits/shift_left.rs b/crates/nu-cmd-extra/src/extra/bits/shift_left.rs index f0f038e51a..6a67a45e0e 100644 --- a/crates/nu-cmd-extra/src/extra/bits/shift_left.rs +++ b/crates/nu-cmd-extra/src/extra/bits/shift_left.rs @@ -88,7 +88,7 @@ impl Command for BitsShl { bits, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/bits/shift_right.rs b/crates/nu-cmd-extra/src/extra/bits/shift_right.rs index 383bbd1e9d..e45e10ac94 100644 --- a/crates/nu-cmd-extra/src/extra/bits/shift_right.rs +++ b/crates/nu-cmd-extra/src/extra/bits/shift_right.rs @@ -88,7 +88,7 @@ impl Command for BitsShr { bits, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/bits/xor.rs b/crates/nu-cmd-extra/src/extra/bits/xor.rs index 4546e100bc..4a71487137 100644 --- a/crates/nu-cmd-extra/src/extra/bits/xor.rs +++ b/crates/nu-cmd-extra/src/extra/bits/xor.rs @@ -80,7 +80,7 @@ impl Command for BitsXor { input.map( move |value| binary_op(&value, &target, little_endian, |(l, r)| l ^ r, head), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/conversions/fmt.rs b/crates/nu-cmd-extra/src/extra/conversions/fmt.rs index 32c824e5d4..3b682291e7 100644 --- a/crates/nu-cmd-extra/src/extra/conversions/fmt.rs +++ b/crates/nu-cmd-extra/src/extra/conversions/fmt.rs @@ -59,7 +59,7 @@ fn fmt( ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn action(input: &Value, _args: &CellPathOnlyArgs, span: Span) -> Value { diff --git a/crates/nu-cmd-extra/src/extra/filters/each_while.rs b/crates/nu-cmd-extra/src/extra/filters/each_while.rs index 5e64744343..1f30e5b9b9 100644 --- a/crates/nu-cmd-extra/src/extra/filters/each_while.rs +++ b/crates/nu-cmd-extra/src/extra/filters/each_while.rs @@ -89,7 +89,7 @@ impl Command for EachWhile { } }) .fuse() - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } PipelineData::ByteStream(stream, ..) => { let span = stream.span(); @@ -107,7 +107,7 @@ impl Command for EachWhile { } }) .fuse() - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } else { Ok(PipelineData::Empty) } diff --git a/crates/nu-cmd-extra/src/extra/filters/update_cells.rs b/crates/nu-cmd-extra/src/extra/filters/update_cells.rs index 151c3f088f..b102c13c0d 100644 --- a/crates/nu-cmd-extra/src/extra/filters/update_cells.rs +++ b/crates/nu-cmd-extra/src/extra/filters/update_cells.rs @@ -108,7 +108,7 @@ impl Command for UpdateCells { columns, span: head, } - .into_pipeline_data(head, engine_state.interrupt().clone()) + .into_pipeline_data(head, engine_state.signals().clone()) .set_metadata(metadata)) } } diff --git a/crates/nu-cmd-extra/src/extra/math/arccos.rs b/crates/nu-cmd-extra/src/extra/math/arccos.rs index 7d6e04655a..5d0a659380 100644 --- a/crates/nu-cmd-extra/src/extra/math/arccos.rs +++ b/crates/nu-cmd-extra/src/extra/math/arccos.rs @@ -45,7 +45,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, use_degrees), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/math/arccosh.rs b/crates/nu-cmd-extra/src/extra/math/arccosh.rs index ba7dd8a5b1..532a388b3f 100644 --- a/crates/nu-cmd-extra/src/extra/math/arccosh.rs +++ b/crates/nu-cmd-extra/src/extra/math/arccosh.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/arcsin.rs b/crates/nu-cmd-extra/src/extra/math/arcsin.rs index fbedd62f8a..a85c438367 100644 --- a/crates/nu-cmd-extra/src/extra/math/arcsin.rs +++ b/crates/nu-cmd-extra/src/extra/math/arcsin.rs @@ -45,7 +45,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, use_degrees), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/math/arcsinh.rs b/crates/nu-cmd-extra/src/extra/math/arcsinh.rs index 92cbd1e202..91cb814a32 100644 --- a/crates/nu-cmd-extra/src/extra/math/arcsinh.rs +++ b/crates/nu-cmd-extra/src/extra/math/arcsinh.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/arctan.rs b/crates/nu-cmd-extra/src/extra/math/arctan.rs index 64788c45ac..f52c8bd40c 100644 --- a/crates/nu-cmd-extra/src/extra/math/arctan.rs +++ b/crates/nu-cmd-extra/src/extra/math/arctan.rs @@ -45,7 +45,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, use_degrees), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/math/arctanh.rs b/crates/nu-cmd-extra/src/extra/math/arctanh.rs index bdb60f3dcf..7791b56948 100644 --- a/crates/nu-cmd-extra/src/extra/math/arctanh.rs +++ b/crates/nu-cmd-extra/src/extra/math/arctanh.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/cos.rs b/crates/nu-cmd-extra/src/extra/math/cos.rs index a66dcac8e0..252c7dbbd6 100644 --- a/crates/nu-cmd-extra/src/extra/math/cos.rs +++ b/crates/nu-cmd-extra/src/extra/math/cos.rs @@ -44,7 +44,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, use_degrees), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/math/cosh.rs b/crates/nu-cmd-extra/src/extra/math/cosh.rs index 42271e5b49..e46d3c4df8 100644 --- a/crates/nu-cmd-extra/src/extra/math/cosh.rs +++ b/crates/nu-cmd-extra/src/extra/math/cosh.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/exp.rs b/crates/nu-cmd-extra/src/extra/math/exp.rs index 5476bd9b0b..d8f6a52899 100644 --- a/crates/nu-cmd-extra/src/extra/math/exp.rs +++ b/crates/nu-cmd-extra/src/extra/math/exp.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/ln.rs b/crates/nu-cmd-extra/src/extra/math/ln.rs index 0c07d968da..694192bc8e 100644 --- a/crates/nu-cmd-extra/src/extra/math/ln.rs +++ b/crates/nu-cmd-extra/src/extra/math/ln.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/sin.rs b/crates/nu-cmd-extra/src/extra/math/sin.rs index 5a9f93a9e4..0caedbabe7 100644 --- a/crates/nu-cmd-extra/src/extra/math/sin.rs +++ b/crates/nu-cmd-extra/src/extra/math/sin.rs @@ -44,7 +44,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, use_degrees), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/math/sinh.rs b/crates/nu-cmd-extra/src/extra/math/sinh.rs index 61fc34587e..d40db3bcb5 100644 --- a/crates/nu-cmd-extra/src/extra/math/sinh.rs +++ b/crates/nu-cmd-extra/src/extra/math/sinh.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/math/tan.rs b/crates/nu-cmd-extra/src/extra/math/tan.rs index 0d39bb7fcb..97c5d2ff93 100644 --- a/crates/nu-cmd-extra/src/extra/math/tan.rs +++ b/crates/nu-cmd-extra/src/extra/math/tan.rs @@ -44,7 +44,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, use_degrees), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/math/tanh.rs b/crates/nu-cmd-extra/src/extra/math/tanh.rs index e6febd8820..6679d04fe5 100644 --- a/crates/nu-cmd-extra/src/extra/math/tanh.rs +++ b/crates/nu-cmd-extra/src/extra/math/tanh.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-cmd-extra/src/extra/platform/ansi/gradient.rs b/crates/nu-cmd-extra/src/extra/platform/ansi/gradient.rs index 6687f55a91..5934b57a5d 100644 --- a/crates/nu-cmd-extra/src/extra/platform/ansi/gradient.rs +++ b/crates/nu-cmd-extra/src/extra/platform/ansi/gradient.rs @@ -140,7 +140,7 @@ fn operate( ret } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-cmd-extra/src/extra/strings/encode_decode/hex.rs b/crates/nu-cmd-extra/src/extra/strings/encode_decode/hex.rs index 8ba7324755..be681b382a 100644 --- a/crates/nu-cmd-extra/src/extra/strings/encode_decode/hex.rs +++ b/crates/nu-cmd-extra/src/extra/strings/encode_decode/hex.rs @@ -88,7 +88,7 @@ pub fn operate( cell_paths, }; - general_operate(action, args, input, call.head, engine_state.interrupt()) + general_operate(action, args, input, call.head, engine_state.signals()) } fn action( diff --git a/crates/nu-cmd-extra/src/extra/strings/format/command.rs b/crates/nu-cmd-extra/src/extra/strings/format/command.rs index 40517770ec..1dc0df2f1c 100644 --- a/crates/nu-cmd-extra/src/extra/strings/format/command.rs +++ b/crates/nu-cmd-extra/src/extra/strings/format/command.rs @@ -223,7 +223,7 @@ fn format( Ok(ListStream::new( list.into_iter(), head_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ) .into()) } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/mod.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/mod.rs index 58a40da3fe..bfa54921e2 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/mod.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/mod.rs @@ -44,7 +44,7 @@ where case_operation, cell_paths, }; - general_operate(action, args, input, call.head, engine_state.interrupt()) + general_operate(action, args, input, call.head, engine_state.signals()) } fn action(input: &Value, args: &Arguments, head: Span) -> Value diff --git a/crates/nu-cmd-lang/src/core_commands/for_.rs b/crates/nu-cmd-lang/src/core_commands/for_.rs index 6d6e174e32..1e90e5f06d 100644 --- a/crates/nu-cmd-lang/src/core_commands/for_.rs +++ b/crates/nu-cmd-lang/src/core_commands/for_.rs @@ -1,5 +1,5 @@ use nu_engine::{command_prelude::*, get_eval_block, get_eval_expression}; -use nu_protocol::{engine::CommandType, Interrupt}; +use nu_protocol::{engine::CommandType, Signals}; #[derive(Clone)] pub struct For; @@ -81,7 +81,7 @@ impl Command for For { match value { Value::List { vals, .. } => { for x in vals.into_iter() { - engine_state.interrupt().check(head)?; + engine_state.signals().check(head)?; // with_env() is used here to ensure that each iteration uses // a different set of environment variables. @@ -113,8 +113,8 @@ impl Command for For { } } Value::Range { val, .. } => { - for x in val.into_range_iter(span, Interrupt::empty()) { - engine_state.interrupt().check(head)?; + for x in val.into_range_iter(span, Signals::empty()) { + engine_state.signals().check(head)?; stack.add_var(var_id, x); match eval_block(&engine_state, stack, block, PipelineData::empty()) { diff --git a/crates/nu-cmd-lang/src/core_commands/loop_.rs b/crates/nu-cmd-lang/src/core_commands/loop_.rs index a218f39ddc..86e18389de 100644 --- a/crates/nu-cmd-lang/src/core_commands/loop_.rs +++ b/crates/nu-cmd-lang/src/core_commands/loop_.rs @@ -50,7 +50,7 @@ impl Command for Loop { let stack = &mut stack.push_redirection(None, None); loop { - engine_state.interrupt().check(head)?; + engine_state.signals().check(head)?; match eval_block(engine_state, stack, block, PipelineData::empty()) { Err(ShellError::Break { .. }) => { diff --git a/crates/nu-cmd-lang/src/core_commands/while_.rs b/crates/nu-cmd-lang/src/core_commands/while_.rs index 2f072c92ed..22bb4c5dbd 100644 --- a/crates/nu-cmd-lang/src/core_commands/while_.rs +++ b/crates/nu-cmd-lang/src/core_commands/while_.rs @@ -60,7 +60,7 @@ impl Command for While { let stack = &mut stack.push_redirection(None, None); loop { - engine_state.interrupt().check(head)?; + engine_state.signals().check(head)?; let result = eval_expression(engine_state, stack, cond)?; diff --git a/crates/nu-command/src/bytes/add.rs b/crates/nu-command/src/bytes/add.rs index d8e8d35552..ab31f74b12 100644 --- a/crates/nu-command/src/bytes/add.rs +++ b/crates/nu-command/src/bytes/add.rs @@ -78,7 +78,7 @@ impl Command for BytesAdd { end, cell_paths, }; - operate(add, arg, input, call.head, engine_state.interrupt()) + operate(add, arg, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/at.rs b/crates/nu-command/src/bytes/at.rs index 9ff35073c4..5e95f4fd62 100644 --- a/crates/nu-command/src/bytes/at.rs +++ b/crates/nu-command/src/bytes/at.rs @@ -83,7 +83,7 @@ impl Command for BytesAt { cell_paths, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/collect.rs b/crates/nu-command/src/bytes/collect.rs index d047bbdaa7..afb70bfb36 100644 --- a/crates/nu-command/src/bytes/collect.rs +++ b/crates/nu-command/src/bytes/collect.rs @@ -63,7 +63,7 @@ impl Command for BytesCollect { let output = ByteStream::from_result_iter( iter, span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ByteStreamType::Binary, ); diff --git a/crates/nu-command/src/bytes/ends_with.rs b/crates/nu-command/src/bytes/ends_with.rs index 56b23d8257..8e3966716c 100644 --- a/crates/nu-command/src/bytes/ends_with.rs +++ b/crates/nu-command/src/bytes/ends_with.rs @@ -102,7 +102,7 @@ impl Command for BytesEndsWith { pattern, cell_paths, }; - operate(ends_with, arg, input, head, engine_state.interrupt()) + operate(ends_with, arg, input, head, engine_state.signals()) } } diff --git a/crates/nu-command/src/bytes/index_of.rs b/crates/nu-command/src/bytes/index_of.rs index 9afb307005..e10bd6c200 100644 --- a/crates/nu-command/src/bytes/index_of.rs +++ b/crates/nu-command/src/bytes/index_of.rs @@ -71,7 +71,7 @@ impl Command for BytesIndexOf { all: call.has_flag(engine_state, stack, "all")?, cell_paths, }; - operate(index_of, arg, input, call.head, engine_state.interrupt()) + operate(index_of, arg, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/length.rs b/crates/nu-command/src/bytes/length.rs index 858172ea13..78b3d31eac 100644 --- a/crates/nu-command/src/bytes/length.rs +++ b/crates/nu-command/src/bytes/length.rs @@ -46,7 +46,7 @@ impl Command for BytesLen { ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 1)?; let arg = CellPathOnlyArgs::from(cell_paths); - operate(length, arg, input, call.head, engine_state.interrupt()) + operate(length, arg, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/remove.rs b/crates/nu-command/src/bytes/remove.rs index 35747d247a..34d3c427f4 100644 --- a/crates/nu-command/src/bytes/remove.rs +++ b/crates/nu-command/src/bytes/remove.rs @@ -73,7 +73,7 @@ impl Command for BytesRemove { all: call.has_flag(engine_state, stack, "all")?, }; - operate(remove, arg, input, call.head, engine_state.interrupt()) + operate(remove, arg, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/replace.rs b/crates/nu-command/src/bytes/replace.rs index 561fbfa117..db2b6fb790 100644 --- a/crates/nu-command/src/bytes/replace.rs +++ b/crates/nu-command/src/bytes/replace.rs @@ -73,7 +73,7 @@ impl Command for BytesReplace { all: call.has_flag(engine_state, stack, "all")?, }; - operate(replace, arg, input, call.head, engine_state.interrupt()) + operate(replace, arg, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/reverse.rs b/crates/nu-command/src/bytes/reverse.rs index 7007f620ba..fd769eaa40 100644 --- a/crates/nu-command/src/bytes/reverse.rs +++ b/crates/nu-command/src/bytes/reverse.rs @@ -42,7 +42,7 @@ impl Command for BytesReverse { ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let arg = CellPathOnlyArgs::from(cell_paths); - operate(reverse, arg, input, call.head, engine_state.interrupt()) + operate(reverse, arg, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/bytes/starts_with.rs b/crates/nu-command/src/bytes/starts_with.rs index 0e20c4934d..89cc4f7afc 100644 --- a/crates/nu-command/src/bytes/starts_with.rs +++ b/crates/nu-command/src/bytes/starts_with.rs @@ -79,7 +79,7 @@ impl Command for BytesStartsWith { pattern, cell_paths, }; - operate(starts_with, arg, input, head, engine_state.interrupt()) + operate(starts_with, arg, input, head, engine_state.signals()) } } diff --git a/crates/nu-command/src/conversions/fill.rs b/crates/nu-command/src/conversions/fill.rs index 0a92238f74..eaf8c05da1 100644 --- a/crates/nu-command/src/conversions/fill.rs +++ b/crates/nu-command/src/conversions/fill.rs @@ -165,7 +165,7 @@ fn fill( cell_paths, }; - operate(action, arg, input, call.head, engine_state.interrupt()) + operate(action, arg, input, call.head, engine_state.signals()) } fn action(input: &Value, args: &Arguments, span: Span) -> Value { diff --git a/crates/nu-command/src/conversions/into/binary.rs b/crates/nu-command/src/conversions/into/binary.rs index 88d5a5d956..e5c34ae6bc 100644 --- a/crates/nu-command/src/conversions/into/binary.rs +++ b/crates/nu-command/src/conversions/into/binary.rs @@ -138,7 +138,7 @@ fn into_binary( cell_paths, compact: call.has_flag(engine_state, stack, "compact")?, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } } diff --git a/crates/nu-command/src/conversions/into/bool.rs b/crates/nu-command/src/conversions/into/bool.rs index 9c06116933..0fcd33b4a3 100644 --- a/crates/nu-command/src/conversions/into/bool.rs +++ b/crates/nu-command/src/conversions/into/bool.rs @@ -107,7 +107,7 @@ fn into_bool( ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn string_to_boolean(s: &str, span: Span) -> Result { diff --git a/crates/nu-command/src/conversions/into/datetime.rs b/crates/nu-command/src/conversions/into/datetime.rs index 9341bb8d9d..8dc0340ba1 100644 --- a/crates/nu-command/src/conversions/into/datetime.rs +++ b/crates/nu-command/src/conversions/into/datetime.rs @@ -141,7 +141,7 @@ impl Command for SubCommand { zone_options, cell_paths, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } } diff --git a/crates/nu-command/src/conversions/into/duration.rs b/crates/nu-command/src/conversions/into/duration.rs index f313166cc4..b459dd04b1 100644 --- a/crates/nu-command/src/conversions/into/duration.rs +++ b/crates/nu-command/src/conversions/into/duration.rs @@ -166,7 +166,7 @@ fn into_duration( ret } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/conversions/into/filesize.rs b/crates/nu-command/src/conversions/into/filesize.rs index c77129ed58..5be167e30c 100644 --- a/crates/nu-command/src/conversions/into/filesize.rs +++ b/crates/nu-command/src/conversions/into/filesize.rs @@ -68,7 +68,7 @@ impl Command for SubCommand { ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/conversions/into/float.rs b/crates/nu-command/src/conversions/into/float.rs index 27fad5d0b1..43556bb5ef 100644 --- a/crates/nu-command/src/conversions/into/float.rs +++ b/crates/nu-command/src/conversions/into/float.rs @@ -49,7 +49,7 @@ impl Command for SubCommand { ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/conversions/into/glob.rs b/crates/nu-command/src/conversions/into/glob.rs index 29568248f2..ffc3655330 100644 --- a/crates/nu-command/src/conversions/into/glob.rs +++ b/crates/nu-command/src/conversions/into/glob.rs @@ -87,7 +87,7 @@ fn glob_helper( Ok(Value::glob(stream.into_string()?, false, head).into_pipeline_data()) } else { let args = Arguments { cell_paths }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } } diff --git a/crates/nu-command/src/conversions/into/int.rs b/crates/nu-command/src/conversions/into/int.rs index 7d0091de4e..d4bfa61639 100644 --- a/crates/nu-command/src/conversions/into/int.rs +++ b/crates/nu-command/src/conversions/into/int.rs @@ -158,7 +158,7 @@ impl Command for SubCommand { signed, cell_paths, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/conversions/into/record.rs b/crates/nu-command/src/conversions/into/record.rs index 1b939aad29..1f332d9c85 100644 --- a/crates/nu-command/src/conversions/into/record.rs +++ b/crates/nu-command/src/conversions/into/record.rs @@ -125,7 +125,7 @@ fn into_record( ), }, Value::Range { val, .. } => Value::record( - val.into_range_iter(span, engine_state.interrupt().clone()) + val.into_range_iter(span, engine_state.signals().clone()) .enumerate() .map(|(idx, val)| (format!("{idx}"), val)) .collect(), diff --git a/crates/nu-command/src/conversions/into/string.rs b/crates/nu-command/src/conversions/into/string.rs index e542a46421..c394f9fd21 100644 --- a/crates/nu-command/src/conversions/into/string.rs +++ b/crates/nu-command/src/conversions/into/string.rs @@ -180,7 +180,7 @@ fn string_helper( cell_paths, config, }; - operate(action, args, input, head, engine_state.interrupt()) + operate(action, args, input, head, engine_state.signals()) } } diff --git a/crates/nu-command/src/conversions/into/value.rs b/crates/nu-command/src/conversions/into/value.rs index 5315502700..e8787e75bb 100644 --- a/crates/nu-command/src/conversions/into/value.rs +++ b/crates/nu-command/src/conversions/into/value.rs @@ -79,7 +79,7 @@ impl Command for IntoValue { display_as_filesizes, span, } - .into_pipeline_data(span, engine_state.interrupt().clone()) + .into_pipeline_data(span, engine_state.signals().clone()) .set_metadata(metadata)) } } diff --git a/crates/nu-command/src/database/commands/into_sqlite.rs b/crates/nu-command/src/database/commands/into_sqlite.rs index ba57f310b7..88a6114ab3 100644 --- a/crates/nu-command/src/database/commands/into_sqlite.rs +++ b/crates/nu-command/src/database/commands/into_sqlite.rs @@ -2,7 +2,7 @@ use crate::database::values::sqlite::{open_sqlite_db, values_to_sql}; use nu_engine::command_prelude::*; use itertools::Itertools; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use std::path::Path; pub const DEFAULT_TABLE_NAME: &str = "main"; @@ -183,18 +183,18 @@ fn operate( let file_name: Spanned = call.req(engine_state, stack, 0)?; let table_name: Option> = call.get_flag(engine_state, stack, "table-name")?; let table = Table::new(&file_name, table_name)?; - Ok(action(input, table, span, engine_state.interrupt())?.into_pipeline_data()) + Ok(action(input, table, span, engine_state.signals())?.into_pipeline_data()) } fn action( input: PipelineData, table: Table, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { match input { PipelineData::ListStream(stream, _) => { - insert_in_transaction(stream.into_iter(), span, table, interrupt) + insert_in_transaction(stream.into_iter(), span, table, signals) } PipelineData::Value( Value::List { @@ -202,9 +202,9 @@ fn action( internal_span, }, _, - ) => insert_in_transaction(vals.into_iter(), internal_span, table, interrupt), + ) => insert_in_transaction(vals.into_iter(), internal_span, table, signals), PipelineData::Value(val, _) => { - insert_in_transaction(std::iter::once(val), span, table, interrupt) + insert_in_transaction(std::iter::once(val), span, table, signals) } _ => Err(ShellError::OnlySupportsThisInputType { exp_input_type: "list".into(), @@ -219,7 +219,7 @@ fn insert_in_transaction( stream: impl Iterator, span: Span, mut table: Table, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let mut stream = stream.peekable(); let first_val = match stream.peek() { @@ -241,7 +241,7 @@ fn insert_in_transaction( let tx = table.try_init(&first_val)?; for stream_value in stream { - if let Err(err) = interrupt.check(span) { + if let Err(err) = signals.check(span) { tx.rollback().map_err(|e| ShellError::GenericError { error: "Failed to rollback SQLite transaction".into(), msg: e.to_string(), diff --git a/crates/nu-command/src/database/values/sqlite.rs b/crates/nu-command/src/database/values/sqlite.rs index 1a01ecc8f8..f253ba1cbd 100644 --- a/crates/nu-command/src/database/values/sqlite.rs +++ b/crates/nu-command/src/database/values/sqlite.rs @@ -2,7 +2,7 @@ use super::definitions::{ db_column::DbColumn, db_constraint::DbConstraint, db_foreignkey::DbForeignKey, db_index::DbIndex, db_table::DbTable, }; -use nu_protocol::{CustomValue, Interrupt, PipelineData, Record, ShellError, Span, Spanned, Value}; +use nu_protocol::{CustomValue, PipelineData, Record, ShellError, Signals, Span, Spanned, Value}; use rusqlite::{ types::ValueRef, Connection, DatabaseName, Error as SqliteError, OpenFlags, Row, Statement, ToSql, @@ -23,25 +23,21 @@ pub struct SQLiteDatabase { // 1) YAGNI, 2) it's not obvious how cloning a connection could work, 3) state // management gets tricky quick. Revisit this approach if we find a compelling use case. pub path: PathBuf, - #[serde(skip, default = "Interrupt::empty")] + #[serde(skip, default = "Signals::empty")] // this understandably can't be serialized. think that's OK, I'm not aware of a // reason why a CustomValue would be serialized outside of a plugin - interrupt: Interrupt, + signals: Signals, } impl SQLiteDatabase { - pub fn new(path: &Path, interrupt: Interrupt) -> Self { + pub fn new(path: &Path, signals: Signals) -> Self { Self { path: PathBuf::from(path), - interrupt, + signals, } } - pub fn try_from_path( - path: &Path, - span: Span, - interrupt: Interrupt, - ) -> Result { + pub fn try_from_path(path: &Path, span: Span, signals: Signals) -> Result { let mut file = File::open(path).map_err(|e| ShellError::ReadingFile { msg: e.to_string(), span, @@ -55,7 +51,7 @@ impl SQLiteDatabase { }) .and_then(|_| { if buf == SQLITE_MAGIC_BYTES { - Ok(SQLiteDatabase::new(path, interrupt)) + Ok(SQLiteDatabase::new(path, signals)) } else { Err(ShellError::ReadingFile { msg: "Not a SQLite file".into(), @@ -71,7 +67,7 @@ impl SQLiteDatabase { Value::Custom { val, .. } => match val.as_any().downcast_ref::() { Some(db) => Ok(Self { path: db.path.clone(), - interrupt: db.interrupt.clone(), + signals: db.signals.clone(), }), None => Err(ShellError::CantConvert { to_type: "database".into(), @@ -106,7 +102,7 @@ impl SQLiteDatabase { call_span: Span, ) -> Result { let conn = open_sqlite_db(&self.path, call_span)?; - let stream = run_sql_query(conn, sql, params, &self.interrupt) + let stream = run_sql_query(conn, sql, params, &self.signals) .map_err(|e| e.into_shell_error(sql.span, "Failed to query SQLite database"))?; Ok(stream) @@ -352,7 +348,7 @@ impl CustomValue for SQLiteDatabase { fn to_base_value(&self, span: Span) -> Result { let db = open_sqlite_db(&self.path, span)?; - read_entire_sqlite_db(db, span, &self.interrupt) + read_entire_sqlite_db(db, span, &self.signals) .map_err(|e| e.into_shell_error(span, "Failed to read from SQLite database")) } @@ -381,7 +377,7 @@ impl CustomValue for SQLiteDatabase { path_span: Span, ) -> Result { let db = open_sqlite_db(&self.path, path_span)?; - read_single_table(db, column_name, path_span, &self.interrupt) + read_single_table(db, column_name, path_span, &self.signals) .map_err(|e| e.into_shell_error(path_span, "Failed to read from SQLite database")) } @@ -413,10 +409,10 @@ fn run_sql_query( conn: Connection, sql: &Spanned, params: NuSqlParams, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let stmt = conn.prepare(&sql.item)?; - prepared_statement_to_nu_list(stmt, params, sql.span, interrupt) + prepared_statement_to_nu_list(stmt, params, sql.span, signals) } // This is taken from to text local_into_string but tweaks it a bit so that certain formatting does not happen @@ -543,18 +539,18 @@ fn read_single_table( conn: Connection, table_name: String, call_span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { // TODO: Should use params here? let stmt = conn.prepare(&format!("SELECT * FROM [{table_name}]"))?; - prepared_statement_to_nu_list(stmt, NuSqlParams::default(), call_span, interrupt) + prepared_statement_to_nu_list(stmt, NuSqlParams::default(), call_span, signals) } fn prepared_statement_to_nu_list( mut stmt: Statement, params: NuSqlParams, call_span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let column_names = stmt .column_names() @@ -581,7 +577,7 @@ fn prepared_statement_to_nu_list( let mut row_values = vec![]; for row_result in row_results { - interrupt.check(call_span)?; + signals.check(call_span)?; if let Ok(row_value) = row_result { row_values.push(row_value); } @@ -607,7 +603,7 @@ fn prepared_statement_to_nu_list( let mut row_values = vec![]; for row_result in row_results { - interrupt.check(call_span)?; + signals.check(call_span)?; if let Ok(row_value) = row_result { row_values.push(row_value); } @@ -623,7 +619,7 @@ fn prepared_statement_to_nu_list( fn read_entire_sqlite_db( conn: Connection, call_span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let mut tables = Record::new(); @@ -635,12 +631,8 @@ fn read_entire_sqlite_db( let table_name: String = row?; // TODO: Should use params here? let table_stmt = conn.prepare(&format!("select * from [{table_name}]"))?; - let rows = prepared_statement_to_nu_list( - table_stmt, - NuSqlParams::default(), - call_span, - interrupt, - )?; + let rows = + prepared_statement_to_nu_list(table_stmt, NuSqlParams::default(), call_span, signals)?; tables.push(table_name, rows); } @@ -707,8 +699,7 @@ mod test { #[test] fn can_read_empty_db() { let db = open_connection_in_memory().unwrap(); - let converted_db = - read_entire_sqlite_db(db, Span::test_data(), &Interrupt::empty()).unwrap(); + let converted_db = read_entire_sqlite_db(db, Span::test_data(), &Signals::empty()).unwrap(); let expected = Value::test_record(Record::new()); @@ -728,8 +719,7 @@ mod test { [], ) .unwrap(); - let converted_db = - read_entire_sqlite_db(db, Span::test_data(), &Interrupt::empty()).unwrap(); + let converted_db = read_entire_sqlite_db(db, Span::test_data(), &Signals::empty()).unwrap(); let expected = Value::test_record(record! { "person" => Value::test_list(vec![]), @@ -758,7 +748,7 @@ mod test { db.execute("INSERT INTO item (id, name) VALUES (456, 'foo bar')", []) .unwrap(); - let converted_db = read_entire_sqlite_db(db, span, &Interrupt::empty()).unwrap(); + let converted_db = read_entire_sqlite_db(db, span, &Signals::empty()).unwrap(); let expected = Value::test_record(record! { "item" => Value::test_list( diff --git a/crates/nu-command/src/date/humanize.rs b/crates/nu-command/src/date/humanize.rs index c68189edf2..d8542a540c 100644 --- a/crates/nu-command/src/date/humanize.rs +++ b/crates/nu-command/src/date/humanize.rs @@ -50,7 +50,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| helper(value, head), engine_state.interrupt()) + input.map(move |value| helper(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/date/list_timezone.rs b/crates/nu-command/src/date/list_timezone.rs index 72567eebb6..56f7fe5376 100644 --- a/crates/nu-command/src/date/list_timezone.rs +++ b/crates/nu-command/src/date/list_timezone.rs @@ -40,7 +40,7 @@ impl Command for SubCommand { head, ) }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/date/to_record.rs b/crates/nu-command/src/date/to_record.rs index 6eec1e6881..c0b09c040b 100644 --- a/crates/nu-command/src/date/to_record.rs +++ b/crates/nu-command/src/date/to_record.rs @@ -40,7 +40,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| helper(value, head), engine_state.interrupt()) + input.map(move |value| helper(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/date/to_table.rs b/crates/nu-command/src/date/to_table.rs index fbcc1fcbd8..7ce8bc171b 100644 --- a/crates/nu-command/src/date/to_table.rs +++ b/crates/nu-command/src/date/to_table.rs @@ -40,7 +40,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| helper(value, head), engine_state.interrupt()) + input.map(move |value| helper(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/date/to_timezone.rs b/crates/nu-command/src/date/to_timezone.rs index 4720bb4b29..3d08d7271b 100644 --- a/crates/nu-command/src/date/to_timezone.rs +++ b/crates/nu-command/src/date/to_timezone.rs @@ -55,7 +55,7 @@ impl Command for SubCommand { } input.map( move |value| helper(value, head, &timezone), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/debug/debug_.rs b/crates/nu-command/src/debug/debug_.rs index 49e60aa0b8..f4e5707491 100644 --- a/crates/nu-command/src/debug/debug_.rs +++ b/crates/nu-command/src/debug/debug_.rs @@ -46,7 +46,7 @@ impl Command for Debug { Value::string(x.to_expanded_string(", ", &config), head) } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/debug/metadata_set.rs b/crates/nu-command/src/debug/metadata_set.rs index a459f0d5c8..96f50cfdba 100644 --- a/crates/nu-command/src/debug/metadata_set.rs +++ b/crates/nu-command/src/debug/metadata_set.rs @@ -48,7 +48,7 @@ impl Command for MetadataSet { let ds_fp: Option = call.get_flag(engine_state, stack, "datasource-filepath")?; let ds_ls = call.has_flag(engine_state, stack, "datasource-ls")?; let content_type: Option = call.get_flag(engine_state, stack, "content-type")?; - let interrupt = engine_state.interrupt().clone(); + let signals = engine_state.signals().clone(); let metadata = input .metadata() .clone() @@ -58,15 +58,15 @@ impl Command for MetadataSet { match (ds_fp, ds_ls) { (Some(path), false) => Ok(input.into_pipeline_data_with_metadata( head, - interrupt, + signals, metadata.with_data_source(DataSource::FilePath(path.into())), )), (None, true) => Ok(input.into_pipeline_data_with_metadata( head, - interrupt, + signals, metadata.with_data_source(DataSource::Ls), )), - _ => Ok(input.into_pipeline_data_with_metadata(head, interrupt, metadata)), + _ => Ok(input.into_pipeline_data_with_metadata(head, signals, metadata)), } } diff --git a/crates/nu-command/src/filesystem/du.rs b/crates/nu-command/src/filesystem/du.rs index 2ad58432cf..93f08f7785 100644 --- a/crates/nu-command/src/filesystem/du.rs +++ b/crates/nu-command/src/filesystem/du.rs @@ -3,7 +3,7 @@ use crate::{DirBuilder, DirInfo, FileInfo}; #[allow(deprecated)] use nu_engine::{command_prelude::*, current_dir}; use nu_glob::Pattern; -use nu_protocol::{Interrupt, NuGlob}; +use nu_protocol::{NuGlob, Signals}; use serde::Deserialize; use std::path::Path; @@ -119,8 +119,8 @@ impl Command for Du { min_size, }; Ok( - du_for_one_pattern(args, ¤t_dir, tag, engine_state.interrupt())? - .into_pipeline_data(tag, engine_state.interrupt().clone()), + du_for_one_pattern(args, ¤t_dir, tag, engine_state.signals())? + .into_pipeline_data(tag, engine_state.signals().clone()), ) } Some(paths) => { @@ -138,7 +138,7 @@ impl Command for Du { args, ¤t_dir, tag, - engine_state.interrupt(), + engine_state.signals(), )?) } @@ -146,7 +146,7 @@ impl Command for Du { Ok(result_iters .into_iter() .flatten() - .into_pipeline_data(tag, engine_state.interrupt().clone())) + .into_pipeline_data(tag, engine_state.signals().clone())) } } } @@ -164,7 +164,7 @@ fn du_for_one_pattern( args: DuArgs, current_dir: &Path, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result + Send, ShellError> { let exclude = args.exclude.map_or(Ok(None), move |x| { Pattern::new(x.item.as_ref()) @@ -216,7 +216,7 @@ fn du_for_one_pattern( match p { Ok(a) => { if a.is_dir() { - output.push(DirInfo::new(a, ¶ms, max_depth, span, interrupt)?.into()); + output.push(DirInfo::new(a, ¶ms, max_depth, span, signals)?.into()); } else if let Ok(v) = FileInfo::new(a, deref, span) { output.push(v.into()); } diff --git a/crates/nu-command/src/filesystem/glob.rs b/crates/nu-command/src/filesystem/glob.rs index 88efad9237..212c6ceb92 100644 --- a/crates/nu-command/src/filesystem/glob.rs +++ b/crates/nu-command/src/filesystem/glob.rs @@ -1,5 +1,5 @@ use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use wax::{Glob as WaxGlob, WalkBehavior, WalkEntry}; #[derive(Clone)] @@ -216,7 +216,7 @@ impl Command for Glob { })? .flatten(); glob_to_value( - engine_state.interrupt(), + engine_state.signals(), glob_results, no_dirs, no_files, @@ -234,7 +234,7 @@ impl Command for Glob { ) .flatten(); glob_to_value( - engine_state.interrupt(), + engine_state.signals(), glob_results, no_dirs, no_files, @@ -245,7 +245,7 @@ impl Command for Glob { Ok(result .into_iter() - .into_pipeline_data(span, engine_state.interrupt().clone())) + .into_pipeline_data(span, engine_state.signals().clone())) } } @@ -265,7 +265,7 @@ fn convert_patterns(columns: &[Value]) -> Result, ShellError> { } fn glob_to_value<'a>( - interrupt: &Interrupt, + signals: &Signals, glob_results: impl Iterator>, no_dirs: bool, no_files: bool, @@ -274,7 +274,7 @@ fn glob_to_value<'a>( ) -> Result, ShellError> { let mut result: Vec = Vec::new(); for entry in glob_results { - interrupt.check(span)?; + signals.check(span)?; let file_type = entry.file_type(); if !(no_dirs && file_type.is_dir() diff --git a/crates/nu-command/src/filesystem/ls.rs b/crates/nu-command/src/filesystem/ls.rs index b5fb892fff..f465a93dc1 100644 --- a/crates/nu-command/src/filesystem/ls.rs +++ b/crates/nu-command/src/filesystem/ls.rs @@ -6,7 +6,7 @@ use nu_engine::glob_from; use nu_engine::{command_prelude::*, env::current_dir}; use nu_glob::MatchOptions; use nu_path::expand_to_real_path; -use nu_protocol::{DataSource, Interrupt, NuGlob, PipelineMetadata}; +use nu_protocol::{DataSource, NuGlob, PipelineMetadata, Signals}; use pathdiff::diff_paths; #[cfg(unix)] @@ -114,24 +114,22 @@ impl Command for Ls { Some(pattern_arg) }; match input_pattern_arg { - None => Ok( - ls_for_one_pattern(None, args, engine_state.interrupt(), cwd)? - .into_pipeline_data_with_metadata( - call_span, - engine_state.interrupt().clone(), - PipelineMetadata { - data_source: DataSource::Ls, - content_type: None, - }, - ), - ), + None => Ok(ls_for_one_pattern(None, args, engine_state.signals(), cwd)? + .into_pipeline_data_with_metadata( + call_span, + engine_state.signals().clone(), + PipelineMetadata { + data_source: DataSource::Ls, + content_type: None, + }, + )), Some(pattern) => { let mut result_iters = vec![]; for pat in pattern { result_iters.push(ls_for_one_pattern( Some(pat), args, - engine_state.interrupt(), + engine_state.signals(), cwd.clone(), )?) } @@ -143,7 +141,7 @@ impl Command for Ls { .flatten() .into_pipeline_data_with_metadata( call_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), PipelineMetadata { data_source: DataSource::Ls, content_type: None, @@ -215,7 +213,7 @@ impl Command for Ls { fn ls_for_one_pattern( pattern_arg: Option>, args: Args, - interrupt: &Interrupt, + signals: &Signals, cwd: PathBuf, ) -> Result + Send>, ShellError> { let Args { @@ -342,7 +340,7 @@ fn ls_for_one_pattern( let mut hidden_dirs = vec![]; - let interrupt = interrupt.clone(); + let signals = signals.clone(); Ok(Box::new(paths_peek.filter_map(move |x| match x { Ok(path) => { let metadata = match std::fs::symlink_metadata(&path) { @@ -412,7 +410,7 @@ fn ls_for_one_pattern( call_span, long, du, - &interrupt, + &signals, use_mime_type, ); match entry { @@ -522,7 +520,7 @@ pub(crate) fn dir_entry_dict( span: Span, long: bool, du: bool, - interrupt: &Interrupt, + signals: &Signals, use_mime_type: bool, ) -> Result { #[cfg(windows)] @@ -617,8 +615,7 @@ pub(crate) fn dir_entry_dict( if md.is_dir() { if du { let params = DirBuilder::new(Span::new(0, 2), None, false, None, false); - let dir_size = - DirInfo::new(filename, ¶ms, None, span, interrupt)?.get_size(); + let dir_size = DirInfo::new(filename, ¶ms, None, span, signals)?.get_size(); Value::filesize(dir_size as i64, span) } else { diff --git a/crates/nu-command/src/filesystem/open.rs b/crates/nu-command/src/filesystem/open.rs index 3d3c4e8278..e654b27f05 100644 --- a/crates/nu-command/src/filesystem/open.rs +++ b/crates/nu-command/src/filesystem/open.rs @@ -124,7 +124,7 @@ impl Command for Open { let res = SQLiteDatabase::try_from_path( path, arg_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ) .map(|db| db.into_value(call.head).into_pipeline_data()); @@ -147,7 +147,7 @@ impl Command for Open { }; let stream = PipelineData::ByteStream( - ByteStream::file(file, call_span, engine_state.interrupt().clone()), + ByteStream::file(file, call_span, engine_state.signals().clone()), Some(PipelineMetadata { data_source: DataSource::FilePath(path.to_path_buf()), content_type: None, @@ -206,7 +206,7 @@ impl Command for Open { Ok(output .into_iter() .flatten() - .into_pipeline_data(call_span, engine_state.interrupt().clone())) + .into_pipeline_data(call_span, engine_state.signals().clone())) } } diff --git a/crates/nu-command/src/filesystem/rm.rs b/crates/nu-command/src/filesystem/rm.rs index 219a50f83d..d67046ffe1 100644 --- a/crates/nu-command/src/filesystem/rm.rs +++ b/crates/nu-command/src/filesystem/rm.rs @@ -451,7 +451,7 @@ fn rm( }); for result in iter { - engine_state.interrupt().check(call.head)?; + engine_state.signals().check(call.head)?; match result { Ok(None) => {} Ok(Some(msg)) => eprintln!("{msg}"), diff --git a/crates/nu-command/src/filesystem/save.rs b/crates/nu-command/src/filesystem/save.rs index 41a99cf46b..6ca5c09559 100644 --- a/crates/nu-command/src/filesystem/save.rs +++ b/crates/nu-command/src/filesystem/save.rs @@ -5,9 +5,9 @@ use nu_engine::{command_prelude::*, current_dir}; use nu_path::expand_path_with; use nu_protocol::{ ast::{Expr, Expression}, - byte_stream::copy_with_interrupt, + byte_stream::copy_with_signals, process::ChildPipe, - ByteStreamSource, DataSource, Interrupt, OutDest, PipelineMetadata, + ByteStreamSource, DataSource, OutDest, PipelineMetadata, Signals, }; use std::{ fs::File, @@ -119,30 +119,30 @@ impl Command for Save { )?; let size = stream.known_size(); - let interrupt = engine_state.interrupt(); + let signals = engine_state.signals(); match stream.into_source() { ByteStreamSource::Read(read) => { - stream_to_file(read, size, interrupt, file, span, progress)?; + stream_to_file(read, size, signals, file, span, progress)?; } ByteStreamSource::File(source) => { - stream_to_file(source, size, interrupt, file, span, progress)?; + stream_to_file(source, size, signals, file, span, progress)?; } ByteStreamSource::Child(mut child) => { fn write_or_consume_stderr( stderr: ChildPipe, file: Option, span: Span, - interrupt: &Interrupt, + signals: &Signals, progress: bool, ) -> Result<(), ShellError> { if let Some(file) = file { match stderr { ChildPipe::Pipe(pipe) => { - stream_to_file(pipe, None, interrupt, file, span, progress) + stream_to_file(pipe, None, signals, file, span, progress) } ChildPipe::Tee(tee) => { - stream_to_file(tee, None, interrupt, file, span, progress) + stream_to_file(tee, None, signals, file, span, progress) } }? } else { @@ -162,14 +162,14 @@ impl Command for Save { // delegate a thread to redirect stderr to result. let handler = stderr .map(|stderr| { - let interrupt = interrupt.clone(); + let signals = signals.clone(); thread::Builder::new().name("stderr saver".into()).spawn( move || { write_or_consume_stderr( stderr, stderr_file, span, - &interrupt, + &signals, progress, ) }, @@ -180,10 +180,10 @@ impl Command for Save { let res = match stdout { ChildPipe::Pipe(pipe) => { - stream_to_file(pipe, None, interrupt, file, span, progress) + stream_to_file(pipe, None, signals, file, span, progress) } ChildPipe::Tee(tee) => { - stream_to_file(tee, None, interrupt, file, span, progress) + stream_to_file(tee, None, signals, file, span, progress) } }; if let Some(h) = handler { @@ -201,7 +201,7 @@ impl Command for Save { stderr, stderr_file, span, - interrupt, + signals, progress, )?; } @@ -509,7 +509,7 @@ fn get_files( fn stream_to_file( source: impl Read, known_size: Option, - interrupt: &Interrupt, + signals: &Signals, mut file: File, span: Span, progress: bool, @@ -525,7 +525,7 @@ fn stream_to_file( let mut reader = BufReader::new(source); let res = loop { - if let Err(err) = interrupt.check(span) { + if let Err(err) = signals.check(span) { bar.abandoned_msg("# Cancelled #".to_owned()); return Err(err); } @@ -554,7 +554,7 @@ fn stream_to_file( Ok(()) } } else { - copy_with_interrupt(source, file, span, interrupt)?; + copy_with_signals(source, file, span, signals)?; Ok(()) } } diff --git a/crates/nu-command/src/filesystem/watch.rs b/crates/nu-command/src/filesystem/watch.rs index f35140be67..c9817de250 100644 --- a/crates/nu-command/src/filesystem/watch.rs +++ b/crates/nu-command/src/filesystem/watch.rs @@ -255,7 +255,7 @@ impl Command for Watch { } Err(RecvTimeoutError::Timeout) => {} } - if engine_state.interrupt().triggered() { + if engine_state.signals().interrupted() { break; } } diff --git a/crates/nu-command/src/filters/append.rs b/crates/nu-command/src/filters/append.rs index 175fd428c5..19859991c3 100644 --- a/crates/nu-command/src/filters/append.rs +++ b/crates/nu-command/src/filters/append.rs @@ -118,7 +118,7 @@ only unwrap the outer list, and leave the variable's contents untouched."# .chain(other.into_pipeline_data()) .into_pipeline_data_with_metadata( call.head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/compact.rs b/crates/nu-command/src/filters/compact.rs index 150a1808ad..f43d738ed1 100644 --- a/crates/nu-command/src/filters/compact.rs +++ b/crates/nu-command/src/filters/compact.rs @@ -140,7 +140,7 @@ pub fn compact( _ => true, } }, - engine_state.interrupt(), + engine_state.signals(), ) .map(|m| m.set_metadata(metadata)) } diff --git a/crates/nu-command/src/filters/default.rs b/crates/nu-command/src/filters/default.rs index 7f0f2865de..a12d78f0b7 100644 --- a/crates/nu-command/src/filters/default.rs +++ b/crates/nu-command/src/filters/default.rs @@ -107,7 +107,7 @@ fn default( } _ => item, }, - engine_state.interrupt(), + engine_state.signals(), ) .map(|x| x.set_metadata(metadata)) } else if input.is_nothing() { @@ -119,7 +119,7 @@ fn default( Value::Nothing { .. } => value.clone(), x => x, }, - engine_state.interrupt(), + engine_state.signals(), ) .map(|x| x.set_metadata(metadata)) } diff --git a/crates/nu-command/src/filters/drop/column.rs b/crates/nu-command/src/filters/drop/column.rs index 631d411730..f168e6c2ca 100644 --- a/crates/nu-command/src/filters/drop/column.rs +++ b/crates/nu-command/src/filters/drop/column.rs @@ -104,7 +104,7 @@ fn drop_cols( })) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } else { diff --git a/crates/nu-command/src/filters/drop/nth.rs b/crates/nu-command/src/filters/drop/nth.rs index 382c37c6d9..a76c4f0d92 100644 --- a/crates/nu-command/src/filters/drop/nth.rs +++ b/crates/nu-command/src/filters/drop/nth.rs @@ -156,7 +156,7 @@ impl Command for DropNth { .take(start) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } @@ -177,7 +177,7 @@ impl Command for DropNth { rows, current: 0, } - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/each.rs b/crates/nu-command/src/filters/each.rs index 377f3c3928..fa1bf390b8 100644 --- a/crates/nu-command/src/filters/each.rs +++ b/crates/nu-command/src/filters/each.rs @@ -140,7 +140,7 @@ with 'transpose' first."# } } }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } PipelineData::ByteStream(stream, ..) => { if let Some(chunks) = stream.chunks() { @@ -171,7 +171,7 @@ with 'transpose' first."# } } }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } else { Ok(PipelineData::Empty) } @@ -185,7 +185,7 @@ with 'transpose' first."# .and_then(|x| { x.filter( move |x| if !keep_empty { !x.is_nothing() } else { true }, - engine_state.interrupt(), + engine_state.signals(), ) }) .map(|data| data.set_metadata(metadata)) diff --git a/crates/nu-command/src/filters/enumerate.rs b/crates/nu-command/src/filters/enumerate.rs index 4786e03fd5..df0f4e2fca 100644 --- a/crates/nu-command/src/filters/enumerate.rs +++ b/crates/nu-command/src/filters/enumerate.rs @@ -65,7 +65,7 @@ impl Command for Enumerate { head, ) }) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/every.rs b/crates/nu-command/src/filters/every.rs index 96e433f814..63d514ffdb 100644 --- a/crates/nu-command/src/filters/every.rs +++ b/crates/nu-command/src/filters/every.rs @@ -80,7 +80,7 @@ impl Command for Every { }) .into_pipeline_data_with_metadata( call.head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/filter.rs b/crates/nu-command/src/filters/filter.rs index f0a24846c7..f2efaa3af3 100644 --- a/crates/nu-command/src/filters/filter.rs +++ b/crates/nu-command/src/filters/filter.rs @@ -72,7 +72,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# } } }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } PipelineData::ByteStream(stream, ..) => { if let Some(chunks) = stream.chunks() { @@ -97,7 +97,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# } } }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } else { Ok(PipelineData::Empty) } @@ -117,7 +117,7 @@ a variable. On the other hand, the "row condition" syntax is not supported."# Some(Value::error(err, span)) } } - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } } .map(|data| data.set_metadata(metadata)) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index fe4166d743..7669190f7e 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -245,7 +245,7 @@ fn find_with_regex( Value::List { vals, .. } => values_match_find(vals, &re, &config, invert), _ => false, }, - engine_state.interrupt(), + engine_state.signals(), ) } @@ -398,7 +398,7 @@ fn find_with_rest_and_highlight( _ => x, } }, - engine_state.interrupt(), + engine_state.signals(), )? .filter( move |value| { @@ -411,7 +411,7 @@ fn find_with_rest_and_highlight( invert, ) }, - engine_state.interrupt(), + engine_state.signals(), ), PipelineData::ListStream(stream, metadata) => { let stream = stream.modify(|iter| { diff --git a/crates/nu-command/src/filters/first.rs b/crates/nu-command/src/filters/first.rs index 62e1582c47..8f2e8db1b9 100644 --- a/crates/nu-command/src/filters/first.rs +++ b/crates/nu-command/src/filters/first.rs @@ -1,5 +1,5 @@ use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use std::io::Read; #[derive(Clone)] @@ -134,7 +134,7 @@ fn first_helper( } } Value::Range { val, .. } => { - let mut iter = val.into_range_iter(span, Interrupt::empty()); + let mut iter = val.into_range_iter(span, Signals::empty()); if return_single_element { if let Some(v) = iter.next() { Ok(v.into_pipeline_data()) @@ -144,7 +144,7 @@ fn first_helper( } else { Ok(iter.take(rows).into_pipeline_data_with_metadata( span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } @@ -191,7 +191,7 @@ fn first_helper( ByteStream::read( reader.take(rows as u64), head, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Binary, ), metadata, diff --git a/crates/nu-command/src/filters/flatten.rs b/crates/nu-command/src/filters/flatten.rs index a83e46baf2..b4faec9589 100644 --- a/crates/nu-command/src/filters/flatten.rs +++ b/crates/nu-command/src/filters/flatten.rs @@ -127,7 +127,7 @@ fn flatten( input .flat_map( move |item| flat_value(&columns, item, flatten_all), - engine_state.interrupt(), + engine_state.signals(), ) .map(|x| x.set_metadata(metadata)) } diff --git a/crates/nu-command/src/filters/get.rs b/crates/nu-command/src/filters/get.rs index 471cc75de9..9f7d76277d 100644 --- a/crates/nu-command/src/filters/get.rs +++ b/crates/nu-command/src/filters/get.rs @@ -90,7 +90,7 @@ If multiple cell paths are given, this will produce a list of values."# Ok(output .into_iter() - .into_pipeline_data(span, engine_state.interrupt().clone())) + .into_pipeline_data(span, engine_state.signals().clone())) } .map(|x| x.set_metadata(metadata)) } diff --git a/crates/nu-command/src/filters/group.rs b/crates/nu-command/src/filters/group.rs index abf6b03833..13b53850d2 100644 --- a/crates/nu-command/src/filters/group.rs +++ b/crates/nu-command/src/filters/group.rs @@ -65,7 +65,7 @@ impl Command for Group { Ok(each_group_iterator.into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/insert.rs b/crates/nu-command/src/filters/insert.rs index 09f492e7a3..3b47c4e6a9 100644 --- a/crates/nu-command/src/filters/insert.rs +++ b/crates/nu-command/src/filters/insert.rs @@ -224,7 +224,7 @@ fn insert( .chain(stream) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } else if let Value::Closure { val, .. } = replacement { diff --git a/crates/nu-command/src/filters/interleave.rs b/crates/nu-command/src/filters/interleave.rs index 73e7671251..9890fede1e 100644 --- a/crates/nu-command/src/filters/interleave.rs +++ b/crates/nu-command/src/filters/interleave.rs @@ -147,7 +147,7 @@ interleave // Now that threads are writing to the channel, we just return it as a stream Ok(rx .into_iter() - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } } diff --git a/crates/nu-command/src/filters/items.rs b/crates/nu-command/src/filters/items.rs index 7db3ba097d..04a4c6d672 100644 --- a/crates/nu-command/src/filters/items.rs +++ b/crates/nu-command/src/filters/items.rs @@ -67,7 +67,7 @@ impl Command for Items { } } }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } Value::Error { error, .. } => Err(*error), other => Err(ShellError::OnlySupportsThisInputType { diff --git a/crates/nu-command/src/filters/last.rs b/crates/nu-command/src/filters/last.rs index ac7f32f1c4..bb5a75fecd 100644 --- a/crates/nu-command/src/filters/last.rs +++ b/crates/nu-command/src/filters/last.rs @@ -99,7 +99,7 @@ impl Command for Last { let mut buf = VecDeque::new(); for row in iterator { - engine_state.interrupt().check(head)?; + engine_state.signals().check(head)?; if buf.len() == rows { buf.pop_front(); } diff --git a/crates/nu-command/src/filters/lines.rs b/crates/nu-command/src/filters/lines.rs index 262894dd38..fc957e1c0e 100644 --- a/crates/nu-command/src/filters/lines.rs +++ b/crates/nu-command/src/filters/lines.rs @@ -90,7 +90,7 @@ impl Command for Lines { Ok(line) => Value::string(line, head), Err(err) => Value::error(err, head), }) - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } else { Ok(PipelineData::empty()) } diff --git a/crates/nu-command/src/filters/merge.rs b/crates/nu-command/src/filters/merge.rs index ce301c9d06..191ed1706c 100644 --- a/crates/nu-command/src/filters/merge.rs +++ b/crates/nu-command/src/filters/merge.rs @@ -111,7 +111,7 @@ repeating this process with row 1, and so on."# Ok(res.into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/move_.rs b/crates/nu-command/src/filters/move_.rs index ed15e5e921..6e826af050 100644 --- a/crates/nu-command/src/filters/move_.rs +++ b/crates/nu-command/src/filters/move_.rs @@ -159,7 +159,7 @@ impl Command for Move { Ok(res.into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/par_each.rs b/crates/nu-command/src/filters/par_each.rs index 1242ad9b9c..958a7fbc76 100644 --- a/crates/nu-command/src/filters/par_each.rs +++ b/crates/nu-command/src/filters/par_each.rs @@ -1,6 +1,6 @@ use super::utils::chain_error_with_input; use nu_engine::{command_prelude::*, ClosureEvalOnce}; -use nu_protocol::{engine::Closure, Interrupt}; +use nu_protocol::{engine::Closure, Signals}; use rayon::prelude::*; #[derive(Clone)] @@ -158,11 +158,11 @@ impl Command for ParEach { }) .collect::>(); - apply_order(vec).into_pipeline_data(span, engine_state.interrupt().clone()) + apply_order(vec).into_pipeline_data(span, engine_state.signals().clone()) })), Value::Range { val, .. } => Ok(create_pool(max_threads)?.install(|| { let vec = val - .into_range_iter(span, Interrupt::empty()) + .into_range_iter(span, Signals::empty()) .enumerate() .par_bridge() .map(move |(index, value)| { @@ -183,7 +183,7 @@ impl Command for ParEach { }) .collect::>(); - apply_order(vec).into_pipeline_data(span, engine_state.interrupt().clone()) + apply_order(vec).into_pipeline_data(span, engine_state.signals().clone()) })), // This match allows non-iterables to be accepted, // which is currently considered undesirable (Nov 2022). @@ -211,7 +211,7 @@ impl Command for ParEach { }) .collect::>(); - apply_order(vec).into_pipeline_data(head, engine_state.interrupt().clone()) + apply_order(vec).into_pipeline_data(head, engine_state.signals().clone()) })), PipelineData::ByteStream(stream, ..) => { if let Some(chunks) = stream.chunks() { @@ -235,14 +235,14 @@ impl Command for ParEach { }) .collect::>(); - apply_order(vec).into_pipeline_data(head, engine_state.interrupt().clone()) + apply_order(vec).into_pipeline_data(head, engine_state.signals().clone()) })) } else { Ok(PipelineData::empty()) } } } - .and_then(|x| x.filter(|v| !v.is_nothing(), engine_state.interrupt())) + .and_then(|x| x.filter(|v| !v.is_nothing(), engine_state.signals())) .map(|data| data.set_metadata(metadata)) } } diff --git a/crates/nu-command/src/filters/prepend.rs b/crates/nu-command/src/filters/prepend.rs index b1b2120068..095b9dfa10 100644 --- a/crates/nu-command/src/filters/prepend.rs +++ b/crates/nu-command/src/filters/prepend.rs @@ -119,7 +119,7 @@ only unwrap the outer list, and leave the variable's contents untouched."# .chain(input) .into_pipeline_data_with_metadata( call.head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/range.rs b/crates/nu-command/src/filters/range.rs index b29ab2d0cb..0d4e703bb1 100644 --- a/crates/nu-command/src/filters/range.rs +++ b/crates/nu-command/src/filters/range.rs @@ -106,7 +106,7 @@ impl Command for Range { Ok(PipelineData::Value(Value::nothing(head), None)) } else { let iter = v.into_iter().skip(from).take(to - from + 1); - Ok(iter.into_pipeline_data(head, engine_state.interrupt().clone())) + Ok(iter.into_pipeline_data(head, engine_state.signals().clone())) } } else { let from = start as usize; @@ -116,7 +116,7 @@ impl Command for Range { Ok(PipelineData::Value(Value::nothing(head), None)) } else { let iter = input.into_iter().skip(from).take(to - from + 1); - Ok(iter.into_pipeline_data(head, engine_state.interrupt().clone())) + Ok(iter.into_pipeline_data(head, engine_state.signals().clone())) } } .map(|x| x.set_metadata(metadata)) diff --git a/crates/nu-command/src/filters/reduce.rs b/crates/nu-command/src/filters/reduce.rs index 3d5de1c2f0..87fbe3b23e 100644 --- a/crates/nu-command/src/filters/reduce.rs +++ b/crates/nu-command/src/filters/reduce.rs @@ -107,7 +107,7 @@ impl Command for Reduce { let mut closure = ClosureEval::new(engine_state, stack, closure); for value in iter { - engine_state.interrupt().check(head)?; + engine_state.signals().check(head)?; acc = closure .add_arg(value) .add_arg(acc) diff --git a/crates/nu-command/src/filters/rename.rs b/crates/nu-command/src/filters/rename.rs index 03da8f207b..1e7ce34028 100644 --- a/crates/nu-command/src/filters/rename.rs +++ b/crates/nu-command/src/filters/rename.rs @@ -221,7 +221,7 @@ fn rename( ), } }, - engine_state.interrupt(), + engine_state.signals(), ) .map(|data| data.set_metadata(metadata)) } diff --git a/crates/nu-command/src/filters/reverse.rs b/crates/nu-command/src/filters/reverse.rs index 1504abac75..18891637ab 100644 --- a/crates/nu-command/src/filters/reverse.rs +++ b/crates/nu-command/src/filters/reverse.rs @@ -63,7 +63,7 @@ impl Command for Reverse { let metadata = input.metadata(); let values = input.into_iter_strict(head)?.collect::>(); let iter = values.into_iter().rev(); - Ok(iter.into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + Ok(iter.into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/select.rs b/crates/nu-command/src/filters/select.rs index 94ad7aa064..2ca04b3999 100644 --- a/crates/nu-command/src/filters/select.rs +++ b/crates/nu-command/src/filters/select.rs @@ -217,7 +217,7 @@ fn select( } .into_pipeline_data_with_metadata( call_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, ) } else { @@ -259,7 +259,7 @@ fn select( Ok(output.into_iter().into_pipeline_data_with_metadata( call_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } @@ -308,7 +308,7 @@ fn select( Ok(values.into_pipeline_data_with_metadata( call_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/shuffle.rs b/crates/nu-command/src/filters/shuffle.rs index cd0290cac8..ec4bf8c454 100644 --- a/crates/nu-command/src/filters/shuffle.rs +++ b/crates/nu-command/src/filters/shuffle.rs @@ -35,7 +35,7 @@ impl Command for Shuffle { let iter = values.into_iter(); Ok(iter.into_pipeline_data_with_metadata( call.head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/skip/skip_.rs b/crates/nu-command/src/filters/skip/skip_.rs index 7587ef8c14..b64f438858 100644 --- a/crates/nu-command/src/filters/skip/skip_.rs +++ b/crates/nu-command/src/filters/skip/skip_.rs @@ -1,5 +1,5 @@ use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use std::io::{self, Read}; #[derive(Clone)] @@ -104,7 +104,7 @@ impl Command for Skip { ByteStream::read( reader, call.head, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Binary, ), metadata, @@ -130,7 +130,7 @@ impl Command for Skip { .skip(n) .into_pipeline_data_with_metadata( input_span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )), } diff --git a/crates/nu-command/src/filters/skip/skip_until.rs b/crates/nu-command/src/filters/skip/skip_until.rs index a02e88819d..72cae739af 100644 --- a/crates/nu-command/src/filters/skip/skip_until.rs +++ b/crates/nu-command/src/filters/skip/skip_until.rs @@ -89,7 +89,7 @@ impl Command for SkipUntil { .map(|cond| cond.is_false()) .unwrap_or(false) }) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/skip/skip_while.rs b/crates/nu-command/src/filters/skip/skip_while.rs index a97d2afd97..ea9c12bf6a 100644 --- a/crates/nu-command/src/filters/skip/skip_while.rs +++ b/crates/nu-command/src/filters/skip/skip_while.rs @@ -94,7 +94,7 @@ impl Command for SkipWhile { .map(|cond| cond.is_true()) .unwrap_or(false) }) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/sort.rs b/crates/nu-command/src/filters/sort.rs index c9e1fd51b2..179235302d 100644 --- a/crates/nu-command/src/filters/sort.rs +++ b/crates/nu-command/src/filters/sort.rs @@ -173,7 +173,7 @@ impl Command for Sort { let iter = vec.into_iter(); Ok(iter.into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/sort_by.rs b/crates/nu-command/src/filters/sort_by.rs index d6d5a184ef..e832255a26 100644 --- a/crates/nu-command/src/filters/sort_by.rs +++ b/crates/nu-command/src/filters/sort_by.rs @@ -100,7 +100,7 @@ impl Command for SortBy { } let iter = vec.into_iter(); - Ok(iter.into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + Ok(iter.into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/take/take_.rs b/crates/nu-command/src/filters/take/take_.rs index 2cc00968a0..1876244bdd 100644 --- a/crates/nu-command/src/filters/take/take_.rs +++ b/crates/nu-command/src/filters/take/take_.rs @@ -1,5 +1,5 @@ use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use std::io::Read; #[derive(Clone)] @@ -58,7 +58,7 @@ impl Command for Take { .take(rows_desired) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )), Value::Binary { val, .. } => { @@ -66,11 +66,11 @@ impl Command for Take { Ok(PipelineData::Value(Value::binary(slice, span), metadata)) } Value::Range { val, .. } => Ok(val - .into_range_iter(span, Interrupt::empty()) + .into_range_iter(span, Signals::empty()) .take(rows_desired) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )), // Propagate errors by explicitly matching them before the final case. @@ -95,7 +95,7 @@ impl Command for Take { ByteStream::read( reader.take(rows_desired as u64), head, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Binary, ), metadata, diff --git a/crates/nu-command/src/filters/take/take_until.rs b/crates/nu-command/src/filters/take/take_until.rs index 1a08b6c2dd..c7debf5dee 100644 --- a/crates/nu-command/src/filters/take/take_until.rs +++ b/crates/nu-command/src/filters/take/take_until.rs @@ -85,7 +85,7 @@ impl Command for TakeUntil { .map(|cond| cond.is_false()) .unwrap_or(false) }) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/take/take_while.rs b/crates/nu-command/src/filters/take/take_while.rs index 84e2a6c730..b8045080ea 100644 --- a/crates/nu-command/src/filters/take/take_while.rs +++ b/crates/nu-command/src/filters/take/take_while.rs @@ -85,7 +85,7 @@ impl Command for TakeWhile { .map(|cond| cond.is_true()) .unwrap_or(false) }) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/filters/tee.rs b/crates/nu-command/src/filters/tee.rs index 8dffcd4867..663b2f19af 100644 --- a/crates/nu-command/src/filters/tee.rs +++ b/crates/nu-command/src/filters/tee.rs @@ -1,7 +1,7 @@ use nu_engine::{command_prelude::*, get_eval_block_with_early_return}; use nu_protocol::{ - byte_stream::copy_with_interrupt, engine::Closure, process::ChildPipe, ByteStream, - ByteStreamSource, Interrupt, OutDest, PipelineMetadata, + byte_stream::copy_with_signals, engine::Closure, process::ChildPipe, ByteStream, + ByteStreamSource, OutDest, PipelineMetadata, Signals, }; use std::{ io::{self, Read, Write}, @@ -103,7 +103,7 @@ use it in your pipeline."# let info = StreamInfo { span, - interrupt: engine_state.interrupt().clone(), + signals: engine_state.signals().clone(), type_, metadata: metadata.clone(), }; @@ -118,7 +118,7 @@ use it in your pipeline."# let tee = IoTee::new(read, tee_thread); Ok(PipelineData::ByteStream( - ByteStream::read(tee, span, engine_state.interrupt().clone(), type_), + ByteStream::read(tee, span, engine_state.signals().clone(), type_), metadata, )) } @@ -131,7 +131,7 @@ use it in your pipeline."# let tee = IoTee::new(file, tee_thread); Ok(PipelineData::ByteStream( - ByteStream::read(tee, span, engine_state.interrupt().clone(), type_), + ByteStream::read(tee, span, engine_state.signals().clone(), type_), metadata, )) } @@ -231,17 +231,17 @@ use it in your pipeline."# let span = input.span().unwrap_or(head); let metadata = input.metadata(); let metadata_clone = metadata.clone(); - let interrupt = engine_state.interrupt().clone(); + let signals = engine_state.signals().clone(); Ok(tee(input.into_iter(), move |rx| { - let input = rx.into_pipeline_data_with_metadata(span, interrupt, metadata_clone); + let input = rx.into_pipeline_data_with_metadata(span, signals, metadata_clone); eval_block(input) }) .err_span(call.head)? .map(move |result| result.unwrap_or_else(|err| Value::error(err, closure_span))) .into_pipeline_data_with_metadata( span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } @@ -381,11 +381,11 @@ fn spawn_tee( let thread = thread::Builder::new() .name("tee".into()) .spawn(move || { - // We don't use interrupt here because we assume it already has it on the other side + // We use Signals::empty() here because we assume there already is a Signals on the other side let stream = ByteStream::from_iter( receiver.into_iter(), info.span, - Interrupt::empty(), + Signals::empty(), info.type_, ); eval_block(PipelineData::ByteStream(stream, info.metadata)) @@ -398,13 +398,13 @@ fn spawn_tee( #[derive(Clone)] struct StreamInfo { span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, metadata: Option, } fn copy(src: impl Read, dest: impl Write, info: &StreamInfo) -> Result<(), ShellError> { - copy_with_interrupt(src, dest, info.span, &info.interrupt)?; + copy_with_signals(src, dest, info.span, &info.signals)?; Ok(()) } @@ -421,11 +421,11 @@ fn copy_on_thread( info: &StreamInfo, ) -> Result>, ShellError> { let span = info.span; - let interrupt = info.interrupt.clone(); + let signals = info.signals.clone(); thread::Builder::new() .name("stderr copier".into()) .spawn(move || { - copy_with_interrupt(src, dest, span, &interrupt)?; + copy_with_signals(src, dest, span, &signals)?; Ok(()) }) .map_err(|e| e.into_spanned(span).into()) diff --git a/crates/nu-command/src/filters/transpose.rs b/crates/nu-command/src/filters/transpose.rs index aeefd725dd..95aa382e4f 100644 --- a/crates/nu-command/src/filters/transpose.rs +++ b/crates/nu-command/src/filters/transpose.rs @@ -285,7 +285,7 @@ pub fn transpose( } else { Ok(result_data.into_pipeline_data_with_metadata( name, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/uniq.rs b/crates/nu-command/src/filters/uniq.rs index 0f0ae22102..99abb4e152 100644 --- a/crates/nu-command/src/filters/uniq.rs +++ b/crates/nu-command/src/filters/uniq.rs @@ -247,12 +247,12 @@ pub fn uniq( let flag_ignore_case = call.has_flag(engine_state, stack, "ignore-case")?; let flag_only_uniques = call.has_flag(engine_state, stack, "unique")?; - let interrupt = engine_state.interrupt().clone(); + let signals = engine_state.signals().clone(); let uniq_values = input .into_iter() .enumerate() .map_while(|(index, item)| { - if interrupt.triggered() { + if signals.interrupted() { return None; } Some(item_mapper(ItemMapperState { diff --git a/crates/nu-command/src/filters/update.rs b/crates/nu-command/src/filters/update.rs index 192d348d4f..d5ef0825ec 100644 --- a/crates/nu-command/src/filters/update.rs +++ b/crates/nu-command/src/filters/update.rs @@ -189,7 +189,7 @@ fn update( .chain(stream) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } else if let Value::Closure { val, .. } = replacement { diff --git a/crates/nu-command/src/filters/upsert.rs b/crates/nu-command/src/filters/upsert.rs index 67e66067fc..af2e6c74b1 100644 --- a/crates/nu-command/src/filters/upsert.rs +++ b/crates/nu-command/src/filters/upsert.rs @@ -249,7 +249,7 @@ fn upsert( .chain(stream) .into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } else if let Value::Closure { val, .. } = replacement { diff --git a/crates/nu-command/src/filters/utils.rs b/crates/nu-command/src/filters/utils.rs index 8e371fd370..3ebd4bafbd 100644 --- a/crates/nu-command/src/filters/utils.rs +++ b/crates/nu-command/src/filters/utils.rs @@ -32,7 +32,7 @@ pub fn boolean_fold( let mut closure = ClosureEval::new(engine_state, stack, closure); for value in input { - engine_state.interrupt().check(head)?; + engine_state.signals().check(head)?; let pred = closure.run_with_value(value)?.into_value(head)?.is_true(); if pred == accumulator { diff --git a/crates/nu-command/src/filters/values.rs b/crates/nu-command/src/filters/values.rs index 1f2bdc239c..9a08f1168c 100644 --- a/crates/nu-command/src/filters/values.rs +++ b/crates/nu-command/src/filters/values.rs @@ -134,7 +134,7 @@ fn values( head: Span, input: PipelineData, ) -> Result { - let interrupt = engine_state.interrupt().clone(); + let signals = engine_state.signals().clone(); let metadata = input.metadata(); match input { PipelineData::Empty => Ok(PipelineData::Empty), @@ -144,7 +144,7 @@ fn values( Value::List { vals, .. } => match get_values(&vals, head, span) { Ok(cols) => Ok(cols .into_iter() - .into_pipeline_data_with_metadata(head, interrupt, metadata)), + .into_pipeline_data_with_metadata(head, signals, metadata)), Err(err) => Err(err), }, Value::Custom { val, .. } => { @@ -152,7 +152,7 @@ fn values( match get_values(&[input_as_base_value], head, span) { Ok(cols) => Ok(cols .into_iter() - .into_pipeline_data_with_metadata(head, interrupt, metadata)), + .into_pipeline_data_with_metadata(head, signals, metadata)), Err(err) => Err(err), } } @@ -160,7 +160,7 @@ fn values( .values() .cloned() .collect::>() - .into_pipeline_data_with_metadata(head, interrupt, metadata)), + .into_pipeline_data_with_metadata(head, signals, metadata)), // Propagate errors Value::Error { error, .. } => Err(*error), other => Err(ShellError::OnlySupportsThisInputType { @@ -176,7 +176,7 @@ fn values( match get_values(&vals, head, head) { Ok(cols) => Ok(cols .into_iter() - .into_pipeline_data_with_metadata(head, interrupt, metadata)), + .into_pipeline_data_with_metadata(head, signals, metadata)), Err(err) => Err(err), } } diff --git a/crates/nu-command/src/filters/where_.rs b/crates/nu-command/src/filters/where_.rs index fb5a4af6b7..0a8c8c9ef3 100644 --- a/crates/nu-command/src/filters/where_.rs +++ b/crates/nu-command/src/filters/where_.rs @@ -70,7 +70,7 @@ not supported."# Err(err) => Some(Value::error(err, head)), } }) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/filters/window.rs b/crates/nu-command/src/filters/window.rs index f9ff422fb5..3c470f478d 100644 --- a/crates/nu-command/src/filters/window.rs +++ b/crates/nu-command/src/filters/window.rs @@ -132,7 +132,7 @@ impl Command for Window { Ok(each_group_iterator.into_pipeline_data_with_metadata( head, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )) } diff --git a/crates/nu-command/src/filters/wrap.rs b/crates/nu-command/src/filters/wrap.rs index 1eb59cf95f..079679c031 100644 --- a/crates/nu-command/src/filters/wrap.rs +++ b/crates/nu-command/src/filters/wrap.rs @@ -44,7 +44,7 @@ impl Command for Wrap { .map(move |x| Value::record(record! { name.clone() => x }, span)) .into_pipeline_data_with_metadata( span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), metadata, )), PipelineData::ByteStream(stream, ..) => Ok(Value::record( diff --git a/crates/nu-command/src/filters/zip.rs b/crates/nu-command/src/filters/zip.rs index b89b84e10b..59e2b4ac98 100644 --- a/crates/nu-command/src/filters/zip.rs +++ b/crates/nu-command/src/filters/zip.rs @@ -112,7 +112,7 @@ impl Command for Zip { .into_iter() .zip(other) .map(move |(x, y)| Value::list(vec![x, y], head)) - .into_pipeline_data_with_metadata(head, engine_state.interrupt().clone(), metadata)) + .into_pipeline_data_with_metadata(head, engine_state.signals().clone(), metadata)) } } diff --git a/crates/nu-command/src/formats/from/delimited.rs b/crates/nu-command/src/formats/from/delimited.rs index de8696b29b..698a148814 100644 --- a/crates/nu-command/src/formats/from/delimited.rs +++ b/crates/nu-command/src/formats/from/delimited.rs @@ -1,5 +1,5 @@ use csv::{ReaderBuilder, Trim}; -use nu_protocol::{ByteStream, Interrupt, ListStream, PipelineData, ShellError, Span, Value}; +use nu_protocol::{ByteStream, Signals, ListStream, PipelineData, ShellError, Span, Value}; fn from_csv_error(err: csv::Error, span: Span) -> ShellError { ShellError::DelimiterError { @@ -28,7 +28,7 @@ fn from_delimited_stream( return Ok(ListStream::new( std::iter::empty(), span, - Interrupt::empty(), + Signals::empty(), )); }; @@ -87,7 +87,7 @@ fn from_delimited_stream( Value::record(columns.zip(values).collect(), span) }); - Ok(ListStream::new(iter, span, Interrupt::empty())) + Ok(ListStream::new(iter, span, Signals::empty())) } pub(super) struct DelimitedReaderConfig { @@ -110,7 +110,7 @@ pub(super) fn from_delimited_data( PipelineData::Empty => Ok(PipelineData::Empty), PipelineData::Value(value, metadata) => { let string = value.into_string()?; - let byte_stream = ByteStream::read_string(string, name, Interrupt::empty()); + let byte_stream = ByteStream::read_string(string, name, Signals::empty()); Ok(PipelineData::ListStream( from_delimited_stream(config, byte_stream, name)?, metadata, diff --git a/crates/nu-command/src/formats/from/json.rs b/crates/nu-command/src/formats/from/json.rs index b54b352066..6252afff4c 100644 --- a/crates/nu-command/src/formats/from/json.rs +++ b/crates/nu-command/src/formats/from/json.rs @@ -1,7 +1,7 @@ use std::io::{BufRead, Cursor}; use nu_engine::command_prelude::*; -use nu_protocol::{Interrupt, ListStream, PipelineMetadata}; +use nu_protocol::{ListStream, PipelineMetadata, Signals}; #[derive(Clone)] pub struct FromJson; @@ -81,7 +81,7 @@ impl Command for FromJson { Cursor::new(val), span, strict, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ), update_metadata(metadata), )) @@ -91,7 +91,7 @@ impl Command for FromJson { { if let Some(reader) = stream.reader() { Ok(PipelineData::ListStream( - read_json_lines(reader, span, strict, Interrupt::empty()), + read_json_lines(reader, span, strict, Signals::empty()), update_metadata(metadata), )) } else { @@ -129,7 +129,7 @@ fn read_json_lines( input: impl BufRead + Send + 'static, span: Span, strict: bool, - interrupt: Interrupt, + signals: Signals, ) -> ListStream { let iter = input .lines() @@ -144,7 +144,7 @@ fn read_json_lines( }) .map(move |result| result.unwrap_or_else(|err| Value::error(err, span))); - ListStream::new(iter, span, interrupt) + ListStream::new(iter, span, signals) } fn convert_nujson_to_value(value: nu_json::Value, span: Span) -> Value { diff --git a/crates/nu-command/src/formats/from/msgpack.rs b/crates/nu-command/src/formats/from/msgpack.rs index ea64342115..d3d0d710f1 100644 --- a/crates/nu-command/src/formats/from/msgpack.rs +++ b/crates/nu-command/src/formats/from/msgpack.rs @@ -10,7 +10,7 @@ use std::{ use byteorder::{BigEndian, ReadBytesExt}; use chrono::{TimeZone, Utc}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use rmp::decode::{self as mp, ValueReadError}; /// Max recursion depth @@ -111,7 +111,7 @@ MessagePack: https://msgpack.org/ let opts = Opts { span: call.head, objects, - interrupt: engine_state.interrupt().clone(), + signals: engine_state.signals().clone(), }; match input { // Deserialize from a byte buffer @@ -227,7 +227,7 @@ impl From for ShellError { pub(crate) struct Opts { pub span: Span, pub objects: bool, - pub interrupt: Interrupt, + pub signals: Signals, } /// Read single or multiple values into PipelineData @@ -238,7 +238,7 @@ pub(crate) fn read_msgpack( let Opts { span, objects, - interrupt, + signals, } = opts; if objects { // Make an iterator that reads multiple values from the reader @@ -262,7 +262,7 @@ pub(crate) fn read_msgpack( None } }) - .into_pipeline_data(span, interrupt)) + .into_pipeline_data(span, signals)) } else { // Read a single value and then make sure it's EOF let result = read_value(&mut input, span, 0)?; diff --git a/crates/nu-command/src/formats/from/msgpackz.rs b/crates/nu-command/src/formats/from/msgpackz.rs index 9e469e9628..c98b72cdd6 100644 --- a/crates/nu-command/src/formats/from/msgpackz.rs +++ b/crates/nu-command/src/formats/from/msgpackz.rs @@ -41,7 +41,7 @@ impl Command for FromMsgpackz { let opts = Opts { span, objects, - interrupt: engine_state.interrupt().clone(), + signals: engine_state.signals().clone(), }; match input { // Deserialize from a byte buffer diff --git a/crates/nu-command/src/formats/to/delimited.rs b/crates/nu-command/src/formats/to/delimited.rs index 7a93853334..dd37d8e956 100644 --- a/crates/nu-command/src/formats/to/delimited.rs +++ b/crates/nu-command/src/formats/to/delimited.rs @@ -1,7 +1,7 @@ use csv::WriterBuilder; use nu_cmd_base::formats::to::delimited::merge_descriptors; use nu_protocol::{ - ByteStream, ByteStreamType, Config, Interrupt, PipelineData, ShellError, Span, Spanned, Value, + ByteStream, ByteStreamType, Config, Signals, PipelineData, ShellError, Span, Spanned, Value, }; use std::{iter, sync::Arc}; @@ -130,7 +130,7 @@ pub fn to_delimited_data( let stream = ByteStream::from_fn( head, - Interrupt::empty(), + Signals::empty(), ByteStreamType::String, move |buffer| { let mut wtr = WriterBuilder::new() diff --git a/crates/nu-command/src/formats/to/msgpack.rs b/crates/nu-command/src/formats/to/msgpack.rs index 11af8fe78f..badf619a9f 100644 --- a/crates/nu-command/src/formats/to/msgpack.rs +++ b/crates/nu-command/src/formats/to/msgpack.rs @@ -5,7 +5,7 @@ use std::io; use byteorder::{BigEndian, WriteBytesExt}; use nu_engine::command_prelude::*; -use nu_protocol::{ast::PathMember, Interrupt, Spanned}; +use nu_protocol::{ast::PathMember, Signals, Spanned}; use rmp::encode as mp; /// Max recursion depth @@ -190,7 +190,7 @@ pub(crate) fn write_value( write_value( out, &Value::list( - val.into_range_iter(span, Interrupt::empty()).collect(), + val.into_range_iter(span, Signals::empty()).collect(), span, ), depth, diff --git a/crates/nu-command/src/formats/to/text.rs b/crates/nu-command/src/formats/to/text.rs index 4ada1ce770..82b853248c 100644 --- a/crates/nu-command/src/formats/to/text.rs +++ b/crates/nu-command/src/formats/to/text.rs @@ -60,7 +60,7 @@ impl Command for ToText { ByteStream::from_iter( iter, span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ByteStreamType::String, ), update_metadata(meta), diff --git a/crates/nu-command/src/generators/generate.rs b/crates/nu-command/src/generators/generate.rs index f185342dc7..8d4f48d3fb 100644 --- a/crates/nu-command/src/generators/generate.rs +++ b/crates/nu-command/src/generators/generate.rs @@ -166,7 +166,7 @@ used as the next argument to the closure, otherwise generation stops. Ok(iter .flatten() - .into_pipeline_data(call.head, engine_state.interrupt().clone())) + .into_pipeline_data(call.head, engine_state.signals().clone())) } } diff --git a/crates/nu-command/src/generators/seq.rs b/crates/nu-command/src/generators/seq.rs index 2b69a55126..3636d89d4c 100644 --- a/crates/nu-command/src/generators/seq.rs +++ b/crates/nu-command/src/generators/seq.rs @@ -129,7 +129,7 @@ pub fn run_seq( span, }, span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ) } else { ListStream::new( @@ -141,7 +141,7 @@ pub fn run_seq( span, }, span, - engine_state.interrupt().clone(), + engine_state.signals().clone(), ) }; diff --git a/crates/nu-command/src/hash/generic_digest.rs b/crates/nu-command/src/hash/generic_digest.rs index 43a4f08d85..f098f8a0cb 100644 --- a/crates/nu-command/src/hash/generic_digest.rs +++ b/crates/nu-command/src/hash/generic_digest.rs @@ -96,7 +96,7 @@ where } } else { let args = Arguments { binary, cell_paths }; - operate(action::, args, input, head, engine_state.interrupt()) + operate(action::, args, input, head, engine_state.signals()) } } } diff --git a/crates/nu-command/src/math/abs.rs b/crates/nu-command/src/math/abs.rs index 0e5110b7cb..e093298332 100644 --- a/crates/nu-command/src/math/abs.rs +++ b/crates/nu-command/src/math/abs.rs @@ -44,7 +44,7 @@ impl Command for SubCommand { let head = call.head; input.map( move |value| abs_helper(value, head), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/math/ceil.rs b/crates/nu-command/src/math/ceil.rs index 6cb156910c..0886ff0bc5 100644 --- a/crates/nu-command/src/math/ceil.rs +++ b/crates/nu-command/src/math/ceil.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/math/floor.rs b/crates/nu-command/src/math/floor.rs index 9c24341411..c2b34c2cf9 100644 --- a/crates/nu-command/src/math/floor.rs +++ b/crates/nu-command/src/math/floor.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/math/log.rs b/crates/nu-command/src/math/log.rs index 47e7ff2f9c..7a7e4bd27b 100644 --- a/crates/nu-command/src/math/log.rs +++ b/crates/nu-command/src/math/log.rs @@ -59,7 +59,7 @@ impl Command for SubCommand { let base = base.item; input.map( move |value| operate(value, head, base), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/math/round.rs b/crates/nu-command/src/math/round.rs index 0e5e57a289..eafe669cf1 100644 --- a/crates/nu-command/src/math/round.rs +++ b/crates/nu-command/src/math/round.rs @@ -50,7 +50,7 @@ impl Command for SubCommand { } input.map( move |value| operate(value, head, precision_param), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/math/sqrt.rs b/crates/nu-command/src/math/sqrt.rs index d9e60c5292..a3ab5fbbd8 100644 --- a/crates/nu-command/src/math/sqrt.rs +++ b/crates/nu-command/src/math/sqrt.rs @@ -41,7 +41,7 @@ impl Command for SubCommand { if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); } - input.map(move |value| operate(value, head), engine_state.interrupt()) + input.map(move |value| operate(value, head), engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/math/utils.rs b/crates/nu-command/src/math/utils.rs index b95c55c7bf..11726fe6f8 100644 --- a/crates/nu-command/src/math/utils.rs +++ b/crates/nu-command/src/math/utils.rs @@ -1,6 +1,6 @@ use core::slice; use indexmap::IndexMap; -use nu_protocol::{ast::Call, Interrupt, IntoPipelineData, PipelineData, ShellError, Span, Value}; +use nu_protocol::{ast::Call, Signals, IntoPipelineData, PipelineData, ShellError, Span, Value}; pub fn run_with_function( call: &Call, @@ -92,7 +92,7 @@ pub fn calculate( } PipelineData::Value(Value::Range { val, .. }, ..) => { let new_vals: Result, ShellError> = val - .into_range_iter(span, Interrupt::empty()) + .into_range_iter(span, Signals::empty()) .map(|val| mf(&[val], span, name)) .collect(); diff --git a/crates/nu-command/src/network/http/client.rs b/crates/nu-command/src/network/http/client.rs index 4107be38a0..deeb768eea 100644 --- a/crates/nu-command/src/network/http/client.rs +++ b/crates/nu-command/src/network/http/client.rs @@ -5,7 +5,7 @@ use base64::{ Engine, }; use nu_engine::command_prelude::*; -use nu_protocol::{ByteStream, Interrupt}; +use nu_protocol::{ByteStream, Signals}; use std::{ collections::HashMap, path::PathBuf, @@ -125,13 +125,8 @@ pub fn response_to_buffer( let reader = response.into_reader(); PipelineData::ByteStream( - ByteStream::read( - reader, - span, - engine_state.interrupt().clone(), - response_type, - ) - .with_known_size(buffer_size), + ByteStream::read(reader, span, engine_state.signals().clone(), response_type) + .with_known_size(buffer_size), None, ) } @@ -194,13 +189,13 @@ pub fn send_request( http_body: HttpBody, content_type: Option, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let request_url = request.url().to_string(); match http_body { HttpBody::None => { - send_cancellable_request(&request_url, Box::new(|| request.call()), span, interrupt) + send_cancellable_request(&request_url, Box::new(|| request.call()), span, signals) } HttpBody::ByteStream(byte_stream) => { let req = if let Some(content_type) = content_type { @@ -209,7 +204,7 @@ pub fn send_request( request }; - send_cancellable_request_bytes(&request_url, req, byte_stream, span, interrupt) + send_cancellable_request_bytes(&request_url, req, byte_stream, span, signals) } HttpBody::Value(body) => { let (body_type, req) = match content_type { @@ -227,7 +222,7 @@ pub fn send_request( &request_url, Box::new(move || req.send_bytes(&val)), span, - interrupt, + signals, ), Value::String { .. } if body_type == BodyType::Json => { let data = value_to_json_value(&body)?; @@ -235,14 +230,14 @@ pub fn send_request( &request_url, Box::new(|| req.send_json(data)), span, - interrupt, + signals, ) } Value::String { val, .. } => send_cancellable_request( &request_url, Box::new(move || req.send_string(&val)), span, - interrupt, + signals, ), Value::Record { .. } if body_type == BodyType::Json => { let data = value_to_json_value(&body)?; @@ -250,7 +245,7 @@ pub fn send_request( &request_url, Box::new(|| req.send_json(data)), span, - interrupt, + signals, ) } Value::Record { val, .. } if body_type == BodyType::Form => { @@ -268,7 +263,7 @@ pub fn send_request( .collect::>(); req.send_form(&data) }; - send_cancellable_request(&request_url, Box::new(request_fn), span, interrupt) + send_cancellable_request(&request_url, Box::new(request_fn), span, signals) } Value::List { vals, .. } if body_type == BodyType::Form => { if vals.len() % 2 != 0 { @@ -290,7 +285,7 @@ pub fn send_request( .collect::>(); req.send_form(&data) }; - send_cancellable_request(&request_url, Box::new(request_fn), span, interrupt) + send_cancellable_request(&request_url, Box::new(request_fn), span, signals) } Value::List { .. } if body_type == BodyType::Json => { let data = value_to_json_value(&body)?; @@ -298,7 +293,7 @@ pub fn send_request( &request_url, Box::new(|| req.send_json(data)), span, - interrupt, + signals, ) } _ => Err(ShellErrorOrRequestError::ShellError(ShellError::IOError { @@ -315,7 +310,7 @@ fn send_cancellable_request( request_url: &str, request_fn: Box Result + Sync + Send>, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let (tx, rx) = mpsc::channel::>(); @@ -330,7 +325,7 @@ fn send_cancellable_request( // ...and poll the channel for responses loop { - interrupt.check(span)?; + signals.check(span)?; // 100ms wait time chosen arbitrarily match rx.recv_timeout(Duration::from_millis(100)) { @@ -352,7 +347,7 @@ fn send_cancellable_request_bytes( request: Request, byte_stream: ByteStream, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let (tx, rx) = mpsc::channel::>(); let request_url_string = request_url.to_string(); @@ -385,7 +380,7 @@ fn send_cancellable_request_bytes( // ...and poll the channel for responses loop { - interrupt.check(span)?; + signals.check(span)?; // 100ms wait time chosen arbitrarily match rx.recv_timeout(Duration::from_millis(100)) { diff --git a/crates/nu-command/src/network/http/delete.rs b/crates/nu-command/src/network/http/delete.rs index 6e70e76458..f32c9d15bb 100644 --- a/crates/nu-command/src/network/http/delete.rs +++ b/crates/nu-command/src/network/http/delete.rs @@ -218,7 +218,7 @@ fn helper( args.data, args.content_type, call.head, - engine_state.interrupt(), + engine_state.signals(), ); let request_flags = RequestFlags { diff --git a/crates/nu-command/src/network/http/get.rs b/crates/nu-command/src/network/http/get.rs index 04d6183eff..3b702404f4 100644 --- a/crates/nu-command/src/network/http/get.rs +++ b/crates/nu-command/src/network/http/get.rs @@ -186,7 +186,7 @@ fn helper( HttpBody::None, None, call.head, - engine_state.interrupt(), + engine_state.signals(), ); let request_flags = RequestFlags { diff --git a/crates/nu-command/src/network/http/head.rs b/crates/nu-command/src/network/http/head.rs index 366e90cab3..797fa138e3 100644 --- a/crates/nu-command/src/network/http/head.rs +++ b/crates/nu-command/src/network/http/head.rs @@ -5,7 +5,7 @@ use crate::network::http::client::{ request_set_timeout, send_request, }; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct SubCommand; @@ -132,7 +132,7 @@ fn run_head( redirect: call.get_flag(engine_state, stack, "redirect-mode")?, }; - helper(engine_state, stack, call, args, engine_state.interrupt()) + helper(engine_state, stack, call, args, engine_state.signals()) } // Helper function that actually goes to retrieve the resource from the url given @@ -142,7 +142,7 @@ fn helper( stack: &mut Stack, call: &Call, args: Arguments, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let span = args.url.span(); let (requested_url, _) = http_parse_url(call, span, args.url)?; @@ -155,7 +155,7 @@ fn helper( request = request_add_authorization_header(args.user, args.password, request); request = request_add_custom_headers(args.headers, request)?; - let response = send_request(request, HttpBody::None, None, call.head, interrupt); + let response = send_request(request, HttpBody::None, None, call.head, signals); check_response_redirection(redirect_mode, span, &response)?; request_handle_response_headers(span, response) } diff --git a/crates/nu-command/src/network/http/options.rs b/crates/nu-command/src/network/http/options.rs index a73a1709f6..cd9a1f79c1 100644 --- a/crates/nu-command/src/network/http/options.rs +++ b/crates/nu-command/src/network/http/options.rs @@ -165,7 +165,7 @@ fn helper( HttpBody::None, None, call.head, - engine_state.interrupt(), + engine_state.signals(), ); // http options' response always showed in header, so we set full to true. diff --git a/crates/nu-command/src/network/http/patch.rs b/crates/nu-command/src/network/http/patch.rs index 17450e2e58..7f49781284 100644 --- a/crates/nu-command/src/network/http/patch.rs +++ b/crates/nu-command/src/network/http/patch.rs @@ -220,7 +220,7 @@ fn helper( args.data, args.content_type, call.head, - engine_state.interrupt(), + engine_state.signals(), ); let request_flags = RequestFlags { diff --git a/crates/nu-command/src/network/http/post.rs b/crates/nu-command/src/network/http/post.rs index d82b03d704..ea4ec093f3 100644 --- a/crates/nu-command/src/network/http/post.rs +++ b/crates/nu-command/src/network/http/post.rs @@ -218,7 +218,7 @@ fn helper( args.data, args.content_type, call.head, - engine_state.interrupt(), + engine_state.signals(), ); let request_flags = RequestFlags { diff --git a/crates/nu-command/src/network/http/put.rs b/crates/nu-command/src/network/http/put.rs index b053c2e03a..e2118ea359 100644 --- a/crates/nu-command/src/network/http/put.rs +++ b/crates/nu-command/src/network/http/put.rs @@ -219,7 +219,7 @@ fn helper( args.data, args.content_type, call.head, - engine_state.interrupt(), + engine_state.signals(), ); let request_flags = RequestFlags { diff --git a/crates/nu-command/src/network/url/decode.rs b/crates/nu-command/src/network/url/decode.rs index e217395eb3..b98e50a56e 100644 --- a/crates/nu-command/src/network/url/decode.rs +++ b/crates/nu-command/src/network/url/decode.rs @@ -48,7 +48,7 @@ impl Command for SubCommand { ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/network/url/encode.rs b/crates/nu-command/src/network/url/encode.rs index 7437bc199e..96e0289903 100644 --- a/crates/nu-command/src/network/url/encode.rs +++ b/crates/nu-command/src/network/url/encode.rs @@ -50,9 +50,9 @@ impl Command for SubCommand { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); if call.has_flag(engine_state, stack, "all")? { - operate(action_all, args, input, call.head, engine_state.interrupt()) + operate(action_all, args, input, call.head, engine_state.signals()) } else { - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } } diff --git a/crates/nu-command/src/path/basename.rs b/crates/nu-command/src/path/basename.rs index 558942fb4c..8b7082048e 100644 --- a/crates/nu-command/src/path/basename.rs +++ b/crates/nu-command/src/path/basename.rs @@ -61,7 +61,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&get_basename, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -82,7 +82,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&get_basename, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/dirname.rs b/crates/nu-command/src/path/dirname.rs index 8650bd1d0e..218091ee34 100644 --- a/crates/nu-command/src/path/dirname.rs +++ b/crates/nu-command/src/path/dirname.rs @@ -69,7 +69,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&get_dirname, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -91,7 +91,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&get_dirname, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/exists.rs b/crates/nu-command/src/path/exists.rs index dba1bb0f6e..86b00c6024 100644 --- a/crates/nu-command/src/path/exists.rs +++ b/crates/nu-command/src/path/exists.rs @@ -65,7 +65,7 @@ If you need to distinguish dirs and files, please use `path type`."# } input.map( move |value| super::operate(&exists, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -87,7 +87,7 @@ If you need to distinguish dirs and files, please use `path type`."# } input.map( move |value| super::operate(&exists, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/expand.rs b/crates/nu-command/src/path/expand.rs index 7dba902947..ac51978810 100644 --- a/crates/nu-command/src/path/expand.rs +++ b/crates/nu-command/src/path/expand.rs @@ -70,7 +70,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&expand, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -93,7 +93,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&expand, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/parse.rs b/crates/nu-command/src/path/parse.rs index 3337b61a61..cec2f5c6ac 100644 --- a/crates/nu-command/src/path/parse.rs +++ b/crates/nu-command/src/path/parse.rs @@ -63,7 +63,7 @@ On Windows, an extra 'prefix' column is added."# } input.map( move |value| super::operate(&parse, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -84,7 +84,7 @@ On Windows, an extra 'prefix' column is added."# } input.map( move |value| super::operate(&parse, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/relative_to.rs b/crates/nu-command/src/path/relative_to.rs index 7ec797b0e9..35df385d74 100644 --- a/crates/nu-command/src/path/relative_to.rs +++ b/crates/nu-command/src/path/relative_to.rs @@ -67,7 +67,7 @@ path."# } input.map( move |value| super::operate(&relative_to, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -88,7 +88,7 @@ path."# } input.map( move |value| super::operate(&relative_to, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/split.rs b/crates/nu-command/src/path/split.rs index 308fa5b098..80d86fb998 100644 --- a/crates/nu-command/src/path/split.rs +++ b/crates/nu-command/src/path/split.rs @@ -51,7 +51,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&split, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -70,7 +70,7 @@ impl Command for SubCommand { } input.map( move |value| super::operate(&split, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/path/type.rs b/crates/nu-command/src/path/type.rs index 1b12a402cc..bf66c8cb3b 100644 --- a/crates/nu-command/src/path/type.rs +++ b/crates/nu-command/src/path/type.rs @@ -64,7 +64,7 @@ If the path does not exist, null will be returned."# } input.map( move |value| super::operate(&path_type, &args, value, head), - engine_state.interrupt(), + engine_state.signals(), ) } @@ -85,7 +85,7 @@ If the path does not exist, null will be returned."# } input.map( move |value| super::operate(&path_type, &args, value, head), - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/platform/ansi/ansi_.rs b/crates/nu-command/src/platform/ansi/ansi_.rs index d5fd72f9e1..29603be9e7 100644 --- a/crates/nu-command/src/platform/ansi/ansi_.rs +++ b/crates/nu-command/src/platform/ansi/ansi_.rs @@ -1,6 +1,6 @@ use nu_ansi_term::*; use nu_engine::command_prelude::*; -use nu_protocol::{engine::StateWorkingSet, Interrupt}; +use nu_protocol::{engine::StateWorkingSet, Signals}; use once_cell::sync::Lazy; use std::collections::HashMap; @@ -657,7 +657,7 @@ Operating system commands: if list { return Ok(generate_ansi_code_list( - engine_state.interrupt().clone(), + engine_state.signals().clone(), call.head, use_ansi_coloring, )); @@ -694,7 +694,7 @@ Operating system commands: if list { return Ok(generate_ansi_code_list( - working_set.permanent().interrupt().clone(), + working_set.permanent().signals().clone(), call.head, use_ansi_coloring, )); @@ -830,7 +830,7 @@ pub fn str_to_ansi(s: &str) -> Option { } fn generate_ansi_code_list( - interrupt: Interrupt, + signals: Signals, call_span: Span, use_ansi_coloring: bool, ) -> PipelineData { @@ -865,7 +865,7 @@ fn generate_ansi_code_list( Value::record(record, call_span) }) - .into_pipeline_data(call_span, interrupt.clone()) + .into_pipeline_data(call_span, signals.clone()) } fn build_ansi_hashmap(v: &[AnsiCode]) -> HashMap<&str, &str> { diff --git a/crates/nu-command/src/platform/ansi/link.rs b/crates/nu-command/src/platform/ansi/link.rs index b91a566461..b45b365d3f 100644 --- a/crates/nu-command/src/platform/ansi/link.rs +++ b/crates/nu-command/src/platform/ansi/link.rs @@ -91,12 +91,12 @@ fn operate( if column_paths.is_empty() { input.map( move |v| process_value(&v, text.as_deref()), - engine_state.interrupt(), + engine_state.signals(), ) } else { input.map( move |v| process_each_path(v, &column_paths, text.as_deref(), command_span), - engine_state.interrupt(), + engine_state.signals(), ) } } diff --git a/crates/nu-command/src/platform/ansi/strip.rs b/crates/nu-command/src/platform/ansi/strip.rs index cdc3b1fa37..3d59da6a10 100644 --- a/crates/nu-command/src/platform/ansi/strip.rs +++ b/crates/nu-command/src/platform/ansi/strip.rs @@ -56,7 +56,7 @@ impl Command for SubCommand { cell_paths, config: config.clone(), }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn examples(&self) -> Vec { diff --git a/crates/nu-command/src/platform/dir_info.rs b/crates/nu-command/src/platform/dir_info.rs index 3179e70b68..10ce4f5420 100644 --- a/crates/nu-command/src/platform/dir_info.rs +++ b/crates/nu-command/src/platform/dir_info.rs @@ -1,6 +1,6 @@ use filesize::file_real_size_fast; use nu_glob::Pattern; -use nu_protocol::{record, Interrupt, ShellError, Span, Value}; +use nu_protocol::{record, ShellError, Signals, Span, Value}; use std::path::PathBuf; #[derive(Debug, Clone)] @@ -80,7 +80,7 @@ impl DirInfo { params: &DirBuilder, depth: Option, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let path = path.into(); @@ -105,12 +105,12 @@ impl DirInfo { match std::fs::read_dir(&s.path) { Ok(d) => { for f in d { - interrupt.check(span)?; + signals.check(span)?; match f { Ok(i) => match i.file_type() { Ok(t) if t.is_dir() => { - s = s.add_dir(i.path(), depth, params, span, interrupt)? + s = s.add_dir(i.path(), depth, params, span, signals)? } Ok(_t) => s = s.add_file(i.path(), params), Err(e) => s = s.add_error(e.into()), @@ -130,7 +130,7 @@ impl DirInfo { mut depth: Option, params: &DirBuilder, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { if let Some(current) = depth { if let Some(new) = current.checked_sub(1) { @@ -140,7 +140,7 @@ impl DirInfo { } } - let d = DirInfo::new(path, params, depth, span, interrupt)?; + let d = DirInfo::new(path, params, depth, span, signals)?; self.size += d.size; self.blocks += d.blocks; self.dirs.push(d); diff --git a/crates/nu-command/src/platform/sleep.rs b/crates/nu-command/src/platform/sleep.rs index 7dca8337cb..4d5f6ec827 100644 --- a/crates/nu-command/src/platform/sleep.rs +++ b/crates/nu-command/src/platform/sleep.rs @@ -56,7 +56,7 @@ impl Command for Sleep { break; } thread::sleep(CTRL_C_CHECK_INTERVAL.min(time_until_deadline)); - engine_state.interrupt().check(call.head)?; + engine_state.signals().check(call.head)?; } Ok(Value::nothing(call.head).into_pipeline_data()) diff --git a/crates/nu-command/src/random/dice.rs b/crates/nu-command/src/random/dice.rs index 19f2c48560..5e3a1b98b6 100644 --- a/crates/nu-command/src/random/dice.rs +++ b/crates/nu-command/src/random/dice.rs @@ -78,7 +78,7 @@ fn dice( Value::int(thread_rng.gen_range(1..sides + 1) as i64, span) }); - Ok(ListStream::new(iter, span, engine_state.interrupt().clone()).into()) + Ok(ListStream::new(iter, span, engine_state.signals().clone()).into()) } #[cfg(test)] diff --git a/crates/nu-command/src/stor/create.rs b/crates/nu-command/src/stor/create.rs index 342f9bfe3e..1e1219889d 100644 --- a/crates/nu-command/src/stor/create.rs +++ b/crates/nu-command/src/stor/create.rs @@ -56,7 +56,7 @@ impl Command for StorCreate { let columns: Option = call.get_flag(engine_state, stack, "columns")?; let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - engine_state.interrupt().clone(), + engine_state.signals().clone(), )); process(table_name, span, &db, columns)?; @@ -144,7 +144,7 @@ fn process( #[cfg(test)] mod test { - use nu_protocol::Interrupt; + use nu_protocol::Signals; use super::*; @@ -161,7 +161,7 @@ mod test { let span = Span::unknown(); let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let mut columns = Record::new(); columns.insert( @@ -180,7 +180,7 @@ mod test { let span = Span::unknown(); let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let mut columns = Record::new(); columns.insert( @@ -203,7 +203,7 @@ mod test { let span = Span::unknown(); let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let result = process(table_name, span, &db, None); @@ -221,7 +221,7 @@ mod test { let span = Span::unknown(); let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let mut columns = Record::new(); let column_datatype = "bogus_data_type".to_string(); diff --git a/crates/nu-command/src/stor/delete.rs b/crates/nu-command/src/stor/delete.rs index 32850da5b9..676e0490b0 100644 --- a/crates/nu-command/src/stor/delete.rs +++ b/crates/nu-command/src/stor/delete.rs @@ -1,6 +1,6 @@ use crate::database::{SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct StorDelete; @@ -85,7 +85,7 @@ impl Command for StorDelete { // Open the in-mem database let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); if let Some(new_table_name) = table_name_opt { diff --git a/crates/nu-command/src/stor/export.rs b/crates/nu-command/src/stor/export.rs index 1afe63fb9e..f8255eec49 100644 --- a/crates/nu-command/src/stor/export.rs +++ b/crates/nu-command/src/stor/export.rs @@ -1,6 +1,6 @@ use crate::database::{SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct StorExport; @@ -61,7 +61,7 @@ impl Command for StorExport { // Open the in-mem database let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); if let Ok(conn) = db.open_connection() { diff --git a/crates/nu-command/src/stor/import.rs b/crates/nu-command/src/stor/import.rs index 3ae2c7677d..20b5b64f2d 100644 --- a/crates/nu-command/src/stor/import.rs +++ b/crates/nu-command/src/stor/import.rs @@ -1,6 +1,6 @@ use crate::database::{SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct StorImport; @@ -61,7 +61,7 @@ impl Command for StorImport { // Open the in-mem database let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); if let Ok(mut conn) = db.open_connection() { diff --git a/crates/nu-command/src/stor/insert.rs b/crates/nu-command/src/stor/insert.rs index 65969827a7..b6b8d50906 100644 --- a/crates/nu-command/src/stor/insert.rs +++ b/crates/nu-command/src/stor/insert.rs @@ -1,6 +1,6 @@ use crate::database::{values_to_sql, SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use rusqlite::params_from_iter; #[derive(Clone)] @@ -68,7 +68,7 @@ impl Command for StorInsert { // let config = engine_state.get_config(); let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); // Check if the record is being passed as input or using the data record parameter @@ -204,7 +204,7 @@ mod test { fn test_process_with_simple_parameters() { let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let create_stmt = "CREATE TABLE test_process_with_simple_parameters ( int_column INTEGER, @@ -246,7 +246,7 @@ mod test { fn test_process_string_with_space() { let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let create_stmt = "CREATE TABLE test_process_string_with_space ( str_column VARCHAR(255) @@ -274,7 +274,7 @@ mod test { fn test_no_errors_when_string_too_long() { let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let create_stmt = "CREATE TABLE test_errors_when_string_too_long ( str_column VARCHAR(8) @@ -302,7 +302,7 @@ mod test { fn test_no_errors_when_param_is_wrong_type() { let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let create_stmt = "CREATE TABLE test_errors_when_param_is_wrong_type ( int_column INT @@ -330,7 +330,7 @@ mod test { fn test_errors_when_column_doesnt_exist() { let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let create_stmt = "CREATE TABLE test_errors_when_column_doesnt_exist ( int_column INT @@ -358,7 +358,7 @@ mod test { fn test_errors_when_table_doesnt_exist() { let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); let table_name = Some("test_errors_when_table_doesnt_exist".to_string()); diff --git a/crates/nu-command/src/stor/open.rs b/crates/nu-command/src/stor/open.rs index 07590769bb..ba0f17c2af 100644 --- a/crates/nu-command/src/stor/open.rs +++ b/crates/nu-command/src/stor/open.rs @@ -1,6 +1,6 @@ use crate::database::{SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct StorOpen; @@ -57,7 +57,7 @@ impl Command for StorOpen { // Just create an empty database with MEMORY_DB and nothing else let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); // dbg!(db.clone()); diff --git a/crates/nu-command/src/stor/reset.rs b/crates/nu-command/src/stor/reset.rs index 2f5718ebb2..ba9e2a9681 100644 --- a/crates/nu-command/src/stor/reset.rs +++ b/crates/nu-command/src/stor/reset.rs @@ -1,6 +1,6 @@ use crate::database::{SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct StorReset; @@ -45,7 +45,7 @@ impl Command for StorReset { // Open the in-mem database let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); if let Ok(conn) = db.open_connection() { diff --git a/crates/nu-command/src/stor/update.rs b/crates/nu-command/src/stor/update.rs index ec2bb3944e..18cf6f9f0f 100644 --- a/crates/nu-command/src/stor/update.rs +++ b/crates/nu-command/src/stor/update.rs @@ -1,6 +1,6 @@ use crate::database::{SQLiteDatabase, MEMORY_DB}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; #[derive(Clone)] pub struct StorUpdate; @@ -82,7 +82,7 @@ impl Command for StorUpdate { // Open the in-mem database let db = Box::new(SQLiteDatabase::new( std::path::Path::new(MEMORY_DB), - Interrupt::empty(), + Signals::empty(), )); // Check if the record is being passed as input or using the update record parameter diff --git a/crates/nu-command/src/strings/char_.rs b/crates/nu-command/src/strings/char_.rs index e95b7aafc6..7737210254 100644 --- a/crates/nu-command/src/strings/char_.rs +++ b/crates/nu-command/src/strings/char_.rs @@ -1,7 +1,7 @@ use indexmap::{indexmap, IndexMap}; use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use once_cell::sync::Lazy; // Character used to separate directories in a Path Environment variable on windows is ";" @@ -233,7 +233,7 @@ impl Command for Char { // handle -l flag if list { return Ok(generate_character_list( - working_set.permanent().interrupt().clone(), + working_set.permanent().signals().clone(), call.head, )); } @@ -270,7 +270,7 @@ impl Command for Char { // handle -l flag if list { return Ok(generate_character_list( - engine_state.interrupt().clone(), + engine_state.signals().clone(), call_span, )); } @@ -293,7 +293,7 @@ impl Command for Char { } } -fn generate_character_list(interrupt: Interrupt, call_span: Span) -> PipelineData { +fn generate_character_list(signals: Signals, call_span: Span) -> PipelineData { CHAR_MAP .iter() .map(move |(name, s)| { @@ -312,7 +312,7 @@ fn generate_character_list(interrupt: Interrupt, call_span: Span) -> PipelineDat Value::record(record, call_span) }) - .into_pipeline_data(call_span, interrupt) + .into_pipeline_data(call_span, signals) } fn handle_integer_flag( diff --git a/crates/nu-command/src/strings/detect_columns.rs b/crates/nu-command/src/strings/detect_columns.rs index 92f7e802c3..2f1f713b33 100644 --- a/crates/nu-command/src/strings/detect_columns.rs +++ b/crates/nu-command/src/strings/detect_columns.rs @@ -199,7 +199,7 @@ fn guess_width( Err(e) => Value::error(e, input_span), } }) - .into_pipeline_data(input_span, engine_state.interrupt().clone())) + .into_pipeline_data(input_span, engine_state.signals().clone())) } else { let length = result[0].len(); let columns: Vec = (0..length).map(|n| format!("column{n}")).collect(); @@ -224,7 +224,7 @@ fn guess_width( Err(e) => Value::error(e, input_span), } }) - .into_pipeline_data(input_span, engine_state.interrupt().clone())) + .into_pipeline_data(input_span, engine_state.signals().clone())) } } @@ -315,7 +315,7 @@ fn detect_columns( None => Value::record(record, name_span), } }) - .into_pipeline_data(call.head, engine_state.interrupt().clone())) + .into_pipeline_data(call.head, engine_state.signals().clone())) } else { Ok(PipelineData::empty()) } diff --git a/crates/nu-command/src/strings/encode_decode/base64.rs b/crates/nu-command/src/strings/encode_decode/base64.rs index 043471bf5e..afc143983e 100644 --- a/crates/nu-command/src/strings/encode_decode/base64.rs +++ b/crates/nu-command/src/strings/encode_decode/base64.rs @@ -75,7 +75,7 @@ pub fn operate( cell_paths, }; - general_operate(action, args, input, call.head, engine_state.interrupt()) + general_operate(action, args, input, call.head, engine_state.signals()) } fn action( diff --git a/crates/nu-command/src/strings/format/date.rs b/crates/nu-command/src/strings/format/date.rs index e2bc90df3d..dd005b9216 100644 --- a/crates/nu-command/src/strings/format/date.rs +++ b/crates/nu-command/src/strings/format/date.rs @@ -127,7 +127,7 @@ fn run( Some(format) => format_helper(value, format.item.as_str(), format.span, head), None => format_helper_rfc2822(value, head), }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/format/duration.rs b/crates/nu-command/src/strings/format/duration.rs index 5842ac76c3..fbbe192048 100644 --- a/crates/nu-command/src/strings/format/duration.rs +++ b/crates/nu-command/src/strings/format/duration.rs @@ -81,7 +81,7 @@ impl Command for FormatDuration { arg, input, call.head, - engine_state.interrupt(), + engine_state.signals(), ) } @@ -108,7 +108,7 @@ impl Command for FormatDuration { arg, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/format/filesize.rs b/crates/nu-command/src/strings/format/filesize.rs index 809511d17a..63865ac2ac 100644 --- a/crates/nu-command/src/strings/format/filesize.rs +++ b/crates/nu-command/src/strings/format/filesize.rs @@ -76,7 +76,7 @@ impl Command for FormatFilesize { arg, input, call.head, - engine_state.interrupt(), + engine_state.signals(), ) } @@ -101,7 +101,7 @@ impl Command for FormatFilesize { arg, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/parse.rs b/crates/nu-command/src/strings/parse.rs index a6a2fce13d..9bf31de73c 100644 --- a/crates/nu-command/src/strings/parse.rs +++ b/crates/nu-command/src/strings/parse.rs @@ -1,6 +1,6 @@ use fancy_regex::{Captures, Regex}; use nu_engine::command_prelude::*; -use nu_protocol::{engine::StateWorkingSet, Interrupt, ListStream}; +use nu_protocol::{engine::StateWorkingSet, ListStream, Signals}; use std::collections::VecDeque; #[derive(Clone)] @@ -187,10 +187,10 @@ fn operate( columns, iter, span: head, - interrupt: engine_state.interrupt().clone(), + signals: engine_state.signals().clone(), }; - Ok(ListStream::new(iter, head, Interrupt::empty()).into()) + Ok(ListStream::new(iter, head, Signals::empty()).into()) } value => Err(ShellError::PipelineMismatch { exp_input_type: "string".into(), @@ -215,7 +215,7 @@ fn operate( columns, iter, span: head, - interrupt: engine_state.interrupt().clone(), + signals: engine_state.signals().clone(), } }) .into()), @@ -227,10 +227,10 @@ fn operate( columns, iter: lines, span: head, - interrupt: engine_state.interrupt().clone(), + signals: engine_state.signals().clone(), }; - Ok(ListStream::new(iter, head, Interrupt::empty()).into()) + Ok(ListStream::new(iter, head, Signals::empty()).into()) } else { Ok(PipelineData::Empty) } @@ -297,7 +297,7 @@ struct ParseIter>> { columns: Vec, iter: I, span: Span, - interrupt: Interrupt, + signals: Signals, } impl>> ParseIter { @@ -315,7 +315,7 @@ impl>> Iterator for ParseIter { fn next(&mut self) -> Option { loop { - if self.interrupt.triggered() { + if self.signals.interrupted() { return None; } diff --git a/crates/nu-command/src/strings/split/chars.rs b/crates/nu-command/src/strings/split/chars.rs index 4d38f47e08..370df262ea 100644 --- a/crates/nu-command/src/strings/split/chars.rs +++ b/crates/nu-command/src/strings/split/chars.rs @@ -124,7 +124,7 @@ fn split_chars( let span = call.head; input.map( move |x| split_chars_helper(&x, span, graphemes), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/split/column.rs b/crates/nu-command/src/strings/split/column.rs index da39d5ed02..540cfabe54 100644 --- a/crates/nu-command/src/strings/split/column.rs +++ b/crates/nu-command/src/strings/split/column.rs @@ -170,7 +170,7 @@ fn split_column( input.flat_map( move |x| split_column_helper(&x, ®ex, &args.rest, args.collapse_empty, name_span), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/split/list.rs b/crates/nu-command/src/strings/split/list.rs index f146765f1f..eb874841a2 100644 --- a/crates/nu-command/src/strings/split/list.rs +++ b/crates/nu-command/src/strings/split/list.rs @@ -215,7 +215,7 @@ fn split_list( let matcher = Matcher::new(has_regex, separator)?; for val in input { - engine_state.interrupt().check(call.head)?; + engine_state.signals().check(call.head)?; if matcher.compare(&val)? { if !temp_list.is_empty() { diff --git a/crates/nu-command/src/strings/split/row.rs b/crates/nu-command/src/strings/split/row.rs index b6a221fb4a..1f427a06e0 100644 --- a/crates/nu-command/src/strings/split/row.rs +++ b/crates/nu-command/src/strings/split/row.rs @@ -170,7 +170,7 @@ fn split_row( })?; input.flat_map( move |x| split_row_helper(&x, ®ex, args.max_split, name_span), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/split/words.rs b/crates/nu-command/src/strings/split/words.rs index 04a5b2d271..6cb5562a70 100644 --- a/crates/nu-command/src/strings/split/words.rs +++ b/crates/nu-command/src/strings/split/words.rs @@ -177,7 +177,7 @@ fn split_words( input.map( move |x| split_words_helper(&x, args.word_length, span, args.graphemes), - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/str_/case/capitalize.rs b/crates/nu-command/src/strings/str_/case/capitalize.rs index 9ca1bc696a..862ca127c2 100644 --- a/crates/nu-command/src/strings/str_/case/capitalize.rs +++ b/crates/nu-command/src/strings/str_/case/capitalize.rs @@ -108,7 +108,7 @@ fn operate( ret } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/str_/case/downcase.rs b/crates/nu-command/src/strings/str_/case/downcase.rs index 3883e09526..0493a663aa 100644 --- a/crates/nu-command/src/strings/str_/case/downcase.rs +++ b/crates/nu-command/src/strings/str_/case/downcase.rs @@ -116,7 +116,7 @@ fn operate( ret } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/str_/case/mod.rs b/crates/nu-command/src/strings/str_/case/mod.rs index e251bc6dc6..3390ff097e 100644 --- a/crates/nu-command/src/strings/str_/case/mod.rs +++ b/crates/nu-command/src/strings/str_/case/mod.rs @@ -38,7 +38,7 @@ where case_operation, cell_paths, }; - general_operate(action, args, input, call.head, engine_state.interrupt()) + general_operate(action, args, input, call.head, engine_state.signals()) } fn action(input: &Value, args: &Arguments, head: Span) -> Value diff --git a/crates/nu-command/src/strings/str_/case/upcase.rs b/crates/nu-command/src/strings/str_/case/upcase.rs index d5c33a2cec..557239ec91 100644 --- a/crates/nu-command/src/strings/str_/case/upcase.rs +++ b/crates/nu-command/src/strings/str_/case/upcase.rs @@ -93,7 +93,7 @@ fn operate( ret } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/str_/contains.rs b/crates/nu-command/src/strings/str_/contains.rs index 3a616604f8..27d8a8e313 100644 --- a/crates/nu-command/src/strings/str_/contains.rs +++ b/crates/nu-command/src/strings/str_/contains.rs @@ -68,7 +68,7 @@ impl Command for SubCommand { cell_paths, case_insensitive: call.has_flag(engine_state, stack, "ignore-case")?, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -103,7 +103,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/deunicode.rs b/crates/nu-command/src/strings/str_/deunicode.rs index 60b848e580..ef732571f9 100644 --- a/crates/nu-command/src/strings/str_/deunicode.rs +++ b/crates/nu-command/src/strings/str_/deunicode.rs @@ -39,7 +39,7 @@ impl Command for SubCommand { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -56,7 +56,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/distance.rs b/crates/nu-command/src/strings/str_/distance.rs index aeba39dca7..9b88f8e3e0 100644 --- a/crates/nu-command/src/strings/str_/distance.rs +++ b/crates/nu-command/src/strings/str_/distance.rs @@ -67,7 +67,7 @@ impl Command for SubCommand { compare_string, cell_paths, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -88,7 +88,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/ends_with.rs b/crates/nu-command/src/strings/str_/ends_with.rs index 22a241770d..d4841b74e0 100644 --- a/crates/nu-command/src/strings/str_/ends_with.rs +++ b/crates/nu-command/src/strings/str_/ends_with.rs @@ -68,7 +68,7 @@ impl Command for SubCommand { cell_paths, case_insensitive: call.has_flag(engine_state, stack, "ignore-case")?, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -89,7 +89,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/expand.rs b/crates/nu-command/src/strings/str_/expand.rs index 239ac70e29..b9759ef6a1 100644 --- a/crates/nu-command/src/strings/str_/expand.rs +++ b/crates/nu-command/src/strings/str_/expand.rs @@ -233,7 +233,7 @@ fn run( ), } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/str_/index_of.rs b/crates/nu-command/src/strings/str_/index_of.rs index e379331130..a6b06ef9b7 100644 --- a/crates/nu-command/src/strings/str_/index_of.rs +++ b/crates/nu-command/src/strings/str_/index_of.rs @@ -93,7 +93,7 @@ impl Command for SubCommand { cell_paths, graphemes: grapheme_flags(engine_state, stack, call)?, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -117,7 +117,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/join.rs b/crates/nu-command/src/strings/str_/join.rs index 85025801c5..d297ea4cbc 100644 --- a/crates/nu-command/src/strings/str_/join.rs +++ b/crates/nu-command/src/strings/str_/join.rs @@ -1,5 +1,5 @@ use nu_engine::command_prelude::*; -use nu_protocol::Interrupt; +use nu_protocol::Signals; use std::io::Write; @@ -91,7 +91,7 @@ fn run( let output = ByteStream::from_fn( span, - Interrupt::empty(), + Signals::empty(), ByteStreamType::String, move |buffer| { // Write each input to the buffer diff --git a/crates/nu-command/src/strings/str_/length.rs b/crates/nu-command/src/strings/str_/length.rs index 8029f571b8..ab0ba8db49 100644 --- a/crates/nu-command/src/strings/str_/length.rs +++ b/crates/nu-command/src/strings/str_/length.rs @@ -130,7 +130,7 @@ fn run( cell_paths: (!cell_paths.is_empty()).then_some(cell_paths), graphemes, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn action(input: &Value, arg: &Arguments, head: Span) -> Value { diff --git a/crates/nu-command/src/strings/str_/replace.rs b/crates/nu-command/src/strings/str_/replace.rs index bfe7916cba..342dd0693e 100644 --- a/crates/nu-command/src/strings/str_/replace.rs +++ b/crates/nu-command/src/strings/str_/replace.rs @@ -102,7 +102,7 @@ impl Command for SubCommand { no_regex, multiline, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -134,7 +134,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/reverse.rs b/crates/nu-command/src/strings/str_/reverse.rs index 28cc216fd4..9a339f7bcc 100644 --- a/crates/nu-command/src/strings/str_/reverse.rs +++ b/crates/nu-command/src/strings/str_/reverse.rs @@ -50,7 +50,7 @@ impl Command for SubCommand { ) -> Result { let cell_paths: Vec = call.rest(engine_state, stack, 0)?; let args = CellPathOnlyArgs::from(cell_paths); - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -66,7 +66,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/starts_with.rs b/crates/nu-command/src/strings/str_/starts_with.rs index ec9f9532eb..bac451466c 100644 --- a/crates/nu-command/src/strings/str_/starts_with.rs +++ b/crates/nu-command/src/strings/str_/starts_with.rs @@ -70,7 +70,7 @@ impl Command for SubCommand { cell_paths, case_insensitive: call.has_flag(engine_state, stack, "ignore-case")?, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -92,7 +92,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/stats.rs b/crates/nu-command/src/strings/str_/stats.rs index c936e177ca..eb091ae4f6 100644 --- a/crates/nu-command/src/strings/str_/stats.rs +++ b/crates/nu-command/src/strings/str_/stats.rs @@ -122,7 +122,7 @@ fn stats( ), } }, - engine_state.interrupt(), + engine_state.signals(), ) } diff --git a/crates/nu-command/src/strings/str_/substring.rs b/crates/nu-command/src/strings/str_/substring.rs index 1d79302ba6..10464580c7 100644 --- a/crates/nu-command/src/strings/str_/substring.rs +++ b/crates/nu-command/src/strings/str_/substring.rs @@ -103,7 +103,7 @@ impl Command for SubCommand { cell_paths, graphemes: grapheme_flags(engine_state, stack, call)?, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } fn run_const( @@ -133,7 +133,7 @@ impl Command for SubCommand { args, input, call.head, - working_set.permanent().interrupt(), + working_set.permanent().signals(), ) } diff --git a/crates/nu-command/src/strings/str_/trim/trim_.rs b/crates/nu-command/src/strings/str_/trim/trim_.rs index fa76c68163..76d886a010 100644 --- a/crates/nu-command/src/strings/str_/trim/trim_.rs +++ b/crates/nu-command/src/strings/str_/trim/trim_.rs @@ -190,7 +190,7 @@ fn run( cell_paths, mode, }; - operate(action, args, input, call.head, engine_state.interrupt()) + operate(action, args, input, call.head, engine_state.signals()) } #[derive(Debug, Copy, Clone)] diff --git a/crates/nu-command/src/system/ps.rs b/crates/nu-command/src/system/ps.rs index 911e418425..859575abbd 100644 --- a/crates/nu-command/src/system/ps.rs +++ b/crates/nu-command/src/system/ps.rs @@ -182,5 +182,5 @@ fn run_ps( Ok(output .into_iter() - .into_pipeline_data(span, engine_state.interrupt().clone())) + .into_pipeline_data(span, engine_state.signals().clone())) } diff --git a/crates/nu-command/src/system/registry_query.rs b/crates/nu-command/src/system/registry_query.rs index 40d2db2ed3..9b68059ffa 100644 --- a/crates/nu-command/src/system/registry_query.rs +++ b/crates/nu-command/src/system/registry_query.rs @@ -106,7 +106,7 @@ fn registry_query( *registry_key_span, )) } - Ok(reg_values.into_pipeline_data(call_span, engine_state.interrupt().clone())) + Ok(reg_values.into_pipeline_data(call_span, engine_state.signals().clone())) } else { match registry_value { Some(value) => { diff --git a/crates/nu-command/src/system/run_external.rs b/crates/nu-command/src/system/run_external.rs index 045b2b338c..e475833747 100644 --- a/crates/nu-command/src/system/run_external.rs +++ b/crates/nu-command/src/system/run_external.rs @@ -2,7 +2,7 @@ use nu_cmd_base::hook::eval_hook; use nu_engine::{command_prelude::*, env_to_strings, get_eval_expression}; use nu_path::{dots::expand_ndots, expand_tilde}; use nu_protocol::{ - ast::Expression, did_you_mean, process::ChildProcess, ByteStream, Interrupt, NuGlob, OutDest, + ast::Expression, did_you_mean, process::ChildProcess, ByteStream, NuGlob, OutDest, Signals, }; use nu_system::ForegroundChild; use nu_utils::IgnoreCaseExt; @@ -228,7 +228,7 @@ pub fn eval_arguments_from_call( match arg { // Expand globs passed to run-external Value::Glob { val, no_expand, .. } if !no_expand => args.extend( - expand_glob(&val, &cwd, expr.span, engine_state.interrupt())? + expand_glob(&val, &cwd, expr.span, engine_state.signals())? .into_iter() .map(|s| s.into_spanned(expr.span)), ), @@ -288,7 +288,7 @@ fn expand_glob( arg: &str, cwd: &Path, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result, ShellError> { const GLOB_CHARS: &[char] = &['*', '?', '[']; @@ -306,7 +306,7 @@ fn expand_glob( let mut result: Vec = vec![]; for m in matches { - interrupt.check(span)?; + signals.check(span)?; if let Ok(arg) = m { let arg = resolve_globbed_path_to_cwd_relative(arg, prefix.as_ref(), cwd); result.push(arg.into()); @@ -608,31 +608,30 @@ mod test { let cwd = dirs.test(); - let actual = expand_glob("*.txt", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob("*.txt", cwd, Span::unknown(), &Signals::empty()).unwrap(); let expected = &["a.txt", "b.txt"]; assert_eq!(actual, expected); - let actual = expand_glob("./*.txt", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob("./*.txt", cwd, Span::unknown(), &Signals::empty()).unwrap(); assert_eq!(actual, expected); - let actual = expand_glob("'*.txt'", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob("'*.txt'", cwd, Span::unknown(), &Signals::empty()).unwrap(); let expected = &["'*.txt'"]; assert_eq!(actual, expected); - let actual = expand_glob(".", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob(".", cwd, Span::unknown(), &Signals::empty()).unwrap(); let expected = &["."]; assert_eq!(actual, expected); - let actual = expand_glob("./a.txt", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob("./a.txt", cwd, Span::unknown(), &Signals::empty()).unwrap(); let expected = &["./a.txt"]; assert_eq!(actual, expected); - let actual = expand_glob("[*.txt", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob("[*.txt", cwd, Span::unknown(), &Signals::empty()).unwrap(); let expected = &["[*.txt"]; assert_eq!(actual, expected); - let actual = - expand_glob("~/foo.txt", cwd, Span::unknown(), &Interrupt::empty()).unwrap(); + let actual = expand_glob("~/foo.txt", cwd, Span::unknown(), &Signals::empty()).unwrap(); let home = dirs_next::home_dir().expect("failed to get home dir"); let expected: Vec = vec![home.join("foo.txt").into()]; assert_eq!(actual, expected); @@ -664,7 +663,7 @@ mod test { ByteStream::read( b"foo".as_slice(), Span::unknown(), - Interrupt::empty(), + Signals::empty(), ByteStreamType::Unknown, ), None, diff --git a/crates/nu-command/src/system/which_.rs b/crates/nu-command/src/system/which_.rs index c3cbffa3ba..fd5b0beb18 100644 --- a/crates/nu-command/src/system/which_.rs +++ b/crates/nu-command/src/system/which_.rs @@ -215,7 +215,7 @@ fn which( Ok(output .into_iter() - .into_pipeline_data(head, engine_state.interrupt().clone())) + .into_pipeline_data(head, engine_state.signals().clone())) } #[cfg(test)] diff --git a/crates/nu-command/src/viewers/table.rs b/crates/nu-command/src/viewers/table.rs index 2cbf5a4948..e3738a3952 100644 --- a/crates/nu-command/src/viewers/table.rs +++ b/crates/nu-command/src/viewers/table.rs @@ -7,8 +7,7 @@ use nu_color_config::{color_from_hex, StyleComputer, TextStyle}; use nu_engine::{command_prelude::*, env::get_config, env_to_string}; use nu_pretty_hex::HexConfig; use nu_protocol::{ - ByteStream, Config, DataSource, Interrupt, ListStream, PipelineMetadata, TableMode, - ValueIterator, + ByteStream, Config, DataSource, ListStream, PipelineMetadata, Signals, TableMode, ValueIterator, }; use nu_table::{ common::create_nu_table_config, CollapsedTable, ExpandedTable, JustTable, NuTable, NuTableCell, @@ -377,8 +376,8 @@ fn handle_table_command( ), PipelineData::ByteStream(..) => Ok(input.data), PipelineData::Value(Value::Binary { val, .. }, ..) => { - let interrupt = input.engine_state.interrupt().clone(); - let stream = ByteStream::read_binary(val, input.call.head, interrupt); + let signals = input.engine_state.signals().clone(); + let stream = ByteStream::read_binary(val, input.call.head, signals); Ok(PipelineData::ByteStream( pretty_hex_stream(stream, input.call.head), None, @@ -386,8 +385,8 @@ fn handle_table_command( } // None of these two receive a StyleComputer because handle_row_stream() can produce it by itself using engine_state and stack. PipelineData::Value(Value::List { vals, .. }, metadata) => { - let interrupt = input.engine_state.interrupt().clone(); - let stream = ListStream::new(vals.into_iter(), span, interrupt); + let signals = input.engine_state.signals().clone(); + let stream = ListStream::new(vals.into_iter(), span, signals); input.data = PipelineData::Empty; handle_row_stream(input, cfg, stream, metadata) @@ -410,12 +409,9 @@ fn handle_table_command( Table.run(input.engine_state, input.stack, input.call, base_pipeline) } PipelineData::Value(Value::Range { val, .. }, metadata) => { - let interrupt = input.engine_state.interrupt().clone(); - let stream = ListStream::new( - val.into_range_iter(span, Interrupt::empty()), - span, - interrupt, - ); + let signals = input.engine_state.signals().clone(); + let stream = + ListStream::new(val.into_range_iter(span, Signals::empty()), span, signals); input.data = PipelineData::Empty; handle_row_stream(input, cfg, stream, metadata) } @@ -441,12 +437,12 @@ fn pretty_hex_stream(stream: ByteStream, span: Span) -> ByteStream { reader } else { // No stream to read from - return ByteStream::read_string("".into(), span, Interrupt::empty()); + return ByteStream::read_string("".into(), span, Signals::empty()); }; ByteStream::from_fn( span, - Interrupt::empty(), + Signals::empty(), ByteStreamType::String, move |buffer| { // Turn the buffer into a String we can write to @@ -524,7 +520,7 @@ fn handle_record( let opts = TableOpts::new( &config, styles, - input.engine_state.interrupt(), + input.engine_state.signals(), span, cfg.term_width, indent, @@ -536,7 +532,7 @@ fn handle_record( let result = match result { Some(output) => maybe_strip_color(output, &config), - None => report_unsuccessful_output(input.engine_state.interrupt(), cfg.term_width), + None => report_unsuccessful_output(input.engine_state.signals(), cfg.term_width), }; let val = Value::string(result, span); @@ -544,8 +540,8 @@ fn handle_record( Ok(val.into_pipeline_data()) } -fn report_unsuccessful_output(interrupt: &Interrupt, term_width: usize) -> String { - if interrupt.triggered() { +fn report_unsuccessful_output(signals: &Signals, term_width: usize) -> String { + if signals.interrupted() { "".into() } else { // assume this failed because the table was too wide @@ -690,7 +686,7 @@ fn handle_row_stream( let stream = ByteStream::from_result_iter( paginator, input.call.head, - Interrupt::empty(), + Signals::empty(), ByteStreamType::String, ); Ok(PipelineData::ByteStream(stream, None)) @@ -802,7 +798,7 @@ impl PagingTableCreator { TableOpts::new( cfg, style_comp, - self.engine_state.interrupt(), + self.engine_state.signals(), self.head, self.cfg.term_width, (cfg.table_indent.left, cfg.table_indent.right), @@ -834,18 +830,15 @@ impl Iterator for PagingTableCreator { match self.cfg.abbreviation { Some(abbr) => { - (batch, _, end) = stream_collect_abbriviated( - &mut self.stream, - abbr, - self.engine_state.interrupt(), - ); + (batch, _, end) = + stream_collect_abbriviated(&mut self.stream, abbr, self.engine_state.signals()); } None => { // Pull from stream until time runs out or we have enough items (batch, end) = stream_collect( &mut self.stream, STREAM_PAGE_SIZE, - self.engine_state.interrupt(), + self.engine_state.signals(), ); } } @@ -883,7 +876,7 @@ impl Iterator for PagingTableCreator { convert_table_to_output( table, &config, - self.engine_state.interrupt(), + self.engine_state.signals(), self.cfg.term_width, ) } @@ -892,7 +885,7 @@ impl Iterator for PagingTableCreator { fn stream_collect( stream: impl Iterator, size: usize, - interrupt: &Interrupt, + signals: &Signals, ) -> (Vec, bool) { let start_time = Instant::now(); let mut end = true; @@ -912,7 +905,7 @@ fn stream_collect( break; } - if interrupt.triggered() { + if signals.interrupted() { break; } } @@ -923,7 +916,7 @@ fn stream_collect( fn stream_collect_abbriviated( stream: impl Iterator, size: usize, - interrupt: &Interrupt, + signals: &Signals, ) -> (Vec, usize, bool) { let mut end = true; let mut read = 0; @@ -946,7 +939,7 @@ fn stream_collect_abbriviated( tail.push_back(item); } - if interrupt.triggered() { + if signals.interrupted() { end = false; break; } @@ -1078,7 +1071,7 @@ fn create_empty_placeholder( fn convert_table_to_output( table: Result, ShellError>, config: &Config, - interrupt: &Interrupt, + signals: &Signals, term_width: usize, ) -> Option, ShellError>> { match table { @@ -1091,7 +1084,7 @@ fn convert_table_to_output( Some(Ok(bytes)) } Ok(None) => { - let msg = if interrupt.triggered() { + let msg = if signals.interrupted() { String::from("") } else { // assume this failed because the table was too wide diff --git a/crates/nu-engine/src/eval.rs b/crates/nu-engine/src/eval.rs index 8d420c0538..1460dec464 100644 --- a/crates/nu-engine/src/eval.rs +++ b/crates/nu-engine/src/eval.rs @@ -21,7 +21,7 @@ pub fn eval_call( call: &Call, input: PipelineData, ) -> Result { - engine_state.interrupt().check(call.head)?; + engine_state.signals().check(call.head)?; let decl = engine_state.get_decl(call.decl_id); if !decl.is_known_external() && call.named_iter().any(|(flag, _, _)| flag.item == "help") { diff --git a/crates/nu-explore/src/commands/expand.rs b/crates/nu-explore/src/commands/expand.rs index 52fd5d167a..976752e836 100644 --- a/crates/nu-explore/src/commands/expand.rs +++ b/crates/nu-explore/src/commands/expand.rs @@ -70,7 +70,7 @@ fn convert_value_to_string( let style_computer = StyleComputer::from_config(engine_state, stack); Ok(nu_common::try_build_table( - engine_state.interrupt(), + engine_state.signals(), config, &style_computer, value, diff --git a/crates/nu-explore/src/nu_common/table.rs b/crates/nu-explore/src/nu_common/table.rs index 9fa106ca12..164c837bf9 100644 --- a/crates/nu-explore/src/nu_common/table.rs +++ b/crates/nu-explore/src/nu_common/table.rs @@ -1,21 +1,21 @@ use crate::nu_common::NuConfig; use nu_color_config::StyleComputer; -use nu_protocol::{Interrupt, Record, Span, Value}; +use nu_protocol::{Record, Signals, Span, Value}; use nu_table::{ common::{nu_value_to_string, nu_value_to_string_clean}, ExpandedTable, TableOpts, }; pub fn try_build_table( - interrupt: &Interrupt, + signals: &Signals, config: &NuConfig, style_computer: &StyleComputer, value: Value, ) -> String { let span = value.span(); match value { - Value::List { vals, .. } => try_build_list(vals, interrupt, config, span, style_computer), - Value::Record { val, .. } => try_build_map(&val, span, style_computer, interrupt, config), + Value::List { vals, .. } => try_build_list(vals, signals, config, span, style_computer), + Value::Record { val, .. } => try_build_map(&val, span, style_computer, signals, config), val if matches!(val, Value::String { .. }) => { nu_value_to_string_clean(&val, config, style_computer).0 } @@ -27,13 +27,13 @@ fn try_build_map( record: &Record, span: Span, style_computer: &StyleComputer, - interrupt: &Interrupt, + signals: &Signals, config: &NuConfig, ) -> String { let opts = TableOpts::new( config, style_computer, - interrupt, + signals, Span::unknown(), usize::MAX, (config.table_indent.left, config.table_indent.right), @@ -52,7 +52,7 @@ fn try_build_map( fn try_build_list( vals: Vec, - interrupt: &Interrupt, + signals: &Signals, config: &NuConfig, span: Span, style_computer: &StyleComputer, @@ -60,7 +60,7 @@ fn try_build_list( let opts = TableOpts::new( config, style_computer, - interrupt, + signals, Span::unknown(), usize::MAX, (config.table_indent.left, config.table_indent.right), diff --git a/crates/nu-explore/src/pager/mod.rs b/crates/nu-explore/src/pager/mod.rs index afc052e9fb..ba54f92e7a 100644 --- a/crates/nu-explore/src/pager/mod.rs +++ b/crates/nu-explore/src/pager/mod.rs @@ -198,7 +198,7 @@ fn render_ui( let mut view_stack = ViewStack::new(view, Vec::new()); loop { - if engine_state.interrupt().triggered() { + if engine_state.signals().interrupted() { break Ok(None); } diff --git a/crates/nu-lsp/src/lib.rs b/crates/nu-lsp/src/lib.rs index 86f3bfde95..fdeededac5 100644 --- a/crates/nu-lsp/src/lib.rs +++ b/crates/nu-lsp/src/lib.rs @@ -69,11 +69,11 @@ impl LanguageServer { let _initialization_params = self .connection .initialize_while(server_capabilities, || { - !engine_state.interrupt().triggered() + !engine_state.signals().interrupted() }) .into_diagnostic()?; - while !engine_state.interrupt().triggered() { + while !engine_state.signals().interrupted() { let msg = match self .connection .receiver diff --git a/crates/nu-plugin-core/src/interface/mod.rs b/crates/nu-plugin-core/src/interface/mod.rs index 02a1a8f0d5..89aa2b15e5 100644 --- a/crates/nu-plugin-core/src/interface/mod.rs +++ b/crates/nu-plugin-core/src/interface/mod.rs @@ -1,9 +1,7 @@ //! Implements the stream multiplexing interface for both the plugin side and the engine side. use nu_plugin_protocol::{ByteStreamInfo, ListStreamInfo, PipelineDataHeader, StreamMessage}; -use nu_protocol::{ - ByteStream, Interrupt, IntoSpanned, ListStream, PipelineData, Reader, ShellError, -}; +use nu_protocol::{ByteStream, IntoSpanned, ListStream, PipelineData, Reader, ShellError, Signals}; use std::{ io::{Read, Write}, sync::Mutex, @@ -172,7 +170,7 @@ pub trait InterfaceManager { fn read_pipeline_data( &self, header: PipelineDataHeader, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { self.prepare_pipeline_data(match header { PipelineDataHeader::Empty => PipelineData::Empty, @@ -180,13 +178,12 @@ pub trait InterfaceManager { PipelineDataHeader::ListStream(info) => { let handle = self.stream_manager().get_handle(); let reader = handle.read_stream(info.id, self.get_interface())?; - ListStream::new(reader, info.span, interrupt.clone()).into() + ListStream::new(reader, info.span, signals.clone()).into() } PipelineDataHeader::ByteStream(info) => { let handle = self.stream_manager().get_handle(); let reader = handle.read_stream(info.id, self.get_interface())?; - ByteStream::from_result_iter(reader, info.span, interrupt.clone(), info.type_) - .into() + ByteStream::from_result_iter(reader, info.span, signals.clone(), info.type_).into() } }) } diff --git a/crates/nu-plugin-core/src/interface/tests.rs b/crates/nu-plugin-core/src/interface/tests.rs index 2663704e06..3a32a0f62a 100644 --- a/crates/nu-plugin-core/src/interface/tests.rs +++ b/crates/nu-plugin-core/src/interface/tests.rs @@ -10,7 +10,7 @@ use nu_plugin_protocol::{ StreamMessage, }; use nu_protocol::{ - ByteStream, ByteStreamSource, ByteStreamType, DataSource, Interrupt, ListStream, PipelineData, + ByteStream, ByteStreamSource, ByteStreamType, DataSource, Signals, ListStream, PipelineData, PipelineMetadata, ShellError, Span, Value, }; use std::{path::Path, sync::Arc}; @@ -129,7 +129,7 @@ fn read_pipeline_data_empty() -> Result<(), ShellError> { let header = PipelineDataHeader::Empty; assert!(matches!( - manager.read_pipeline_data(header, &Interrupt::empty())?, + manager.read_pipeline_data(header, &Signals::empty())?, PipelineData::Empty )); Ok(()) @@ -141,7 +141,7 @@ fn read_pipeline_data_value() -> Result<(), ShellError> { let value = Value::test_int(4); let header = PipelineDataHeader::Value(value.clone()); - match manager.read_pipeline_data(header, &Interrupt::empty())? { + match manager.read_pipeline_data(header, &Signals::empty())? { PipelineData::Value(read_value, ..) => assert_eq!(value, read_value), PipelineData::ListStream(..) => panic!("unexpected ListStream"), PipelineData::ByteStream(..) => panic!("unexpected ByteStream"), @@ -168,7 +168,7 @@ fn read_pipeline_data_list_stream() -> Result<(), ShellError> { span: Span::test_data(), }); - let pipe = manager.read_pipeline_data(header, &Interrupt::empty())?; + let pipe = manager.read_pipeline_data(header, &Signals::empty())?; assert!( matches!(pipe, PipelineData::ListStream(..)), "unexpected PipelineData: {pipe:?}" @@ -212,7 +212,7 @@ fn read_pipeline_data_byte_stream() -> Result<(), ShellError> { type_: ByteStreamType::Unknown, }); - let pipe = manager.read_pipeline_data(header, &Interrupt::empty())?; + let pipe = manager.read_pipeline_data(header, &Signals::empty())?; // need to consume input manager.consume_all()?; @@ -257,7 +257,7 @@ fn read_pipeline_data_prepared_properly() -> Result<(), ShellError> { id: 0, span: Span::test_data(), }); - match manager.read_pipeline_data(header, &Interrupt::empty())? { + match manager.read_pipeline_data(header, &Signals::empty())? { PipelineData::ListStream(_, meta) => match meta { Some(PipelineMetadata { data_source, .. }) => match data_source { DataSource::FilePath(path) => { @@ -356,7 +356,7 @@ fn write_pipeline_data_list_stream() -> Result<(), ShellError> { ListStream::new( values.clone().into_iter(), Span::test_data(), - Interrupt::empty(), + Signals::empty(), ), None, ); @@ -410,7 +410,7 @@ fn write_pipeline_data_byte_stream() -> Result<(), ShellError> { ByteStream::read( std::io::Cursor::new(expected), span, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Unknown, ), None, diff --git a/crates/nu-plugin-engine/src/context.rs b/crates/nu-plugin-engine/src/context.rs index fd6ddcde54..b026d21b23 100644 --- a/crates/nu-plugin-engine/src/context.rs +++ b/crates/nu-plugin-engine/src/context.rs @@ -3,8 +3,8 @@ use nu_engine::{get_eval_block_with_early_return, get_full_help, ClosureEvalOnce use nu_protocol::{ ast::Call, engine::{Closure, EngineState, Redirection, Stack}, - Config, Interrupt, IntoSpanned, OutDest, PipelineData, PluginIdentity, ShellError, Span, - Spanned, Value, + Config, IntoSpanned, OutDest, PipelineData, PluginIdentity, ShellError, Signals, Span, Spanned, + Value, }; use std::{ borrow::Cow, @@ -16,8 +16,8 @@ use std::{ pub trait PluginExecutionContext: Send + Sync { /// A span pointing to the command being executed fn span(&self) -> Span; - /// The interrupt signal, if present - fn interrupt(&self) -> &Interrupt; + /// The [`Signals`] struct, if present + fn signals(&self) -> &Signals; /// The pipeline externals state, for tracking the foreground process group, if present fn pipeline_externals_state(&self) -> Option<&Arc<(AtomicU32, AtomicU32)>>; /// Get engine configuration @@ -78,8 +78,8 @@ impl<'a> PluginExecutionContext for PluginExecutionCommandContext<'a> { self.call.head } - fn interrupt(&self) -> &Interrupt { - self.engine_state.interrupt() + fn signals(&self) -> &Signals { + self.engine_state.signals() } fn pipeline_externals_state(&self) -> Option<&Arc<(AtomicU32, AtomicU32)>> { @@ -232,8 +232,8 @@ impl PluginExecutionContext for PluginExecutionBogusContext { Span::test_data() } - fn interrupt(&self) -> &Interrupt { - &Interrupt::EMPTY + fn signals(&self) -> &Signals { + &Signals::EMPTY } fn pipeline_externals_state(&self) -> Option<&Arc<(AtomicU32, AtomicU32)>> { diff --git a/crates/nu-plugin-engine/src/interface/mod.rs b/crates/nu-plugin-engine/src/interface/mod.rs index 807b8acc00..79ab7f7720 100644 --- a/crates/nu-plugin-engine/src/interface/mod.rs +++ b/crates/nu-plugin-engine/src/interface/mod.rs @@ -11,8 +11,8 @@ use nu_plugin_protocol::{ PluginOutput, ProtocolInfo, StreamId, StreamMessage, }; use nu_protocol::{ - ast::Operator, CustomValue, Interrupt, IntoSpanned, PipelineData, PluginMetadata, - PluginSignature, ShellError, Span, Spanned, Value, + ast::Operator, CustomValue, IntoSpanned, PipelineData, PluginMetadata, PluginSignature, + ShellError, Signals, Span, Spanned, Value, }; use std::{ collections::{btree_map, BTreeMap}, @@ -103,8 +103,8 @@ struct PluginCallState { /// Don't try to send the plugin call response. This is only used for `Dropped` to avoid an /// error dont_send_response: bool, - /// Interrupt signal to be used for stream iterators - interrupt: Interrupt, + /// Signals to be used for stream iterators + signals: Signals, /// Channel to receive context on to be used if needed context_rx: Option>, /// Span associated with the call, if any @@ -231,14 +231,14 @@ impl PluginInterfaceManager { } } - /// Find the interrupt handler corresponding to the given plugin call id - fn get_interrupt(&mut self, id: PluginCallId) -> Result { + /// Find the [`Signals`] struct corresponding to the given plugin call id + fn get_signals(&mut self, id: PluginCallId) -> Result { // Make sure we're up to date self.receive_plugin_call_subscriptions(); // Find the subscription and return the context self.plugin_call_states .get(&id) - .map(|state| state.interrupt.clone()) + .map(|state| state.signals.clone()) .ok_or_else(|| ShellError::PluginFailedToDecode { msg: format!("Unknown plugin call ID: {id}"), }) @@ -517,14 +517,14 @@ impl InterfaceManager for PluginInterfaceManager { // Handle reading the pipeline data, if any let response = response .map_data(|data| { - let interrupt = self.get_interrupt(id)?; + let signals = self.get_signals(id)?; // Register the stream in the response if let Some(stream_id) = data.stream_id() { self.recv_stream_started(id, stream_id); } - self.read_pipeline_data(data, &interrupt) + self.read_pipeline_data(data, &signals) }) .unwrap_or_else(|err| { // If there's an error with initializing this stream, change it to a plugin @@ -544,8 +544,8 @@ impl InterfaceManager for PluginInterfaceManager { let call = call // Handle reading the pipeline data, if any .map_data(|input| { - let interrupt = self.get_interrupt(context)?; - self.read_pipeline_data(input, &interrupt) + let signals = self.get_signals(context)?; + self.read_pipeline_data(input, &signals) }) // Do anything extra needed for each engine call setup .and_then(|mut engine_call| { @@ -698,9 +698,9 @@ impl PluginInterface { context: Option<&dyn PluginExecutionContext>, ) -> Result { let id = self.state.plugin_call_id_sequence.next()?; - let interrupt = context - .map(|c| c.interrupt().clone()) - .unwrap_or_else(Interrupt::empty); + let signals = context + .map(|c| c.signals().clone()) + .unwrap_or_else(Signals::empty); let (tx, rx) = mpsc::channel(); let (context_tx, context_rx) = mpsc::channel(); let keep_plugin_custom_values = mpsc::channel(); @@ -748,7 +748,7 @@ impl PluginInterface { PluginCallState { sender: Some(tx).filter(|_| !dont_send_response), dont_send_response, - interrupt, + signals, context_rx: Some(context_rx), span: call.span(), keep_plugin_custom_values, diff --git a/crates/nu-plugin-engine/src/interface/tests.rs b/crates/nu-plugin-engine/src/interface/tests.rs index 066d8234db..2bab67f25f 100644 --- a/crates/nu-plugin-engine/src/interface/tests.rs +++ b/crates/nu-plugin-engine/src/interface/tests.rs @@ -17,8 +17,8 @@ use nu_plugin_protocol::{ use nu_protocol::{ ast::{Math, Operator}, engine::Closure, - ByteStreamType, CustomValue, Interrupt, IntoInterruptiblePipelineData, IntoSpanned, - PipelineData, PluginMetadata, PluginSignature, ShellError, Span, Spanned, Value, + ByteStreamType, CustomValue, IntoInterruptiblePipelineData, IntoSpanned, PipelineData, + PluginMetadata, PluginSignature, ShellError, Signals, Span, Spanned, Value, }; use serde::{Deserialize, Serialize}; use std::{ @@ -56,7 +56,7 @@ fn manager_consume_all_exits_after_streams_and_interfaces_are_dropped() -> Resul id: 0, span: Span::test_data(), }), - &Interrupt::empty(), + &Signals::empty(), )?; // and an interface... @@ -112,7 +112,7 @@ fn manager_consume_all_propagates_io_error_to_readers() -> Result<(), ShellError id: 0, span: Span::test_data(), }), - &Interrupt::empty(), + &Signals::empty(), )?; manager @@ -159,7 +159,7 @@ fn manager_consume_all_propagates_message_error_to_readers() -> Result<(), Shell span: Span::test_data(), type_: ByteStreamType::Unknown, }), - &Interrupt::empty(), + &Signals::empty(), )?; manager @@ -190,7 +190,7 @@ fn fake_plugin_call( PluginCallState { sender: Some(tx), dont_send_response: false, - interrupt: Interrupt::empty(), + signals: Signals::empty(), context_rx: None, span: None, keep_plugin_custom_values: mpsc::channel(), @@ -493,7 +493,7 @@ fn manager_handle_engine_call_after_response_received() -> Result<(), ShellError PluginCallState { sender: None, dont_send_response: false, - interrupt: Interrupt::empty(), + signals: Signals::empty(), context_rx: Some(context_rx), span: None, keep_plugin_custom_values: mpsc::channel(), @@ -559,7 +559,7 @@ fn manager_send_plugin_call_response_removes_context_only_if_no_streams_to_read( PluginCallState { sender: None, dont_send_response: false, - interrupt: Interrupt::empty(), + signals: Signals::empty(), context_rx: None, span: None, keep_plugin_custom_values: mpsc::channel(), @@ -595,7 +595,7 @@ fn manager_consume_stream_end_removes_context_only_if_last_stream() -> Result<() PluginCallState { sender: None, dont_send_response: false, - interrupt: Interrupt::empty(), + signals: Signals::empty(), context_rx: None, span: None, keep_plugin_custom_values: mpsc::channel(), @@ -678,7 +678,7 @@ fn manager_prepare_pipeline_data_adds_source_to_list_streams() -> Result<(), She [Value::test_custom_value(Box::new( test_plugin_custom_value(), ))] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), )?; let value = data @@ -854,7 +854,7 @@ fn interface_write_plugin_call_writes_run_with_stream_input() -> Result<(), Shel }, input: values .clone() - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), }), None, )?; @@ -1152,7 +1152,7 @@ fn interface_prepare_pipeline_data_accepts_normal_streams() -> Result<(), ShellE let data = interface.prepare_pipeline_data( values .clone() - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), &state, )?; @@ -1217,7 +1217,7 @@ fn interface_prepare_pipeline_data_rejects_bad_custom_value_in_a_stream() -> Res let data = interface.prepare_pipeline_data( values .clone() - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), &state, )?; diff --git a/crates/nu-plugin-test-support/src/lib.rs b/crates/nu-plugin-test-support/src/lib.rs index 384ba9b931..998c31ac0d 100644 --- a/crates/nu-plugin-test-support/src/lib.rs +++ b/crates/nu-plugin-test-support/src/lib.rs @@ -8,7 +8,7 @@ //! use nu_plugin::*; //! use nu_plugin_test_support::PluginTest; //! use nu_protocol::{ -//! Example, Interrupt, IntoInterruptiblePipelineData, LabeledError, PipelineData, ShellError, +//! Example, IntoInterruptiblePipelineData, LabeledError, PipelineData, ShellError, Signals, //! Signature, Span, Type, Value, //! }; //! @@ -60,7 +60,7 @@ //! // Errors in a stream should be returned as values. //! .unwrap_or_else(|err| Value::error(err, span)) //! }, -//! &Interrupt::empty(), +//! &Signals::empty(), //! )?) //! } //! } @@ -83,7 +83,7 @@ //! //! // #[test] //! fn test_lowercase() -> Result<(), ShellError> { -//! let input = vec![Value::test_string("FooBar")].into_pipeline_data(Span::test_data(), Interrupt::empty()); +//! let input = vec![Value::test_string("FooBar")].into_pipeline_data(Span::test_data(), Signals::empty()); //! let output = PluginTest::new("lowercase", LowercasePlugin.into())? //! .eval_with("lowercase", input)? //! .into_value(Span::test_data())?; diff --git a/crates/nu-plugin-test-support/src/plugin_test.rs b/crates/nu-plugin-test-support/src/plugin_test.rs index 207ba85665..5e3334c78b 100644 --- a/crates/nu-plugin-test-support/src/plugin_test.rs +++ b/crates/nu-plugin-test-support/src/plugin_test.rs @@ -10,8 +10,8 @@ use nu_plugin_protocol::PluginCustomValue; use nu_protocol::{ debugger::WithoutDebug, engine::{EngineState, Stack, StateWorkingSet}, - report_error_new, CustomValue, Example, Interrupt, IntoSpanned as _, LabeledError, - PipelineData, ShellError, Span, Value, + report_error_new, CustomValue, Example, IntoSpanned as _, LabeledError, PipelineData, + ShellError, Signals, Span, Value, }; use crate::{diff::diff_by_line, fake_register::fake_register}; @@ -85,13 +85,13 @@ impl PluginTest { /// /// ```rust,no_run /// # use nu_plugin_test_support::PluginTest; - /// # use nu_protocol::{Interrupt, IntoInterruptiblePipelineData, ShellError, Span, Value}; + /// # use nu_protocol::{IntoInterruptiblePipelineData, ShellError, Signals, Span, Value}; /// # use nu_plugin::*; /// # fn test(MyPlugin: impl Plugin + Send + 'static) -> Result<(), ShellError> { /// let result = PluginTest::new("my_plugin", MyPlugin.into())? /// .eval_with( /// "my-command", - /// vec![Value::test_int(42)].into_pipeline_data(Span::test_data(), Interrupt::empty()) + /// vec![Value::test_int(42)].into_pipeline_data(Span::test_data(), Signals::empty()) /// )? /// .into_value(Span::test_data())?; /// assert_eq!(Value::test_string("42"), result); @@ -151,7 +151,7 @@ impl PluginTest { Err(err) => Value::error(err, value.span()), } }, - &Interrupt::empty(), + &Signals::empty(), )? }; @@ -171,7 +171,7 @@ impl PluginTest { Err(err) => Value::error(err, value.span()), } }, - &Interrupt::empty(), + &Signals::empty(), ) } } diff --git a/crates/nu-plugin-test-support/tests/lowercase/mod.rs b/crates/nu-plugin-test-support/tests/lowercase/mod.rs index 64cbc94a4d..fa7890d6d3 100644 --- a/crates/nu-plugin-test-support/tests/lowercase/mod.rs +++ b/crates/nu-plugin-test-support/tests/lowercase/mod.rs @@ -1,7 +1,7 @@ use nu_plugin::*; use nu_plugin_test_support::PluginTest; use nu_protocol::{ - Example, Interrupt, IntoInterruptiblePipelineData, LabeledError, PipelineData, ShellError, + Example, Signals, IntoInterruptiblePipelineData, LabeledError, PipelineData, ShellError, Signature, Span, Type, Value, }; @@ -53,7 +53,7 @@ impl PluginCommand for Lowercase { // Errors in a stream should be returned as values. .unwrap_or_else(|err| Value::error(err, span)) }, - &Interrupt::empty(), + &Signals::empty(), )?) } } @@ -73,7 +73,7 @@ fn test_lowercase_using_eval_with() -> Result<(), ShellError> { let result = PluginTest::new("lowercase", LowercasePlugin.into())?.eval_with( "lowercase", vec![Value::test_string("HeLlO wOrLd")] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), )?; assert_eq!( diff --git a/crates/nu-plugin/src/plugin/command.rs b/crates/nu-plugin/src/plugin/command.rs index 9210685b41..a90555ac40 100644 --- a/crates/nu-plugin/src/plugin/command.rs +++ b/crates/nu-plugin/src/plugin/command.rs @@ -22,7 +22,7 @@ use crate::{EngineInterface, EvaluatedCall, Plugin}; /// Basic usage: /// ``` /// # use nu_plugin::*; -/// # use nu_protocol::{Interrupt, LabeledError, PipelineData, Signature, Type, Value}; +/// # use nu_protocol::{LabeledError, PipelineData, Signals, Signature, Type, Value}; /// struct LowercasePlugin; /// struct Lowercase; /// @@ -55,7 +55,7 @@ use crate::{EngineInterface, EvaluatedCall, Plugin}; /// .map(|string| Value::string(string.to_lowercase(), span)) /// // Errors in a stream should be returned as values. /// .unwrap_or_else(|err| Value::error(err, span)) -/// }, &Interrupt::empty())?) +/// }, &Signals::empty())?) /// } /// } /// diff --git a/crates/nu-plugin/src/plugin/interface/mod.rs b/crates/nu-plugin/src/plugin/interface/mod.rs index ac2b537144..89805e81f6 100644 --- a/crates/nu-plugin/src/plugin/interface/mod.rs +++ b/crates/nu-plugin/src/plugin/interface/mod.rs @@ -11,7 +11,7 @@ use nu_plugin_protocol::{ ProtocolInfo, }; use nu_protocol::{ - engine::Closure, Config, Interrupt, LabeledError, PipelineData, PluginMetadata, + engine::Closure, Config, Signals, LabeledError, PipelineData, PluginMetadata, PluginSignature, ShellError, Span, Spanned, Value, }; use std::{ @@ -275,7 +275,7 @@ impl InterfaceManager for EngineInterfaceManager { let interface = self.interface_for_context(id); // Read streams in the input let call = match call - .map_data(|input| self.read_pipeline_data(input, &Interrupt::empty())) + .map_data(|input| self.read_pipeline_data(input, &Signals::empty())) { Ok(call) => call, Err(err) => { @@ -322,7 +322,7 @@ impl InterfaceManager for EngineInterfaceManager { } PluginInput::EngineCallResponse(id, response) => { let response = response - .map_data(|header| self.read_pipeline_data(header, &Interrupt::empty())) + .map_data(|header| self.read_pipeline_data(header, &Signals::empty())) .unwrap_or_else(|err| { // If there's an error with initializing this stream, change it to an engine // call error response, but send it anyway diff --git a/crates/nu-plugin/src/plugin/interface/tests.rs b/crates/nu-plugin/src/plugin/interface/tests.rs index 669496211b..e7baea393c 100644 --- a/crates/nu-plugin/src/plugin/interface/tests.rs +++ b/crates/nu-plugin/src/plugin/interface/tests.rs @@ -9,7 +9,7 @@ use nu_plugin_protocol::{ PluginCustomValue, PluginInput, PluginOutput, Protocol, ProtocolInfo, StreamData, }; use nu_protocol::{ - engine::Closure, ByteStreamType, Config, CustomValue, Interrupt, IntoInterruptiblePipelineData, + engine::Closure, ByteStreamType, Config, CustomValue, Signals, IntoInterruptiblePipelineData, LabeledError, PipelineData, PluginSignature, ShellError, Span, Spanned, Value, }; use std::{ @@ -59,7 +59,7 @@ fn manager_consume_all_exits_after_streams_and_interfaces_are_dropped() -> Resul id: 0, span: Span::test_data(), }), - &Interrupt::empty(), + &Signals::empty(), )?; // and an interface... @@ -115,7 +115,7 @@ fn manager_consume_all_propagates_io_error_to_readers() -> Result<(), ShellError id: 0, span: Span::test_data(), }), - &Interrupt::empty(), + &Signals::empty(), )?; manager @@ -162,7 +162,7 @@ fn manager_consume_all_propagates_message_error_to_readers() -> Result<(), Shell span: Span::test_data(), type_: ByteStreamType::Unknown, }), - &Interrupt::empty(), + &Signals::empty(), )?; manager @@ -615,7 +615,7 @@ fn manager_prepare_pipeline_data_deserializes_custom_values_in_streams() -> Resu [Value::test_custom_value(Box::new( test_plugin_custom_value(), ))] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), )?; let value = data @@ -647,7 +647,7 @@ fn manager_prepare_pipeline_data_embeds_deserialization_errors_in_streams() -> R let span = Span::new(20, 30); let data = manager.prepare_pipeline_data( [Value::custom(Box::new(invalid_custom_value), span)] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), )?; let value = data @@ -730,7 +730,7 @@ fn interface_write_response_with_stream() -> Result<(), ShellError> { interface .write_response(Ok::<_, ShellError>( [Value::test_int(3), Value::test_int(4), Value::test_int(5)] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), ))? .write()?; @@ -1132,7 +1132,7 @@ fn interface_prepare_pipeline_data_serializes_custom_values_in_streams() -> Resu [Value::test_custom_value(Box::new( expected_test_custom_value(), ))] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), &(), )?; @@ -1191,7 +1191,7 @@ fn interface_prepare_pipeline_data_embeds_serialization_errors_in_streams() -> R let span = Span::new(40, 60); let data = interface.prepare_pipeline_data( [Value::custom(Box::new(CantSerialize::BadVariant), span)] - .into_pipeline_data(Span::test_data(), Interrupt::empty()), + .into_pipeline_data(Span::test_data(), Signals::empty()), &(), )?; diff --git a/crates/nu-protocol/src/engine/engine_state.rs b/crates/nu-protocol/src/engine/engine_state.rs index 819d6a0033..e393d78d41 100644 --- a/crates/nu-protocol/src/engine/engine_state.rs +++ b/crates/nu-protocol/src/engine/engine_state.rs @@ -7,8 +7,8 @@ use crate::{ Variable, Visibility, DEFAULT_OVERLAY_NAME, }, eval_const::create_nu_constant, - BlockId, Category, Config, DeclId, FileId, GetSpan, HistoryConfig, Interrupt, Module, ModuleId, - OverlayId, ShellError, Signature, Span, SpanId, Type, Value, VarId, VirtualPathId, + BlockId, Category, Config, DeclId, FileId, GetSpan, HistoryConfig, Module, ModuleId, OverlayId, + ShellError, Signals, Signature, Span, SpanId, Type, Value, VarId, VirtualPathId, }; use fancy_regex::Regex; use lru::LruCache; @@ -84,7 +84,7 @@ pub struct EngineState { pub spans: Vec, usage: Usage, pub scope: ScopeFrame, - interrupt: Interrupt, + signals: Signals, pub env_vars: Arc, pub previous_env_vars: Arc>, pub config: Arc, @@ -144,7 +144,7 @@ impl EngineState { 0, false, ), - interrupt: Interrupt::empty(), + signals: Signals::empty(), env_vars: Arc::new( [(DEFAULT_OVERLAY_NAME.to_string(), HashMap::new())] .into_iter() @@ -177,16 +177,16 @@ impl EngineState { } } - pub fn interrupt(&self) -> &Interrupt { - &self.interrupt + pub fn signals(&self) -> &Signals { + &self.signals } - pub fn reset_interrupt(&mut self) { - self.interrupt.reset() + pub fn reset_signals(&mut self) { + self.signals.reset() } - pub fn set_interrupt(&mut self, interrupt: Interrupt) { - self.interrupt = interrupt; + pub fn set_signals(&mut self, signals: Signals) { + self.signals = signals; } /// Merges a `StateDelta` onto the current state. These deltas come from a system, like the parser, that diff --git a/crates/nu-protocol/src/pipeline/byte_stream.rs b/crates/nu-protocol/src/pipeline/byte_stream.rs index 6878b221b7..6226f1d8db 100644 --- a/crates/nu-protocol/src/pipeline/byte_stream.rs +++ b/crates/nu-protocol/src/pipeline/byte_stream.rs @@ -1,6 +1,6 @@ use crate::{ process::{ChildPipe, ChildProcess, ExitStatus}, - ErrSpan, Interrupt, IntoSpanned, OutDest, PipelineData, ShellError, Span, Type, Value, + ErrSpan, IntoSpanned, OutDest, PipelineData, ShellError, Signals, Span, Type, Value, }; use serde::{Deserialize, Serialize}; #[cfg(unix)] @@ -177,7 +177,7 @@ impl From for Type { pub struct ByteStream { stream: ByteStreamSource, span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, known_size: Option, } @@ -187,13 +187,13 @@ impl ByteStream { pub fn new( stream: ByteStreamSource, span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, ) -> Self { Self { stream, span, - interrupt, + signals, type_, known_size: None, } @@ -203,33 +203,33 @@ impl ByteStream { pub fn read( reader: impl Read + Send + 'static, span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, ) -> Self { Self::new( ByteStreamSource::Read(Box::new(reader)), span, - interrupt, + signals, type_, ) } /// Create a [`ByteStream`] from a string. The type of the stream is always `String`. - pub fn read_string(string: String, span: Span, interrupt: Interrupt) -> Self { + pub fn read_string(string: String, span: Span, signals: Signals) -> Self { let len = string.len(); ByteStream::read( Cursor::new(string.into_bytes()), span, - interrupt, + signals, ByteStreamType::String, ) .with_known_size(Some(len as u64)) } /// Create a [`ByteStream`] from a byte vector. The type of the stream is always `Binary`. - pub fn read_binary(bytes: Vec, span: Span, interrupt: Interrupt) -> Self { + pub fn read_binary(bytes: Vec, span: Span, signals: Signals) -> Self { let len = bytes.len(); - ByteStream::read(Cursor::new(bytes), span, interrupt, ByteStreamType::Binary) + ByteStream::read(Cursor::new(bytes), span, signals, ByteStreamType::Binary) .with_known_size(Some(len as u64)) } @@ -237,11 +237,11 @@ impl ByteStream { /// /// The type is implicitly `Unknown`, as it's not typically known whether files will /// return text or binary. - pub fn file(file: File, span: Span, interrupt: Interrupt) -> Self { + pub fn file(file: File, span: Span, signals: Signals) -> Self { Self::new( ByteStreamSource::File(file), span, - interrupt, + signals, ByteStreamType::Unknown, ) } @@ -254,7 +254,7 @@ impl ByteStream { Self::new( ByteStreamSource::Child(Box::new(child)), span, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Unknown, ) } @@ -269,7 +269,7 @@ impl ByteStream { Ok(Self::new( source, span, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Unknown, )) } @@ -278,7 +278,7 @@ impl ByteStream { /// when called, and returns `Ok(false)` on end of stream. pub fn from_fn( span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, generator: impl FnMut(&mut Vec) -> Result + Send + 'static, ) -> Self { @@ -288,7 +288,7 @@ impl ByteStream { generator, }, span, - interrupt, + signals, type_, ) } @@ -301,7 +301,7 @@ impl ByteStream { /// Create a new [`ByteStream`] from an [`Iterator`] of bytes slices. /// /// The returned [`ByteStream`] will have a [`ByteStreamSource`] of `Read`. - pub fn from_iter(iter: I, span: Span, interrupt: Interrupt, type_: ByteStreamType) -> Self + pub fn from_iter(iter: I, span: Span, signals: Signals, type_: ByteStreamType) -> Self where I: IntoIterator, I::IntoIter: Send + 'static, @@ -309,7 +309,7 @@ impl ByteStream { { let iter = iter.into_iter(); let cursor = Some(Cursor::new(I::Item::default())); - Self::read(ReadIterator { iter, cursor }, span, interrupt, type_) + Self::read(ReadIterator { iter, cursor }, span, signals, type_) } /// Create a new [`ByteStream`] from an [`Iterator`] of [`Result`] bytes slices. @@ -318,7 +318,7 @@ impl ByteStream { pub fn from_result_iter( iter: I, span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, ) -> Self where @@ -328,7 +328,7 @@ impl ByteStream { { let iter = iter.into_iter(); let cursor = Some(Cursor::new(T::default())); - Self::read(ReadResultIterator { iter, cursor }, span, interrupt, type_) + Self::read(ReadResultIterator { iter, cursor }, span, signals, type_) } /// Set the known size, in number of bytes, of the [`ByteStream`]. @@ -373,7 +373,7 @@ impl ByteStream { Some(Reader { reader: BufReader::new(reader), span: self.span, - interrupt: self.interrupt, + signals: self.signals, }) } @@ -389,7 +389,7 @@ impl ByteStream { Some(Lines { reader: BufReader::new(reader), span: self.span, - interrupt: self.interrupt, + signals: self.signals, }) } @@ -410,7 +410,7 @@ impl ByteStream { /// then the stream is considered empty and `None` will be returned. pub fn chunks(self) -> Option { let reader = self.stream.reader()?; - Some(Chunks::new(reader, self.span, self.interrupt, self.type_)) + Some(Chunks::new(reader, self.span, self.signals, self.type_)) } /// Convert the [`ByteStream`] into its inner [`ByteStreamSource`]. @@ -547,7 +547,7 @@ impl ByteStream { pub fn drain(self) -> Result, ShellError> { match self.stream { ByteStreamSource::Read(read) => { - copy_with_interrupt(read, io::sink(), self.span, &self.interrupt)?; + copy_with_signals(read, io::sink(), self.span, &self.signals)?; Ok(None) } ByteStreamSource::File(_) => Ok(None), @@ -573,14 +573,14 @@ impl ByteStream { /// then the [`ExitStatus`] of the [`ChildProcess`] is returned. pub fn write_to(self, dest: impl Write) -> Result, ShellError> { let span = self.span; - let interrupt = &self.interrupt; + let signals = &self.signals; match self.stream { ByteStreamSource::Read(read) => { - copy_with_interrupt(read, dest, span, interrupt)?; + copy_with_signals(read, dest, span, signals)?; Ok(None) } ByteStreamSource::File(file) => { - copy_with_interrupt(file, dest, span, interrupt)?; + copy_with_signals(file, dest, span, signals)?; Ok(None) } ByteStreamSource::Child(mut child) => { @@ -592,10 +592,10 @@ impl ByteStream { if let Some(stdout) = child.stdout.take() { match stdout { ChildPipe::Pipe(pipe) => { - copy_with_interrupt(pipe, dest, span, interrupt)?; + copy_with_signals(pipe, dest, span, signals)?; } ChildPipe::Tee(tee) => { - copy_with_interrupt(tee, dest, span, interrupt)?; + copy_with_signals(tee, dest, span, signals)?; } } } @@ -610,21 +610,21 @@ impl ByteStream { stderr: &OutDest, ) -> Result, ShellError> { let span = self.span; - let interrupt = &self.interrupt; + let signals = &self.signals; match self.stream { ByteStreamSource::Read(read) => { - write_to_out_dest(read, stdout, true, span, interrupt)?; + write_to_out_dest(read, stdout, true, span, signals)?; Ok(None) } ByteStreamSource::File(file) => { match stdout { OutDest::Pipe | OutDest::Capture | OutDest::Null => {} OutDest::Inherit => { - copy_with_interrupt(file, io::stdout(), span, interrupt)?; + copy_with_signals(file, io::stdout(), span, signals)?; } OutDest::File(f) => { - copy_with_interrupt(file, f.as_ref(), span, interrupt)?; + copy_with_signals(file, f.as_ref(), span, signals)?; } } Ok(None) @@ -638,20 +638,20 @@ impl ByteStream { .name("stderr writer".into()) .spawn_scoped(s, || match err { ChildPipe::Pipe(pipe) => { - write_to_out_dest(pipe, stderr, false, span, interrupt) + write_to_out_dest(pipe, stderr, false, span, signals) } ChildPipe::Tee(tee) => { - write_to_out_dest(tee, stderr, false, span, interrupt) + write_to_out_dest(tee, stderr, false, span, signals) } }) .err_span(span); match out { ChildPipe::Pipe(pipe) => { - write_to_out_dest(pipe, stdout, true, span, interrupt) + write_to_out_dest(pipe, stdout, true, span, signals) } ChildPipe::Tee(tee) => { - write_to_out_dest(tee, stdout, true, span, interrupt) + write_to_out_dest(tee, stdout, true, span, signals) } }?; @@ -667,11 +667,11 @@ impl ByteStream { } (Some(out), None) => { // single output stream, we can consume directly - write_to_out_dest(out, stdout, true, span, interrupt)?; + write_to_out_dest(out, stdout, true, span, signals)?; } (None, Some(err)) => { // single output stream, we can consume directly - write_to_out_dest(err, stderr, false, span, interrupt)?; + write_to_out_dest(err, stderr, false, span, signals)?; } (None, None) => {} } @@ -744,7 +744,7 @@ where pub struct Reader { reader: BufReader, span: Span, - interrupt: Interrupt, + signals: Signals, } impl Reader { @@ -755,7 +755,7 @@ impl Reader { impl Read for Reader { fn read(&mut self, buf: &mut [u8]) -> io::Result { - self.interrupt.check(self.span)?; + self.signals.check(self.span)?; self.reader.read(buf) } } @@ -773,7 +773,7 @@ impl BufRead for Reader { pub struct Lines { reader: BufReader, span: Span, - interrupt: Interrupt, + signals: Signals, } impl Lines { @@ -786,7 +786,7 @@ impl Iterator for Lines { type Item = Result; fn next(&mut self) -> Option { - if self.interrupt.triggered() { + if self.signals.interrupted() { None } else { let mut buf = Vec::new(); @@ -815,18 +815,18 @@ pub struct Chunks { pos: u64, error: bool, span: Span, - interrupt: Interrupt, + signals: Signals, type_: ByteStreamType, } impl Chunks { - fn new(reader: SourceReader, span: Span, interrupt: Interrupt, type_: ByteStreamType) -> Self { + fn new(reader: SourceReader, span: Span, signals: Signals, type_: ByteStreamType) -> Self { Self { reader: BufReader::new(reader), pos: 0, error: false, span, - interrupt, + signals, type_, } } @@ -906,7 +906,7 @@ impl Iterator for Chunks { type Item = Result; fn next(&mut self) -> Option { - if self.error || self.interrupt.triggered() { + if self.error || self.signals.interrupted() { None } else { match self.type_ { @@ -972,14 +972,14 @@ fn write_to_out_dest( stream: &OutDest, stdout: bool, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result<(), ShellError> { match stream { OutDest::Pipe | OutDest::Capture => return Ok(()), - OutDest::Null => copy_with_interrupt(read, io::sink(), span, interrupt), - OutDest::Inherit if stdout => copy_with_interrupt(read, io::stdout(), span, interrupt), - OutDest::Inherit => copy_with_interrupt(read, io::stderr(), span, interrupt), - OutDest::File(file) => copy_with_interrupt(read, file.as_ref(), span, interrupt), + OutDest::Null => copy_with_signals(read, io::sink(), span, signals), + OutDest::Inherit if stdout => copy_with_signals(read, io::stdout(), span, signals), + OutDest::Inherit => copy_with_signals(read, io::stderr(), span, signals), + OutDest::File(file) => copy_with_signals(read, file.as_ref(), span, signals), }?; Ok(()) } @@ -996,13 +996,13 @@ pub(crate) fn convert_file>(file: impl Into) - const DEFAULT_BUF_SIZE: usize = 8192; -pub fn copy_with_interrupt( +pub fn copy_with_signals( mut reader: impl Read, mut writer: impl Write, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { - if interrupt.is_empty() { + if signals.is_empty() { match io::copy(&mut reader, &mut writer) { Ok(n) => { writer.flush().err_span(span)?; @@ -1018,7 +1018,7 @@ pub fn copy_with_interrupt( // { // return crate::sys::kernel_copy::copy_spec(reader, writer); // } - match generic_copy(&mut reader, &mut writer, span, interrupt) { + match generic_copy(&mut reader, &mut writer, span, signals) { Ok(len) => { writer.flush().err_span(span)?; Ok(len) @@ -1036,12 +1036,12 @@ fn generic_copy( mut reader: impl Read, mut writer: impl Write, span: Span, - interrupt: &Interrupt, + signals: &Signals, ) -> Result { let buf = &mut [0; DEFAULT_BUF_SIZE]; let mut len = 0; loop { - interrupt.check(span)?; + signals.check(span)?; let n = match reader.read(buf) { Ok(0) => break, Ok(n) => n, @@ -1116,7 +1116,7 @@ mod tests { Chunks::new( SourceReader::Read(Box::new(reader)), Span::test_data(), - Interrupt::empty(), + Signals::empty(), type_, ) } diff --git a/crates/nu-protocol/src/pipeline/interrupt.rs b/crates/nu-protocol/src/pipeline/interrupt.rs deleted file mode 100644 index e1927bcd53..0000000000 --- a/crates/nu-protocol/src/pipeline/interrupt.rs +++ /dev/null @@ -1,76 +0,0 @@ -use crate::{ShellError, Span}; -use std::sync::{ - atomic::{AtomicBool, Ordering}, - Arc, -}; - -/// Controls the execution of nushell code. -/// -/// For now, the only purpose of this struct is to check for interruption (ctrl+c or SIGINT). -#[derive(Debug, Clone)] -pub struct Interrupt { - interrupt: Option>, -} - -impl Interrupt { - /// An [`Interrupt`] that is not hooked up to any event/interrupt source. - /// - /// So, this [`Interrupt`] will never be triggered. - pub const EMPTY: Self = Interrupt { interrupt: None }; - - /// Create a new [`Interrupt`] with `ctrlc` as the interrupt source. - /// - /// Once `ctrlc` is set to `true`, [`check`](Self::check) will error - /// and [`triggered`](Self::triggered) will return `true`. - pub fn new(ctrlc: Arc) -> Self { - Self { - interrupt: Some(ctrlc), - } - } - - /// Create [`Interrupt`] that is not hooked up to any event/interrupt source. - /// - /// So, the returned [`Interrupt`] will never be triggered. - /// - /// This should only be used in test code, or if the stream/iterator being created - /// already has an [`Interrupt`]. - pub const fn empty() -> Self { - Self::EMPTY - } - - /// Returns an `Err` if this [`Interrupt`] has been triggered. - /// - /// Otherwise, returns `Ok`. - #[inline] - pub fn check(&self, span: Span) -> Result<(), ShellError> { - #[inline] - #[cold] - fn interrupt_error(span: Span) -> Result<(), ShellError> { - Err(ShellError::Interrupted { span }) - } - - if self.triggered() { - interrupt_error(span) - } else { - Ok(()) - } - } - - /// Returns whether this [`Interrupt`] has been triggered. - #[inline] - pub fn triggered(&self) -> bool { - self.interrupt - .as_deref() - .is_some_and(|b| b.load(Ordering::Relaxed)) - } - - pub(crate) fn is_empty(&self) -> bool { - self.interrupt.is_none() - } - - pub(crate) fn reset(&self) { - if let Some(interrupt) = &self.interrupt { - interrupt.store(false, Ordering::Relaxed); - } - } -} diff --git a/crates/nu-protocol/src/pipeline/list_stream.rs b/crates/nu-protocol/src/pipeline/list_stream.rs index 12ca27b402..997cc3f77b 100644 --- a/crates/nu-protocol/src/pipeline/list_stream.rs +++ b/crates/nu-protocol/src/pipeline/list_stream.rs @@ -1,4 +1,4 @@ -use crate::{Config, Interrupt, PipelineData, ShellError, Span, Value}; +use crate::{Config, PipelineData, ShellError, Signals, Span, Value}; use std::fmt::Debug; pub type ValueIterator = Box + Send + 'static>; @@ -18,10 +18,10 @@ impl ListStream { pub fn new( iter: impl Iterator + Send + 'static, span: Span, - interrupt: Interrupt, + signals: Signals, ) -> Self { Self { - stream: Box::new(InterruptIter::new(iter, interrupt)), + stream: Box::new(InterruptIter::new(iter, signals)), span, } } @@ -66,10 +66,10 @@ impl ListStream { /// E.g., `take`, `filter`, `step_by`, and more. /// /// ``` - /// use nu_protocol::{Interrupt, ListStream, Span, Value}; + /// use nu_protocol::{ListStream, Signals, Span, Value}; /// /// let span = Span::unknown(); - /// let stream = ListStream::new(std::iter::repeat(Value::int(0, span)), span, Interrupt::empty()); + /// let stream = ListStream::new(std::iter::repeat(Value::int(0, span)), span, Signals::empty()); /// let new_stream = stream.modify(|iter| iter.take(100)); /// ``` pub fn modify(self, f: impl FnOnce(ValueIterator) -> I) -> Self @@ -127,12 +127,12 @@ impl Iterator for IntoIter { struct InterruptIter { iter: I, - interrupt: Interrupt, + signals: Signals, } impl InterruptIter { - fn new(iter: I, interrupt: Interrupt) -> Self { - Self { iter, interrupt } + fn new(iter: I, signals: Signals) -> Self { + Self { iter, signals } } } @@ -140,7 +140,7 @@ impl Iterator for InterruptIter { type Item = ::Item; fn next(&mut self) -> Option { - if self.interrupt.triggered() { + if self.signals.interrupted() { None } else { self.iter.next() diff --git a/crates/nu-protocol/src/pipeline/mod.rs b/crates/nu-protocol/src/pipeline/mod.rs index 8fe07cf06b..525806425d 100644 --- a/crates/nu-protocol/src/pipeline/mod.rs +++ b/crates/nu-protocol/src/pipeline/mod.rs @@ -1,13 +1,13 @@ pub mod byte_stream; -mod interrupt; pub mod list_stream; mod metadata; mod out_dest; mod pipeline_data; +mod signals; pub use byte_stream::*; -pub use interrupt::*; pub use list_stream::*; pub use metadata::*; pub use out_dest::*; pub use pipeline_data::*; +pub use signals::*; diff --git a/crates/nu-protocol/src/pipeline/pipeline_data.rs b/crates/nu-protocol/src/pipeline/pipeline_data.rs index 147574973a..a546e90191 100644 --- a/crates/nu-protocol/src/pipeline/pipeline_data.rs +++ b/crates/nu-protocol/src/pipeline/pipeline_data.rs @@ -2,8 +2,8 @@ use crate::{ ast::{Call, PathMember}, engine::{EngineState, Stack}, process::{ChildPipe, ChildProcess, ExitStatus}, - ByteStream, ByteStreamType, Config, ErrSpan, Interrupt, ListStream, OutDest, PipelineMetadata, - Range, ShellError, Span, Type, Value, + ByteStream, ByteStreamType, Config, ErrSpan, ListStream, OutDest, PipelineMetadata, Range, + ShellError, Signals, Span, Type, Value, }; use nu_utils::{stderr_write_all_and_flush, stdout_write_all_and_flush}; use std::io::{Cursor, Read, Write}; @@ -193,21 +193,21 @@ impl PipelineData { let val_span = value.span(); match value { Value::List { vals, .. } => PipelineIteratorInner::ListStream( - ListStream::new(vals.into_iter(), val_span, Interrupt::empty()).into_iter(), + ListStream::new(vals.into_iter(), val_span, Signals::empty()).into_iter(), ), Value::Binary { val, .. } => PipelineIteratorInner::ListStream( ListStream::new( val.into_iter().map(move |x| Value::int(x as i64, val_span)), val_span, - Interrupt::empty(), + Signals::empty(), ) .into_iter(), ), Value::Range { val, .. } => PipelineIteratorInner::ListStream( ListStream::new( - val.into_range_iter(val_span, Interrupt::empty()), + val.into_range_iter(val_span, Signals::empty()), val_span, - Interrupt::empty(), + Signals::empty(), ) .into_iter(), ), @@ -302,7 +302,7 @@ impl PipelineData { } /// Simplified mapper to help with simple values also. For full iterator support use `.into_iter()` instead - pub fn map(self, mut f: F, interrupt: &Interrupt) -> Result + pub fn map(self, mut f: F, signals: &Signals) -> Result where Self: Sized, F: FnMut(Value) -> Value + 'static + Send, @@ -314,11 +314,11 @@ impl PipelineData { Value::List { vals, .. } => vals .into_iter() .map(f) - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), Value::Range { val, .. } => val - .into_range_iter(span, Interrupt::empty()) + .into_range_iter(span, Signals::empty()) .map(f) - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), value => match f(value) { Value::Error { error, .. } => return Err(*error), v => v.into_pipeline_data(), @@ -337,7 +337,7 @@ impl PipelineData { } /// Simplified flatmapper. For full iterator support use `.into_iter()` instead - pub fn flat_map(self, mut f: F, interrupt: &Interrupt) -> Result + pub fn flat_map(self, mut f: F, signals: &Signals) -> Result where Self: Sized, U: IntoIterator + 'static, @@ -352,14 +352,14 @@ impl PipelineData { Value::List { vals, .. } => vals .into_iter() .flat_map(f) - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), Value::Range { val, .. } => val - .into_range_iter(span, Interrupt::empty()) + .into_range_iter(span, Signals::empty()) .flat_map(f) - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), value => f(value) .into_iter() - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), }; Ok(pipeline.set_metadata(metadata)) } @@ -379,14 +379,14 @@ impl PipelineData { }; Ok(iter.into_iter().into_pipeline_data_with_metadata( span, - interrupt.clone(), + signals.clone(), metadata, )) } } } - pub fn filter(self, mut f: F, interrupt: &Interrupt) -> Result + pub fn filter(self, mut f: F, signals: &Signals) -> Result where Self: Sized, F: FnMut(&Value) -> bool + 'static + Send, @@ -399,11 +399,11 @@ impl PipelineData { Value::List { vals, .. } => vals .into_iter() .filter(f) - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), Value::Range { val, .. } => val - .into_range_iter(span, Interrupt::empty()) + .into_range_iter(span, Signals::empty()) .filter(f) - .into_pipeline_data(span, interrupt.clone()), + .into_pipeline_data(span, signals.clone()), value => { if f(&value) { value.into_pipeline_data() @@ -535,7 +535,7 @@ impl PipelineData { } } let range_values: Vec = - val.into_range_iter(span, Interrupt::empty()).collect(); + val.into_range_iter(span, Signals::empty()).collect(); Ok(PipelineData::Value(Value::list(range_values, span), None)) } x => Ok(PipelineData::Value(x, metadata)), @@ -635,13 +635,13 @@ impl IntoIterator for PipelineData { let span = value.span(); match value { Value::List { vals, .. } => PipelineIteratorInner::ListStream( - ListStream::new(vals.into_iter(), span, Interrupt::empty()).into_iter(), + ListStream::new(vals.into_iter(), span, Signals::empty()).into_iter(), ), Value::Range { val, .. } => PipelineIteratorInner::ListStream( ListStream::new( - val.into_range_iter(span, Interrupt::empty()), + val.into_range_iter(span, Signals::empty()), span, - Interrupt::empty(), + Signals::empty(), ) .into_iter(), ), @@ -705,11 +705,11 @@ where } pub trait IntoInterruptiblePipelineData { - fn into_pipeline_data(self, span: Span, interrupt: Interrupt) -> PipelineData; + fn into_pipeline_data(self, span: Span, signals: Signals) -> PipelineData; fn into_pipeline_data_with_metadata( self, span: Span, - interrupt: Interrupt, + signals: Signals, metadata: impl Into>, ) -> PipelineData; } @@ -720,18 +720,18 @@ where I::IntoIter: Send + 'static, ::Item: Into, { - fn into_pipeline_data(self, span: Span, interrupt: Interrupt) -> PipelineData { - ListStream::new(self.into_iter().map(Into::into), span, interrupt).into() + fn into_pipeline_data(self, span: Span, signals: Signals) -> PipelineData { + ListStream::new(self.into_iter().map(Into::into), span, signals).into() } fn into_pipeline_data_with_metadata( self, span: Span, - interrupt: Interrupt, + signals: Signals, metadata: impl Into>, ) -> PipelineData { PipelineData::ListStream( - ListStream::new(self.into_iter().map(Into::into), span, interrupt), + ListStream::new(self.into_iter().map(Into::into), span, signals), metadata.into(), ) } diff --git a/crates/nu-protocol/src/pipeline/signals.rs b/crates/nu-protocol/src/pipeline/signals.rs new file mode 100644 index 0000000000..06ce583c82 --- /dev/null +++ b/crates/nu-protocol/src/pipeline/signals.rs @@ -0,0 +1,76 @@ +use crate::{ShellError, Span}; +use std::sync::{ + atomic::{AtomicBool, Ordering}, + Arc, +}; + +/// Used to check for signals to suspend or terminate the execution of Nushell code. +/// +/// For now, this struct only supports interruption (ctrl+c or SIGINT). +#[derive(Debug, Clone)] +pub struct Signals { + signals: Option>, +} + +impl Signals { + /// A [`Signals`] that is not hooked up to any event/signals source. + /// + /// So, this [`Signals`] will never be interrupted. + pub const EMPTY: Self = Signals { signals: None }; + + /// Create a new [`Signals`] with `ctrlc` as the interrupt source. + /// + /// Once `ctrlc` is set to `true`, [`check`](Self::check) will error + /// and [`interrupted`](Self::interrupted) will return `true`. + pub fn new(ctrlc: Arc) -> Self { + Self { + signals: Some(ctrlc), + } + } + + /// Create a [`Signals`] that is not hooked up to any event/signals source. + /// + /// So, the returned [`Signals`] will never be interrupted. + /// + /// This should only be used in test code, or if the stream/iterator being created + /// already has an underlying [`Signals`]. + pub const fn empty() -> Self { + Self::EMPTY + } + + /// Returns an `Err` if an interrupt has been triggered. + /// + /// Otherwise, returns `Ok`. + #[inline] + pub fn check(&self, span: Span) -> Result<(), ShellError> { + #[inline] + #[cold] + fn interrupt_error(span: Span) -> Result<(), ShellError> { + Err(ShellError::Interrupted { span }) + } + + if self.interrupted() { + interrupt_error(span) + } else { + Ok(()) + } + } + + /// Returns whether an interrupt has been triggered. + #[inline] + pub fn interrupted(&self) -> bool { + self.signals + .as_deref() + .is_some_and(|b| b.load(Ordering::Relaxed)) + } + + pub(crate) fn is_empty(&self) -> bool { + self.signals.is_none() + } + + pub(crate) fn reset(&self) { + if let Some(signals) = &self.signals { + signals.store(false, Ordering::Relaxed); + } + } +} diff --git a/crates/nu-protocol/src/value/mod.rs b/crates/nu-protocol/src/value/mod.rs index 5505f2b590..e57b60c257 100644 --- a/crates/nu-protocol/src/value/mod.rs +++ b/crates/nu-protocol/src/value/mod.rs @@ -23,7 +23,7 @@ use crate::{ ast::{Bits, Boolean, CellPath, Comparison, Math, Operator, PathMember}, did_you_mean, engine::{Closure, EngineState}, - Config, Interrupt, ShellError, Span, Type, + Config, Signals, ShellError, Span, Type, }; use chrono::{DateTime, Datelike, FixedOffset, Locale, TimeZone}; use chrono_humanize::HumanTime; @@ -1018,7 +1018,7 @@ impl Value { } Value::Range { ref val, .. } => { if let Some(item) = val - .into_range_iter(current.span(), Interrupt::empty()) + .into_range_iter(current.span(), Signals::empty()) .nth(*count) { current = item; diff --git a/crates/nu-protocol/src/value/range.rs b/crates/nu-protocol/src/value/range.rs index 969ecafa99..6ec7ce16ad 100644 --- a/crates/nu-protocol/src/value/range.rs +++ b/crates/nu-protocol/src/value/range.rs @@ -1,11 +1,11 @@ //! A Range is an iterator over integers or floats. -use crate::{ast::RangeInclusion, Interrupt, ShellError, Span, Value}; +use crate::{ast::RangeInclusion, ShellError, Signals, Span, Value}; use serde::{Deserialize, Serialize}; use std::{cmp::Ordering, fmt::Display}; mod int_range { - use crate::{ast::RangeInclusion, Interrupt, ShellError, Span, Value}; + use crate::{ast::RangeInclusion, ShellError, Signals, Span, Value}; use serde::{Deserialize, Serialize}; use std::{cmp::Ordering, fmt::Display, ops::Bound}; @@ -111,12 +111,12 @@ mod int_range { } } - pub fn into_range_iter(self, interrupt: Interrupt) -> Iter { + pub fn into_range_iter(self, signals: Signals) -> Iter { Iter { current: Some(self.start), step: self.step, end: self.end, - interrupt, + signals, } } } @@ -190,7 +190,7 @@ mod int_range { current: Option, step: i64, end: Bound, - interrupt: Interrupt, + signals: Signals, } impl Iterator for Iter { @@ -206,7 +206,7 @@ mod int_range { (_, Bound::Unbounded) => true, // will stop once integer overflows }; - if not_end && !self.interrupt.triggered() { + if not_end && !self.signals.interrupted() { self.current = current.checked_add(self.step); Some(current) } else { @@ -221,7 +221,7 @@ mod int_range { } mod float_range { - use crate::{ast::RangeInclusion, IntRange, Interrupt, Range, ShellError, Span, Value}; + use crate::{ast::RangeInclusion, IntRange, Range, ShellError, Signals, Span, Value}; use serde::{Deserialize, Serialize}; use std::{cmp::Ordering, fmt::Display, ops::Bound}; @@ -346,13 +346,13 @@ mod float_range { } } - pub fn into_range_iter(self, interrupt: Interrupt) -> Iter { + pub fn into_range_iter(self, signals: Signals) -> Iter { Iter { start: self.start, step: self.step, end: self.end, iter: Some(0), - interrupt, + signals, } } } @@ -458,7 +458,7 @@ mod float_range { step: f64, end: Bound, iter: Option, - interrupt: Interrupt, + signals: Signals, } impl Iterator for Iter { @@ -476,7 +476,7 @@ mod float_range { (_, Bound::Unbounded) => current.is_finite(), }; - if not_end && !self.interrupt.triggered() { + if not_end && !self.signals.interrupted() { self.iter = iter.checked_add(1); Some(current) } else { @@ -530,10 +530,10 @@ impl Range { } } - pub fn into_range_iter(self, span: Span, interrupt: Interrupt) -> Iter { + pub fn into_range_iter(self, span: Span, signals: Signals) -> Iter { match self { - Range::IntRange(range) => Iter::IntIter(range.into_range_iter(interrupt), span), - Range::FloatRange(range) => Iter::FloatIter(range.into_range_iter(interrupt), span), + Range::IntRange(range) => Iter::IntIter(range.into_range_iter(signals), span), + Range::FloatRange(range) => Iter::FloatIter(range.into_range_iter(signals), span), } } } diff --git a/crates/nu-table/src/types/expanded.rs b/crates/nu-table/src/types/expanded.rs index af2381ae34..668e5ea25c 100644 --- a/crates/nu-table/src/types/expanded.rs +++ b/crates/nu-table/src/types/expanded.rs @@ -102,7 +102,7 @@ fn expanded_table_list(input: &[Value], cfg: Cfg<'_>) -> TableResult { } for (row, item) in input.iter().enumerate() { - cfg.opts.interrupt.check(cfg.opts.span)?; + cfg.opts.signals.check(cfg.opts.span)?; if let Value::Error { error, .. } = item { return Err(*error.clone()); @@ -141,7 +141,7 @@ fn expanded_table_list(input: &[Value], cfg: Cfg<'_>) -> TableResult { } for (row, item) in input.iter().enumerate() { - cfg.opts.interrupt.check(cfg.opts.span)?; + cfg.opts.signals.check(cfg.opts.span)?; if let Value::Error { error, .. } = item { return Err(*error.clone()); @@ -226,7 +226,7 @@ fn expanded_table_list(input: &[Value], cfg: Cfg<'_>) -> TableResult { } for (row, item) in input.iter().enumerate() { - cfg.opts.interrupt.check(cfg.opts.span)?; + cfg.opts.signals.check(cfg.opts.span)?; if let Value::Error { error, .. } = item { return Err(*error.clone()); @@ -347,7 +347,7 @@ fn expanded_table_kv(record: &Record, cfg: Cfg<'_>) -> StringResult { let mut data = Vec::with_capacity(record.len()); for (key, value) in record { - cfg.opts.interrupt.check(cfg.opts.span)?; + cfg.opts.signals.check(cfg.opts.span)?; let (value, is_expanded) = match expand_table_value(value, value_width, &cfg)? { Some(val) => val, diff --git a/crates/nu-table/src/types/general.rs b/crates/nu-table/src/types/general.rs index 42fd821d67..66048267d7 100644 --- a/crates/nu-table/src/types/general.rs +++ b/crates/nu-table/src/types/general.rs @@ -43,7 +43,7 @@ fn create_table(input: &[Value], opts: TableOpts<'_>) -> Result, fn kv_table(record: &Record, opts: TableOpts<'_>) -> StringResult { let mut data = vec![Vec::with_capacity(2); record.len()]; for ((column, value), row) in record.iter().zip(data.iter_mut()) { - opts.interrupt.check(opts.span)?; + opts.signals.check(opts.span)?; let value = nu_value_to_string_colored(value, opts.config, opts.style_computer); @@ -121,7 +121,7 @@ fn to_table_with_header( } for (row, item) in input.iter().enumerate() { - opts.interrupt.check(opts.span)?; + opts.signals.check(opts.span)?; if let Value::Error { error, .. } = item { return Err(*error.clone()); @@ -154,7 +154,7 @@ fn to_table_with_no_header( table.set_index_style(get_index_style(opts.style_computer)); for (row, item) in input.iter().enumerate() { - opts.interrupt.check(opts.span)?; + opts.signals.check(opts.span)?; if let Value::Error { error, .. } = item { return Err(*error.clone()); diff --git a/crates/nu-table/src/types/mod.rs b/crates/nu-table/src/types/mod.rs index c1519a582c..163e4b0c81 100644 --- a/crates/nu-table/src/types/mod.rs +++ b/crates/nu-table/src/types/mod.rs @@ -8,7 +8,7 @@ pub use general::JustTable; use crate::{common::INDEX_COLUMN_NAME, NuTable}; use nu_color_config::StyleComputer; -use nu_protocol::{Config, Interrupt, Span, TableIndexMode, TableMode}; +use nu_protocol::{Config, Signals, Span, TableIndexMode, TableMode}; pub struct TableOutput { pub table: NuTable, @@ -28,7 +28,7 @@ impl TableOutput { #[derive(Debug, Clone)] pub struct TableOpts<'a> { - interrupt: &'a Interrupt, + signals: &'a Signals, config: &'a Config, style_computer: &'a StyleComputer<'a>, span: Span, @@ -44,7 +44,7 @@ impl<'a> TableOpts<'a> { pub fn new( config: &'a Config, style_computer: &'a StyleComputer<'a>, - interrupt: &'a Interrupt, + signals: &'a Signals, span: Span, width: usize, indent: (usize, usize), @@ -53,7 +53,7 @@ impl<'a> TableOpts<'a> { index_remove: bool, ) -> Self { Self { - interrupt, + signals, config, style_computer, span, diff --git a/crates/nu_plugin_example/src/commands/collect_bytes.rs b/crates/nu_plugin_example/src/commands/collect_bytes.rs index 3b25b5d108..92cf1ac3e8 100644 --- a/crates/nu_plugin_example/src/commands/collect_bytes.rs +++ b/crates/nu_plugin_example/src/commands/collect_bytes.rs @@ -1,6 +1,6 @@ use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand}; use nu_protocol::{ - ByteStream, ByteStreamType, Category, Example, Interrupt, LabeledError, PipelineData, + ByteStream, ByteStreamType, Category, Example, Signals, LabeledError, PipelineData, Signature, Type, Value, }; @@ -52,7 +52,7 @@ impl PluginCommand for CollectBytes { ByteStream::from_result_iter( input.into_iter().map(Value::coerce_into_binary), call.head, - Interrupt::empty(), + Signals::empty(), ByteStreamType::Unknown, ), None, diff --git a/crates/nu_plugin_example/src/commands/generate.rs b/crates/nu_plugin_example/src/commands/generate.rs index 14ec8f0cc5..775cfb019c 100644 --- a/crates/nu_plugin_example/src/commands/generate.rs +++ b/crates/nu_plugin_example/src/commands/generate.rs @@ -1,6 +1,6 @@ use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand}; use nu_protocol::{ - Category, Example, Interrupt, IntoInterruptiblePipelineData, LabeledError, PipelineData, + Category, Example, Signals, IntoInterruptiblePipelineData, LabeledError, PipelineData, Signature, SyntaxShape, Type, Value, }; @@ -85,7 +85,7 @@ impl PluginCommand for Generate { }) .map(|result| result.unwrap_or_else(|err| Value::error(err, head))) }) - .into_pipeline_data(head, Interrupt::empty())) + .into_pipeline_data(head, Signals::empty())) } } diff --git a/crates/nu_plugin_example/src/commands/seq.rs b/crates/nu_plugin_example/src/commands/seq.rs index 64c0925cab..4dc8146508 100644 --- a/crates/nu_plugin_example/src/commands/seq.rs +++ b/crates/nu_plugin_example/src/commands/seq.rs @@ -1,6 +1,6 @@ use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand}; use nu_protocol::{ - Category, Example, Interrupt, LabeledError, ListStream, PipelineData, Signature, SyntaxShape, + Category, Example, Signals, LabeledError, ListStream, PipelineData, Signature, SyntaxShape, Type, Value, }; @@ -55,7 +55,7 @@ impl PluginCommand for Seq { let first: i64 = call.req(0)?; let last: i64 = call.req(1)?; let iter = (first..=last).map(move |number| Value::int(number, head)); - Ok(ListStream::new(iter, head, Interrupt::empty()).into()) + Ok(ListStream::new(iter, head, Signals::empty()).into()) } } diff --git a/src/signals.rs b/src/signals.rs index 0eacdb5370..bb3539b95e 100644 --- a/src/signals.rs +++ b/src/signals.rs @@ -1,4 +1,4 @@ -use nu_protocol::{engine::EngineState, Interrupt}; +use nu_protocol::{engine::EngineState, Signals}; use std::sync::{ atomic::{AtomicBool, Ordering}, Arc, @@ -6,7 +6,7 @@ use std::sync::{ pub(crate) fn ctrlc_protection(engine_state: &mut EngineState) { let interrupt = Arc::new(AtomicBool::new(false)); - engine_state.set_interrupt(Interrupt::new(interrupt.clone())); + engine_state.set_signals(Signals::new(interrupt.clone())); ctrlc::set_handler(move || { interrupt.store(true, Ordering::Relaxed); })