mirror of
https://github.com/nushell/nushell
synced 2024-12-27 05:23:11 +00:00
Move CLI related commands to nu-cli
(#8832)
# Description Part of the larger cratification effort. Moves all `reedline` or shell line editor specific commands to `nu-cli`. ## From `nu-cmd-lang`: - `commandline` - This shouldn't have moved there. Doesn't directly depend on reedline but assumes parts in the engine state that are specific to the use of reedline or a REPL ## From `nu-command`: - `keybindings` and subcommands - `keybindings default` - `keybindings list` - `keybindings listen` - very `reedline` specific - `history` - needs `reedline` - `history session` ## internal use Instead of having a separate `create_default_context()` that calls `nu-command`'s `create_default_context()`, I added a `add_cli_context()` that updates an `EngineState` # User-Facing Changes None ## Build time comparison `cargo build --timings` from a `cargo clean --profile dev` ### total main: 64 secs this: 59 secs ### `nu-command` build time branch | total| codegen | fraction ---|---|---|--- main | 14.0s | 6.2s | (44%) this | 12.5s | 5.5s | (44%) `nu-cli` depends on `nu-command` at the moment. Thus it is built during the code-gen phase of `nu-command` (on 16 virtual cores) # Tests + Formatting I removed the `test_example()` facilities for now as we had not run any of the commands in an `Example` test and importing the right context for those tests seemed more of a hassle than the duplicated `test_examples()` implementations in `nu-cmd-lang` and `nu-command`
This commit is contained in:
parent
58b96fdede
commit
57510f2fd2
22 changed files with 49 additions and 33 deletions
3
Cargo.lock
generated
3
Cargo.lock
generated
|
@ -2755,6 +2755,7 @@ dependencies = [
|
||||||
"rstest 0.17.0",
|
"rstest 0.17.0",
|
||||||
"sysinfo 0.28.2",
|
"sysinfo 0.28.2",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
"unicode-segmentation",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2772,7 +2773,6 @@ dependencies = [
|
||||||
"nu-test-support",
|
"nu-test-support",
|
||||||
"nu-utils",
|
"nu-utils",
|
||||||
"shadow-rs",
|
"shadow-rs",
|
||||||
"unicode-segmentation",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2861,7 +2861,6 @@ dependencies = [
|
||||||
"quickcheck_macros",
|
"quickcheck_macros",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"rayon",
|
"rayon",
|
||||||
"reedline",
|
|
||||||
"regex",
|
"regex",
|
||||||
"roxmltree",
|
"roxmltree",
|
||||||
"rstest 0.17.0",
|
"rstest 0.17.0",
|
||||||
|
|
|
@ -38,6 +38,7 @@ miette = { version = "5.7.0", features = ["fancy-no-backtrace"] }
|
||||||
percent-encoding = "2"
|
percent-encoding = "2"
|
||||||
sysinfo = "0.28.2"
|
sysinfo = "0.28.2"
|
||||||
thiserror = "1.0.31"
|
thiserror = "1.0.31"
|
||||||
|
unicode-segmentation = "1.10.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
plugin = []
|
plugin = []
|
||||||
|
|
33
crates/nu-cli/src/commands/default_context.rs
Normal file
33
crates/nu-cli/src/commands/default_context.rs
Normal file
|
@ -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
|
||||||
|
}
|
|
@ -144,14 +144,3 @@ fn print_events_helper(event: Event) -> Result<Value, ShellError> {
|
||||||
Ok(record)
|
Ok(record)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use crate::KeybindingsListen;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn examples_work_as_expected() {
|
|
||||||
use crate::test_examples;
|
|
||||||
test_examples(KeybindingsListen {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +1,18 @@
|
||||||
|
mod commandline;
|
||||||
|
mod default_context;
|
||||||
|
mod history;
|
||||||
|
mod history_session;
|
||||||
mod keybindings;
|
mod keybindings;
|
||||||
mod keybindings_default;
|
mod keybindings_default;
|
||||||
mod keybindings_list;
|
mod keybindings_list;
|
||||||
mod keybindings_listen;
|
mod keybindings_listen;
|
||||||
|
|
||||||
|
pub use commandline::Commandline;
|
||||||
|
pub use history::History;
|
||||||
|
pub use history_session::HistorySession;
|
||||||
pub use keybindings::Keybindings;
|
pub use keybindings::Keybindings;
|
||||||
pub use keybindings_default::KeybindingsDefault;
|
pub use keybindings_default::KeybindingsDefault;
|
||||||
pub use keybindings_list::KeybindingsList;
|
pub use keybindings_list::KeybindingsList;
|
||||||
pub use keybindings_listen::KeybindingsListen;
|
pub use keybindings_listen::KeybindingsListen;
|
||||||
|
|
||||||
|
pub use default_context::add_cli_context;
|
|
@ -1,6 +1,7 @@
|
||||||
mod commands;
|
mod commands;
|
||||||
mod completions;
|
mod completions;
|
||||||
mod config_files;
|
mod config_files;
|
||||||
|
mod eval_cmds;
|
||||||
mod eval_file;
|
mod eval_file;
|
||||||
mod menus;
|
mod menus;
|
||||||
mod nu_highlight;
|
mod nu_highlight;
|
||||||
|
@ -13,9 +14,10 @@ mod syntax_highlight;
|
||||||
mod util;
|
mod util;
|
||||||
mod validation;
|
mod validation;
|
||||||
|
|
||||||
pub use commands::evaluate_commands;
|
pub use commands::add_cli_context;
|
||||||
pub use completions::{FileCompletion, NuCompleter};
|
pub use completions::{FileCompletion, NuCompleter};
|
||||||
pub use config_files::eval_config_contents;
|
pub use config_files::eval_config_contents;
|
||||||
|
pub use eval_cmds::evaluate_commands;
|
||||||
pub use eval_file::evaluate_file;
|
pub use eval_file::evaluate_file;
|
||||||
pub use menus::{DescriptionMenu, NuHelpCompleter};
|
pub use menus::{DescriptionMenu, NuHelpCompleter};
|
||||||
pub use nu_command::util::get_init_cwd;
|
pub use nu_command::util::get_init_cwd;
|
||||||
|
|
|
@ -24,7 +24,6 @@ fancy-regex = "0.11.0"
|
||||||
itertools = "0.10.0"
|
itertools = "0.10.0"
|
||||||
log = "0.4.14"
|
log = "0.4.14"
|
||||||
shadow-rs = { version = "0.21.0", default-features = false }
|
shadow-rs = { version = "0.21.0", default-features = false }
|
||||||
unicode-segmentation = "1.10.0"
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
shadow-rs = { version = "0.21.0", default-features = false }
|
shadow-rs = { version = "0.21.0", default-features = false }
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
mod alias;
|
mod alias;
|
||||||
mod break_;
|
mod break_;
|
||||||
mod collect;
|
mod collect;
|
||||||
mod commandline;
|
|
||||||
mod const_;
|
mod const_;
|
||||||
mod continue_;
|
mod continue_;
|
||||||
mod def;
|
mod def;
|
||||||
|
@ -43,7 +42,6 @@ mod while_;
|
||||||
pub use alias::Alias;
|
pub use alias::Alias;
|
||||||
pub use break_::Break;
|
pub use break_::Break;
|
||||||
pub use collect::Collect;
|
pub use collect::Collect;
|
||||||
pub use commandline::Commandline;
|
|
||||||
pub use const_::Const;
|
pub use const_::Const;
|
||||||
pub use continue_::Continue;
|
pub use continue_::Continue;
|
||||||
pub use def::Def;
|
pub use def::Def;
|
||||||
|
|
|
@ -19,7 +19,6 @@ pub fn create_default_context() -> EngineState {
|
||||||
Alias,
|
Alias,
|
||||||
Break,
|
Break,
|
||||||
Collect,
|
Collect,
|
||||||
Commandline,
|
|
||||||
Const,
|
Const,
|
||||||
Continue,
|
Continue,
|
||||||
Def,
|
Def,
|
||||||
|
|
|
@ -85,7 +85,6 @@ serde_yaml = "0.9.4"
|
||||||
sha2 = "0.10.0"
|
sha2 = "0.10.0"
|
||||||
# Disable default features b/c the default features build Git (very slow to compile)
|
# Disable default features b/c the default features build Git (very slow to compile)
|
||||||
percent-encoding = "2.2.0"
|
percent-encoding = "2.2.0"
|
||||||
reedline = { version = "0.18.0", features = ["bashisms", "sqlite"] }
|
|
||||||
rusqlite = { version = "0.28.0", features = ["bundled"], optional = true }
|
rusqlite = { version = "0.28.0", features = ["bundled"], optional = true }
|
||||||
sqlparser = { version = "0.32.0", features = ["serde"], optional = true }
|
sqlparser = { version = "0.32.0", features = ["serde"], optional = true }
|
||||||
sysinfo = "0.28.2"
|
sysinfo = "0.28.2"
|
||||||
|
|
|
@ -102,9 +102,7 @@ pub fn create_default_context() -> EngineState {
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
bind_command! {
|
bind_command! {
|
||||||
History,
|
|
||||||
Tutor,
|
Tutor,
|
||||||
HistorySession,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Path
|
// Path
|
||||||
|
@ -256,12 +254,8 @@ pub fn create_default_context() -> EngineState {
|
||||||
AnsiLink,
|
AnsiLink,
|
||||||
Clear,
|
Clear,
|
||||||
Du,
|
Du,
|
||||||
KeybindingsDefault,
|
|
||||||
Input,
|
Input,
|
||||||
KeybindingsListen,
|
|
||||||
Keybindings,
|
|
||||||
Kill,
|
Kill,
|
||||||
KeybindingsList,
|
|
||||||
Sleep,
|
Sleep,
|
||||||
TermSize,
|
TermSize,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
mod history;
|
|
||||||
mod history_session;
|
|
||||||
mod tutor;
|
mod tutor;
|
||||||
|
|
||||||
pub use history::History;
|
|
||||||
pub use history_session::HistorySession;
|
|
||||||
pub use tutor::Tutor;
|
pub use tutor::Tutor;
|
||||||
|
|
|
@ -4,7 +4,6 @@ mod dir_info;
|
||||||
mod du;
|
mod du;
|
||||||
mod input;
|
mod input;
|
||||||
mod kill;
|
mod kill;
|
||||||
mod reedline_commands;
|
|
||||||
mod sleep;
|
mod sleep;
|
||||||
mod term_size;
|
mod term_size;
|
||||||
|
|
||||||
|
@ -14,6 +13,5 @@ pub use dir_info::{DirBuilder, DirInfo, FileInfo};
|
||||||
pub use du::Du;
|
pub use du::Du;
|
||||||
pub use input::Input;
|
pub use input::Input;
|
||||||
pub use kill::Kill;
|
pub use kill::Kill;
|
||||||
pub use reedline_commands::{Keybindings, KeybindingsDefault, KeybindingsList, KeybindingsListen};
|
|
||||||
pub use sleep::Sleep;
|
pub use sleep::Sleep;
|
||||||
pub use term_size::TermSize;
|
pub use term_size::TermSize;
|
||||||
|
|
|
@ -42,7 +42,7 @@ fn main() -> Result<()> {
|
||||||
|
|
||||||
// Get initial current working directory.
|
// Get initial current working directory.
|
||||||
let init_cwd = get_init_cwd();
|
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
|
// Custom additions
|
||||||
let delta = {
|
let delta = {
|
||||||
|
|
|
@ -172,7 +172,7 @@ pub fn nu_repl() {
|
||||||
let cwd = std::env::current_dir().expect("Could not get current working directory.");
|
let cwd = std::env::current_dir().expect("Could not get current working directory.");
|
||||||
let source_lines = args();
|
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();
|
let mut stack = Stack::new();
|
||||||
|
|
||||||
stack.add_env_var("PWD".to_string(), Value::test_string(cwd.to_string_lossy()));
|
stack.add_env_var("PWD".to_string(), Value::test_string(cwd.to_string_lossy()));
|
||||||
|
|
Loading…
Reference in a new issue