From 2c0b35f89cc00073ee0cca1aa8e4d629bb3be1e7 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Fri, 20 Aug 2021 19:57:11 -0700 Subject: Refactoring for #693 (#696) --- src/cli.rs | 10 +++++----- src/features/mod.rs | 2 +- src/main.rs | 27 +++++++++++++++------------ src/tests/integration_test_utils.rs | 4 ++-- 4 files changed, 23 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/cli.rs b/src/cli.rs index 1b883589..c711673e 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -13,7 +13,7 @@ use crate::bat_utils::output::PagingMode; use crate::git_config::{GitConfig, GitConfigEntry}; use crate::options; -#[derive(StructOpt, Clone, Default)] +#[derive(StructOpt, Default)] #[structopt( name = "delta", about = "A viewer for git and diff output", @@ -678,13 +678,13 @@ impl Default for PagingMode { impl Opt { pub fn from_args_and_git_config( - git_config: &mut Option, + git_config: Option, assets: HighlightingAssets, ) -> Self { Self::from_clap_and_git_config(Self::clap().get_matches(), git_config, assets) } - pub fn from_iter_and_git_config(iter: I, git_config: &mut Option) -> Self + pub fn from_iter_and_git_config(iter: I, git_config: Option) -> Self where I: IntoIterator, I::Item: Into + Clone, @@ -695,12 +695,12 @@ impl Opt { fn from_clap_and_git_config( arg_matches: clap::ArgMatches, - git_config: &mut Option, + mut git_config: Option, assets: HighlightingAssets, ) -> Self { let mut opt = Opt::from_clap(&arg_matches); options::rewrite::apply_rewrite_rules(&mut opt, &arg_matches); - options::set::set_options(&mut opt, git_config, &arg_matches, assets); + options::set::set_options(&mut opt, &mut git_config, &arg_matches, assets); opt } diff --git a/src/features/mod.rs b/src/features/mod.rs index 1fe20910..8b169fcd 100644 --- a/src/features/mod.rs +++ b/src/features/mod.rs @@ -102,7 +102,7 @@ pub mod tests { let builtin_features = make_builtin_features(); let mut args = vec!["delta".to_string()]; args.extend(builtin_features.keys().map(|s| format!("--{}", s))); - let opt = cli::Opt::from_iter_and_git_config(args, &mut None); + let opt = cli::Opt::from_iter_and_git_config(args, None); let features: HashSet<&str> = opt.features.split_whitespace().collect(); for feature in builtin_features.keys() { assert!(features.contains(feature.as_str())) diff --git a/src/main.rs b/src/main.rs index 1b77808f..3fb223e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,7 +58,7 @@ pub mod errors { // arguments and without standard input; 2 is used to report a real problem. fn run_app() -> std::io::Result { let assets = HighlightingAssets::new(); - let opt = cli::Opt::from_args_and_git_config(&mut git_config::GitConfig::try_create(), assets); + let opt = cli::Opt::from_args_and_git_config(git_config::GitConfig::try_create(), assets); if opt.list_languages { list_languages()?; @@ -351,19 +351,17 @@ fn show_themes(dark: bool, light: bool, computed_theme_is_light: bool) -> std::i } }; - let mut git_config = git_config::GitConfig::try_create(); - let opt = cli::Opt::from_iter_and_git_config( - &["", "", "--navigate", "--show-themes"], - &mut git_config, - ); + let git_config = git_config::GitConfig::try_create(); + let opt = + cli::Opt::from_iter_and_git_config(&["", "", "--navigate", "--show-themes"], git_config); let mut output_type = OutputType::from_mode(PagingMode::Always, None, &config::Config::from(opt)).unwrap(); let title_style = ansi_term::Style::new().bold(); let writer = output_type.handle().unwrap(); for theme in &get_themes(git_config::GitConfig::try_create()) { - let opt = - cli::Opt::from_iter_and_git_config(&["", "", "--features", theme], &mut git_config); + let git_config = git_config::GitConfig::try_create(); + let opt = cli::Opt::from_iter_and_git_config(&["", "", "--features", theme], git_config); let is_dark_theme = opt.dark; let is_light_theme = opt.light; let config = config::Config::from(opt); @@ -389,7 +387,6 @@ fn show_themes(dark: bool, light: bool, computed_theme_is_light: bool) -> std::i #[cfg(not(tarpaulin_include))] fn show_syntax_themes() -> std::io::Result<()> { - let mut opt = cli::Opt::from_args(); let assets = HighlightingAssets::new(); let mut output_type = OutputType::from_mode( PagingMode::QuitIfOneScreen, @@ -398,7 +395,6 @@ fn show_syntax_themes() -> std::io::Result<()> { ) .unwrap(); let mut writer = output_type.handle().unwrap(); - opt.computed.syntax_set = assets.syntax_set; let stdin_data = if !atty::is(atty::Stream::Stdin) { let mut buf = Vec::new(); @@ -412,9 +408,16 @@ fn show_syntax_themes() -> std::io::Result<()> { None }; + let make_opt = || { + let mut opt = cli::Opt::from_args(); + opt.computed.syntax_set = assets.syntax_set.clone(); + opt + }; + let opt = make_opt(); + if !(opt.dark || opt.light) { - _show_syntax_themes(opt.clone(), false, &mut writer, stdin_data.as_ref())?; - _show_syntax_themes(opt, true, &mut writer, stdin_data.as_ref())?; + _show_syntax_themes(opt, false, &mut writer, stdin_data.as_ref())?; + _show_syntax_themes(make_opt(), true, &mut writer, stdin_data.as_ref())?; } else if opt.light { _show_syntax_themes(opt, true, &mut writer, stdin_data.as_ref())?; } else { diff --git a/src/tests/integration_test_utils.rs b/src/tests/integration_test_utils.rs index 7cab6f84..bdb28514 100644 --- a/src/tests/integration_test_utils.rs +++ b/src/tests/integration_test_utils.rs @@ -38,14 +38,14 @@ fn _make_options_from_args_and_git_config( let mut args: Vec<&str> = itertools::chain(&["/dev/null", "/dev/null"], args) .map(|s| *s) .collect(); - let mut git_config = match (git_config_contents, git_config_path) { + let git_config = match (git_config_contents, git_config_path) { (Some(contents), Some(path)) => Some(make_git_config(contents, path, honor_env_var)), _ => { args.push("--no-gitconfig"); None } }; - cli::Opt::from_iter_and_git_config(args, &mut git_config) + cli::Opt::from_iter_and_git_config(args, git_config) } pub fn make_options_from_args(args: &[&str]) -> cli::Opt { -- cgit v1.2.3