From 54301fe3be32d4f9228b6bcbb0e177f0bf5fb7e6 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Tue, 18 Jun 2019 12:39:09 +1200 Subject: [PATCH] Add lines and improve split --- src/cli.rs | 63 ++++++++++++++++++++---------------- src/commands.rs | 3 ++ src/commands/open.rs | 4 +-- src/commands/split_column.rs | 7 ++++ src/commands/split_row.rs | 8 +++++ 5 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 2c3ec712a5..f906fd9478 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -64,6 +64,7 @@ pub async fn cli() -> Result<(), Box> { command("open", open::open), command("enter", enter::enter), command("exit", exit::exit), + command("lines", lines::lines), command("pick", pick::pick), command("split-column", split_column::split_column), command("split-row", split_row::split_row), @@ -75,6 +76,7 @@ pub async fn cli() -> Result<(), Box> { command("to-toml", to_toml::to_toml), Arc::new(Where), Arc::new(Config), + Arc::new(SkipWhile), command("sort-by", sort_by::sort_by), ]); @@ -147,36 +149,41 @@ pub async fn cli() -> Result<(), Box> { } } - LineResult::Error(mut line, err) => match err { - ShellError::Diagnostic(diag) => { - let host = context.host.lock().unwrap(); - let writer = host.err_termcolor(); - line.push_str(" "); - let files = crate::parser::span::Files::new(line); + LineResult::Error(mut line, err) => { + rl.add_history_entry(line.clone()); + match err { + ShellError::Diagnostic(diag) => { + let host = context.host.lock().unwrap(); + let writer = host.err_termcolor(); + line.push_str(" "); + let files = crate::parser::span::Files::new(line); - language_reporting::emit( - &mut writer.lock(), - &files, - &diag.diagnostic, - &language_reporting::DefaultConfig, - ) - .unwrap(); + language_reporting::emit( + &mut writer.lock(), + &files, + &diag.diagnostic, + &language_reporting::DefaultConfig, + ) + .unwrap(); + } + + ShellError::TypeError(desc) => context + .host + .lock() + .unwrap() + .stdout(&format!("TypeError: {}", desc)), + + ShellError::MissingProperty { subpath, .. } => context + .host + .lock() + .unwrap() + .stdout(&format!("Missing property {}", subpath)), + + ShellError::String(_) => { + context.host.lock().unwrap().stdout(&format!("{}", err)) + } } - - ShellError::TypeError(desc) => context - .host - .lock() - .unwrap() - .stdout(&format!("TypeError: {}", desc)), - - ShellError::MissingProperty { subpath, .. } => context - .host - .lock() - .unwrap() - .stdout(&format!("Missing property {}", subpath)), - - ShellError::String(_) => context.host.lock().unwrap().stdout(&format!("{}", err)), - }, + } LineResult::Break => { break; diff --git a/src/commands.rs b/src/commands.rs index 17ab68b6a1..569c3edea3 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -14,6 +14,7 @@ crate mod from_toml; crate mod from_xml; crate mod from_yaml; crate mod get; +crate mod lines; crate mod ls; crate mod open; crate mod pick; @@ -22,6 +23,7 @@ crate mod reject; crate mod save; crate mod size; crate mod skip; +crate mod skip_while; crate mod sort_by; crate mod split_column; crate mod split_row; @@ -38,3 +40,4 @@ crate use command::command; crate use config::Config; crate use where_::Where; +crate use skip_while::SkipWhile; diff --git a/src/commands/open.rs b/src/commands/open.rs index 895999fa05..0edce69880 100644 --- a/src/commands/open.rs +++ b/src/commands/open.rs @@ -71,8 +71,8 @@ pub fn open(args: CommandArgs) -> Result { ), Err(_) => { return Err(ShellError::labeled_error( - "File cound not be opened", - "file not found", + "File could not be opened", + "could not be opened", args.positional[0].span, )); } diff --git a/src/commands/split_column.rs b/src/commands/split_column.rs index 429b3dab07..653b9e6180 100644 --- a/src/commands/split_column.rs +++ b/src/commands/split_column.rs @@ -6,6 +6,13 @@ use log::trace; // TODO: "Amount remaining" wrapper pub fn split_column(args: CommandArgs) -> Result { + if args.positional.len() == 0 { + return Err(ShellError::maybe_labeled_error( + "Split-column needs more information", + "needs parameter (eg split-column \",\")", + args.name_span, + )); + } let input = args.input; let span = args.name_span; let args = args.positional; diff --git a/src/commands/split_row.rs b/src/commands/split_row.rs index 79b12adbfb..ed382bb761 100644 --- a/src/commands/split_row.rs +++ b/src/commands/split_row.rs @@ -6,6 +6,14 @@ use log::trace; // TODO: "Amount remaining" wrapper pub fn split_row(args: CommandArgs) -> Result { + if args.positional.len() == 0 { + return Err(ShellError::maybe_labeled_error( + "Split-row needs more information", + "needs parameter (eg split-row \"\\n\")", + args.name_span, + )); + } + let input = args.input; let span = args.name_span; let args = args.positional;