Refactoring for #693 (#696)

This commit is contained in:
Dan Davison 2021-08-20 19:57:11 -07:00 committed by GitHub
parent 130b0b6a21
commit 2c0b35f89c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 20 deletions

View File

@ -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
}

View File

@ -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()))

View File

@ -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 {

View File

@ -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 {