diff --git a/crates/nu-cli/src/commands/commandline/commandline_.rs b/crates/nu-cli/src/commands/commandline/commandline_.rs index 941e746679..569de37d65 100644 --- a/crates/nu-cli/src/commands/commandline/commandline_.rs +++ b/crates/nu-cli/src/commands/commandline/commandline_.rs @@ -1,5 +1,4 @@ use nu_engine::command_prelude::*; -use unicode_segmentation::UnicodeSegmentation; #[derive(Clone)] pub struct Commandline; @@ -11,45 +10,12 @@ impl Command for Commandline { fn signature(&self) -> Signature { Signature::build("commandline") - .input_output_types(vec![ - (Type::Nothing, Type::Nothing), - (Type::String, Type::String), - ]) - .switch( - "cursor", - "Set or get the current cursor position", - Some('c'), - ) - .switch( - "cursor-end", - "Set the current cursor position to the end of the buffer", - Some('e'), - ) - .switch( - "append", - "appends the string to the end of the buffer", - Some('a'), - ) - .switch( - "insert", - "inserts the string into the buffer at the cursor position", - Some('i'), - ) - .switch( - "replace", - "replaces the current contents of the buffer (default)", - Some('r'), - ) - .optional( - "cmd", - SyntaxShape::String, - "the string to perform the operation with", - ) + .input_output_types(vec![(Type::Nothing, Type::String)]) .category(Category::Core) } fn usage(&self) -> &str { - "View or modify the current command line input buffer." + "View the current command line input buffer." } fn search_terms(&self) -> Vec<&str> { @@ -59,126 +25,11 @@ impl Command for Commandline { fn run( &self, engine_state: &EngineState, - stack: &mut Stack, + _stack: &mut Stack, call: &Call, _input: PipelineData, ) -> Result { - if let Some(cmd) = call.opt::(engine_state, stack, 0)? { - let span = cmd.span(); - let cmd = cmd.coerce_into_string()?; - let mut repl = engine_state.repl_state.lock().expect("repl state mutex"); - - if call.has_flag(engine_state, stack, "cursor")? { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError { - error: "`--cursor (-c)` is deprecated".into(), - msg: "Setting the current cursor position by `--cursor (-c)` is deprecated" - .into(), - span: Some(call.arguments_span()), - help: Some("Use `commandline set-cursor`".into()), - inner: vec![], - }, - ); - match cmd.parse::() { - Ok(n) => { - repl.cursor_pos = if n <= 0 { - 0usize - } else { - repl.buffer - .grapheme_indices(true) - .map(|(i, _c)| i) - .nth(n as usize) - .unwrap_or(repl.buffer.len()) - } - } - Err(_) => { - return Err(ShellError::CantConvert { - to_type: "int".to_string(), - from_type: "string".to_string(), - span, - help: Some(format!(r#"string "{cmd}" does not represent a valid int"#)), - }) - } - } - } else if call.has_flag(engine_state, stack, "append")? { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError { - error: "`--append (-a)` is deprecated".into(), - msg: "Appending the string to the end of the buffer by `--append (-a)` is deprecated".into(), - span: Some(call.arguments_span()), - help: Some("Use `commandline edit --append (-a)`".into()), - inner: vec![], - }, - ); - repl.buffer.push_str(&cmd); - } else if call.has_flag(engine_state, stack, "insert")? { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError { - error: "`--insert (-i)` is deprecated".into(), - msg: "Inserts the string into the buffer at the cursor position by `--insert (-i)` is deprecated".into(), - span: Some(call.arguments_span()), - help: Some("Use `commandline edit --insert (-i)`".into()), - inner: vec![], - }, - ); - let cursor_pos = repl.cursor_pos; - repl.buffer.insert_str(cursor_pos, &cmd); - repl.cursor_pos += cmd.len(); - } else { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError { - error: "`--replace (-r)` is deprecated".into(), - msg: "Replacing the current contents of the buffer by `--replace (-p)` or positional argument is deprecated".into(), - span: Some(call.arguments_span()), - help: Some("Use `commandline edit --replace (-r)`".into()), - inner: vec![], - }, - ); - repl.buffer = cmd; - repl.cursor_pos = repl.buffer.len(); - } - Ok(Value::nothing(call.head).into_pipeline_data()) - } else { - let mut repl = engine_state.repl_state.lock().expect("repl state mutex"); - if call.has_flag(engine_state, stack, "cursor-end")? { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError { - error: "`--cursor-end (-e)` is deprecated".into(), - msg: "Setting the current cursor position to the end of the buffer by `--cursor-end (-e)` is deprecated".into(), - span: Some(call.arguments_span()), - help: Some("Use `commandline set-cursor --end (-e)`".into()), - inner: vec![], - }, - ); - repl.cursor_pos = repl.buffer.len(); - Ok(Value::nothing(call.head).into_pipeline_data()) - } else if call.has_flag(engine_state, stack, "cursor")? { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError { - error: "`--cursor (-c)` is deprecated".into(), - msg: "Getting the current cursor position by `--cursor (-c)` is deprecated" - .into(), - span: Some(call.arguments_span()), - help: Some("Use `commandline get-cursor`".into()), - inner: vec![], - }, - ); - let char_pos = repl - .buffer - .grapheme_indices(true) - .chain(std::iter::once((repl.buffer.len(), ""))) - .position(|(i, _c)| i == repl.cursor_pos) - .expect("Cursor position isn't on a grapheme boundary"); - Ok(Value::string(char_pos.to_string(), call.head).into_pipeline_data()) - } else { - Ok(Value::string(repl.buffer.to_string(), call.head).into_pipeline_data()) - } - } + let repl = engine_state.repl_state.lock().expect("repl state mutex"); + Ok(Value::string(repl.buffer.clone(), call.head).into_pipeline_data()) } } diff --git a/src/tests/test_commandline.rs b/src/tests/test_commandline.rs index cab1d18e80..130faf933a 100644 --- a/src/tests/test_commandline.rs +++ b/src/tests/test_commandline.rs @@ -1,5 +1,4 @@ use crate::tests::{fail_test, run_test, TestResult}; -use nu_test_support::nu; #[test] fn commandline_test_get_empty() -> TestResult { @@ -141,176 +140,3 @@ fn commandline_test_cursor_end() -> TestResult { fn commandline_test_cursor_type() -> TestResult { run_test("commandline get-cursor | describe", "int") } - -#[test] -fn deprecated_commandline_test_append() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --cursor '2'\n\ - commandline --append 'ab'\n\ - print (commandline)\n\ - commandline --cursor", - "0👩‍❤️‍👩2ab\n\ - 2", - ) -} - -#[test] -fn deprecated_commandline_test_insert() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --cursor '2'\n\ - commandline --insert 'ab'\n\ - print (commandline)\n\ - commandline --cursor", - "0👩‍❤️‍👩ab2\n\ - 4", - ) -} - -#[test] -fn deprecated_commandline_test_replace() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --replace 'ab'\n\ - print (commandline)\n\ - commandline --cursor", - "ab\n\ - 2", - ) -} - -#[test] -fn deprecated_commandline_test_cursor() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --cursor '1'\n\ - commandline --insert 'x'\n\ - commandline", - "0x👩‍❤️‍👩2", - )?; - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --cursor '2'\n\ - commandline --insert 'x'\n\ - commandline", - "0👩‍❤️‍👩x2", - ) -} - -#[test] -fn deprecated_commandline_test_cursor_show_pos_begin() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩'\n\ - commandline --cursor '0'\n\ - commandline --cursor", - "0", - ) -} - -#[test] -fn deprecated_commandline_test_cursor_show_pos_end() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩'\n\ - commandline --cursor '2'\n\ - commandline --cursor", - "2", - ) -} - -#[test] -fn deprecated_commandline_test_cursor_show_pos_mid() -> TestResult { - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --cursor '1'\n\ - commandline --cursor", - "1", - )?; - run_test( - "commandline --replace '0👩‍❤️‍👩2'\n\ - commandline --cursor '2'\n\ - commandline --cursor", - "2", - ) -} - -#[test] -fn deprecated_commandline_test_cursor_too_small() -> TestResult { - run_test( - "commandline --replace '123456'\n\ - commandline --cursor '-1'\n\ - commandline --insert '0'\n\ - commandline", - "0123456", - ) -} - -#[test] -fn deprecated_commandline_test_cursor_too_large() -> TestResult { - run_test( - "commandline --replace '123456'\n\ - commandline --cursor '10'\n\ - commandline --insert '0'\n\ - commandline", - "1234560", - ) -} - -#[test] -fn deprecated_commandline_test_cursor_invalid() -> TestResult { - fail_test( - "commandline --replace '123456'\n\ - commandline --cursor 'abc'", - r#"string "abc" does not represent a valid int"#, - ) -} - -#[test] -fn deprecated_commandline_test_cursor_end() -> TestResult { - run_test( - "commandline --insert '🤔🤔'; commandline --cursor-end; commandline --cursor", - "2", // 2 graphemes - ) -} - -#[test] -fn deprecated_commandline_flag_cursor_get() { - let actual = nu!("commandline --cursor"); - assert!(actual.err.contains("deprecated")); -} - -#[test] -fn deprecated_commandline_flag_cursor_set() { - let actual = nu!("commandline -c 0"); - assert!(actual.err.contains("deprecated")); -} - -#[test] -fn deprecated_commandline_flag_cursor_end() { - let actual = nu!("commandline --cursor-end"); - assert!(actual.err.contains("deprecated")); -} - -#[test] -fn deprecated_commandline_flag_append() { - let actual = nu!("commandline --append 'abc'"); - assert!(actual.err.contains("deprecated")); -} - -#[test] -fn deprecated_commandline_flag_insert() { - let actual = nu!("commandline --insert 'abc'"); - assert!(actual.err.contains("deprecated")); -} - -#[test] -fn deprecated_commandline_flag_replace() { - let actual = nu!("commandline --replace 'abc'"); - assert!(actual.err.contains("deprecated")); -} - -#[test] -fn deprecated_commandline_replace_current_buffer() { - let actual = nu!("commandline 'abc'"); - assert!(actual.err.contains("deprecated")); -}