summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2021-08-20 19:57:11 -0700
committerGitHub <noreply@github.com>2021-08-20 19:57:11 -0700
commit2c0b35f89cc00073ee0cca1aa8e4d629bb3be1e7 (patch)
tree2817034b04c356e69a4098ab9dae867b2ea33f2b /src
parent130b0b6a2146d4b42be6f8cfeda4d120e65576f2 (diff)
Refactoring for #693 (#696)
Diffstat (limited to 'src')
-rw-r--r--src/cli.rs10
-rw-r--r--src/features/mod.rs2
-rw-r--r--src/main.rs27
-rw-r--r--src/tests/integration_test_utils.rs4
4 files changed, 23 insertions, 20 deletions
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<GitConfig>,
+ git_config: Option<GitConfig>,
assets: HighlightingAssets,
) -> Self {
Self::from_clap_and_git_config(Self::clap().get_matches(), git_config, assets)
}
- pub fn from_iter_and_git_config<I>(iter: I, git_config: &mut Option<GitConfig>) -> Self
+ pub fn from_iter_and_git_config<I>(iter: I, git_config: Option<GitConfig>) -> Self
where
I: IntoIterator,
I::Item: Into<OsString> + Clone,
@@ -695,12 +695,12 @@ impl Opt {
fn from_clap_and_git_config(
arg_matches: clap::ArgMatches,
- git_config: &mut Option<GitConfig>,
+ mut git_config: Option<GitConfig>,
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<i32> {
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 {