diff --git a/Cargo.lock b/Cargo.lock index e01e670a1b83..ba1cfae3d2b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2755,6 +2755,7 @@ dependencies = [ "rstest 0.17.0", "sysinfo 0.28.2", "thiserror", + "unicode-segmentation", ] [[package]] @@ -2772,7 +2773,6 @@ dependencies = [ "nu-test-support", "nu-utils", "shadow-rs", - "unicode-segmentation", ] [[package]] @@ -2861,7 +2861,6 @@ dependencies = [ "quickcheck_macros", "rand 0.8.5", "rayon", - "reedline", "regex", "roxmltree", "rstest 0.17.0", diff --git a/crates/nu-cli/Cargo.toml b/crates/nu-cli/Cargo.toml index e044ffc807b7..bfb3ad10ee20 100644 --- a/crates/nu-cli/Cargo.toml +++ b/crates/nu-cli/Cargo.toml @@ -38,6 +38,7 @@ miette = { version = "5.7.0", features = ["fancy-no-backtrace"] } percent-encoding = "2" sysinfo = "0.28.2" thiserror = "1.0.31" +unicode-segmentation = "1.10.0" [features] plugin = [] diff --git a/crates/nu-cmd-lang/src/core_commands/commandline.rs b/crates/nu-cli/src/commands/commandline.rs similarity index 100% rename from crates/nu-cmd-lang/src/core_commands/commandline.rs rename to crates/nu-cli/src/commands/commandline.rs diff --git a/crates/nu-cli/src/commands/default_context.rs b/crates/nu-cli/src/commands/default_context.rs new file mode 100644 index 000000000000..8c4ff5d30b97 --- /dev/null +++ b/crates/nu-cli/src/commands/default_context.rs @@ -0,0 +1,33 @@ +use nu_protocol::engine::{EngineState, StateWorkingSet}; + +use crate::commands::*; + +pub fn add_cli_context(mut engine_state: EngineState) -> EngineState { + let delta = { + let mut working_set = StateWorkingSet::new(&engine_state); + + macro_rules! bind_command { + ( $( $command:expr ),* $(,)? ) => { + $( working_set.add_decl(Box::new($command)); )* + }; + } + + bind_command! { + Commandline, + History, + HistorySession, + Keybindings, + KeybindingsDefault, + KeybindingsList, + KeybindingsListen, + }; + + working_set.render() + }; + + if let Err(err) = engine_state.merge_delta(delta) { + eprintln!("Error creating default context: {err:?}"); + } + + engine_state +} diff --git a/crates/nu-command/src/misc/history.rs b/crates/nu-cli/src/commands/history.rs similarity index 100% rename from crates/nu-command/src/misc/history.rs rename to crates/nu-cli/src/commands/history.rs diff --git a/crates/nu-command/src/misc/history_session.rs b/crates/nu-cli/src/commands/history_session.rs similarity index 100% rename from crates/nu-command/src/misc/history_session.rs rename to crates/nu-cli/src/commands/history_session.rs diff --git a/crates/nu-command/src/platform/reedline_commands/keybindings.rs b/crates/nu-cli/src/commands/keybindings.rs similarity index 100% rename from crates/nu-command/src/platform/reedline_commands/keybindings.rs rename to crates/nu-cli/src/commands/keybindings.rs diff --git a/crates/nu-command/src/platform/reedline_commands/keybindings_default.rs b/crates/nu-cli/src/commands/keybindings_default.rs similarity index 100% rename from crates/nu-command/src/platform/reedline_commands/keybindings_default.rs rename to crates/nu-cli/src/commands/keybindings_default.rs diff --git a/crates/nu-command/src/platform/reedline_commands/keybindings_list.rs b/crates/nu-cli/src/commands/keybindings_list.rs similarity index 100% rename from crates/nu-command/src/platform/reedline_commands/keybindings_list.rs rename to crates/nu-cli/src/commands/keybindings_list.rs diff --git a/crates/nu-command/src/platform/reedline_commands/keybindings_listen.rs b/crates/nu-cli/src/commands/keybindings_listen.rs similarity index 96% rename from crates/nu-command/src/platform/reedline_commands/keybindings_listen.rs rename to crates/nu-cli/src/commands/keybindings_listen.rs index 6e38799a4a48..886772980a29 100644 --- a/crates/nu-command/src/platform/reedline_commands/keybindings_listen.rs +++ b/crates/nu-cli/src/commands/keybindings_listen.rs @@ -144,14 +144,3 @@ fn print_events_helper(event: Event) -> Result { Ok(record) } } - -#[cfg(test)] -mod tests { - use crate::KeybindingsListen; - - #[test] - fn examples_work_as_expected() { - use crate::test_examples; - test_examples(KeybindingsListen {}) - } -} diff --git a/crates/nu-command/src/platform/reedline_commands/mod.rs b/crates/nu-cli/src/commands/mod.rs similarity index 54% rename from crates/nu-command/src/platform/reedline_commands/mod.rs rename to crates/nu-cli/src/commands/mod.rs index b063d9ea269b..00580ebafdae 100644 --- a/crates/nu-command/src/platform/reedline_commands/mod.rs +++ b/crates/nu-cli/src/commands/mod.rs @@ -1,9 +1,18 @@ +mod commandline; +mod default_context; +mod history; +mod history_session; mod keybindings; mod keybindings_default; mod keybindings_list; mod keybindings_listen; +pub use commandline::Commandline; +pub use history::History; +pub use history_session::HistorySession; pub use keybindings::Keybindings; pub use keybindings_default::KeybindingsDefault; pub use keybindings_list::KeybindingsList; pub use keybindings_listen::KeybindingsListen; + +pub use default_context::add_cli_context; diff --git a/crates/nu-cli/src/commands.rs b/crates/nu-cli/src/eval_cmds.rs similarity index 100% rename from crates/nu-cli/src/commands.rs rename to crates/nu-cli/src/eval_cmds.rs diff --git a/crates/nu-cli/src/lib.rs b/crates/nu-cli/src/lib.rs index 890124d59954..368802a47e4f 100644 --- a/crates/nu-cli/src/lib.rs +++ b/crates/nu-cli/src/lib.rs @@ -1,6 +1,7 @@ mod commands; mod completions; mod config_files; +mod eval_cmds; mod eval_file; mod menus; mod nu_highlight; @@ -13,9 +14,10 @@ mod syntax_highlight; mod util; mod validation; -pub use commands::evaluate_commands; +pub use commands::add_cli_context; pub use completions::{FileCompletion, NuCompleter}; pub use config_files::eval_config_contents; +pub use eval_cmds::evaluate_commands; pub use eval_file::evaluate_file; pub use menus::{DescriptionMenu, NuHelpCompleter}; pub use nu_command::util::get_init_cwd; diff --git a/crates/nu-cmd-lang/Cargo.toml b/crates/nu-cmd-lang/Cargo.toml index 01b76e0a412a..673295671e90 100644 --- a/crates/nu-cmd-lang/Cargo.toml +++ b/crates/nu-cmd-lang/Cargo.toml @@ -24,7 +24,6 @@ fancy-regex = "0.11.0" itertools = "0.10.0" log = "0.4.14" shadow-rs = { version = "0.21.0", default-features = false } -unicode-segmentation = "1.10.0" [build-dependencies] shadow-rs = { version = "0.21.0", default-features = false } diff --git a/crates/nu-cmd-lang/src/core_commands/mod.rs b/crates/nu-cmd-lang/src/core_commands/mod.rs index 3a04492bbcf8..4bc4ba8a5ed2 100644 --- a/crates/nu-cmd-lang/src/core_commands/mod.rs +++ b/crates/nu-cmd-lang/src/core_commands/mod.rs @@ -1,7 +1,6 @@ mod alias; mod break_; mod collect; -mod commandline; mod const_; mod continue_; mod def; @@ -43,7 +42,6 @@ mod while_; pub use alias::Alias; pub use break_::Break; pub use collect::Collect; -pub use commandline::Commandline; pub use const_::Const; pub use continue_::Continue; pub use def::Def; diff --git a/crates/nu-cmd-lang/src/default_context.rs b/crates/nu-cmd-lang/src/default_context.rs index aa2b5b0a1c78..ca224da94d3e 100644 --- a/crates/nu-cmd-lang/src/default_context.rs +++ b/crates/nu-cmd-lang/src/default_context.rs @@ -19,7 +19,6 @@ pub fn create_default_context() -> EngineState { Alias, Break, Collect, - Commandline, Const, Continue, Def, diff --git a/crates/nu-command/Cargo.toml b/crates/nu-command/Cargo.toml index ee60723e713b..99c9cfbdbcbc 100644 --- a/crates/nu-command/Cargo.toml +++ b/crates/nu-command/Cargo.toml @@ -85,7 +85,6 @@ serde_yaml = "0.9.4" sha2 = "0.10.0" # Disable default features b/c the default features build Git (very slow to compile) percent-encoding = "2.2.0" -reedline = { version = "0.18.0", features = ["bashisms", "sqlite"] } rusqlite = { version = "0.28.0", features = ["bundled"], optional = true } sqlparser = { version = "0.32.0", features = ["serde"], optional = true } sysinfo = "0.28.2" diff --git a/crates/nu-command/src/default_context.rs b/crates/nu-command/src/default_context.rs index 58b6a3d10539..dd1e719ee313 100644 --- a/crates/nu-command/src/default_context.rs +++ b/crates/nu-command/src/default_context.rs @@ -102,9 +102,7 @@ pub fn create_default_context() -> EngineState { // Misc bind_command! { - History, Tutor, - HistorySession, }; // Path @@ -256,12 +254,8 @@ pub fn create_default_context() -> EngineState { AnsiLink, Clear, Du, - KeybindingsDefault, Input, - KeybindingsListen, - Keybindings, Kill, - KeybindingsList, Sleep, TermSize, }; diff --git a/crates/nu-command/src/misc/mod.rs b/crates/nu-command/src/misc/mod.rs index 02d6827244ff..76df7f693458 100644 --- a/crates/nu-command/src/misc/mod.rs +++ b/crates/nu-command/src/misc/mod.rs @@ -1,7 +1,3 @@ -mod history; -mod history_session; mod tutor; -pub use history::History; -pub use history_session::HistorySession; pub use tutor::Tutor; diff --git a/crates/nu-command/src/platform/mod.rs b/crates/nu-command/src/platform/mod.rs index d1cf60141acb..46a5f898b617 100644 --- a/crates/nu-command/src/platform/mod.rs +++ b/crates/nu-command/src/platform/mod.rs @@ -4,7 +4,6 @@ mod dir_info; mod du; mod input; mod kill; -mod reedline_commands; mod sleep; mod term_size; @@ -14,6 +13,5 @@ pub use dir_info::{DirBuilder, DirInfo, FileInfo}; pub use du::Du; pub use input::Input; pub use kill::Kill; -pub use reedline_commands::{Keybindings, KeybindingsDefault, KeybindingsList, KeybindingsListen}; pub use sleep::Sleep; pub use term_size::TermSize; diff --git a/src/main.rs b/src/main.rs index 1f64e2c191a4..b1d1f8fb953e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,7 +42,7 @@ fn main() -> Result<()> { // Get initial current working directory. let init_cwd = get_init_cwd(); - let mut engine_state = create_default_context(); + let mut engine_state = nu_cli::add_cli_context(create_default_context()); // Custom additions let delta = { diff --git a/src/test_bins.rs b/src/test_bins.rs index a9929de9f1a7..536465034a4c 100644 --- a/src/test_bins.rs +++ b/src/test_bins.rs @@ -172,7 +172,7 @@ pub fn nu_repl() { let cwd = std::env::current_dir().expect("Could not get current working directory."); let source_lines = args(); - let mut engine_state = create_default_context(); + let mut engine_state = nu_cli::add_cli_context(create_default_context()); let mut stack = Stack::new(); stack.add_env_var("PWD".to_string(), Value::test_string(cwd.to_string_lossy()));