mirror of
https://github.com/crate-ci/typos.git
synced 2024-11-25 18:41:05 -05:00
fix(cli): Allow CLI to override walking config
This commit is contained in:
parent
78330ba9c1
commit
3fd90b09f8
4 changed files with 30 additions and 25 deletions
|
@ -79,9 +79,6 @@ pub(crate) struct Args {
|
||||||
/// Write the current configuration to file with `-` for stdout
|
/// Write the current configuration to file with `-` for stdout
|
||||||
pub(crate) dump_config: Option<std::path::PathBuf>,
|
pub(crate) dump_config: Option<std::path::PathBuf>,
|
||||||
|
|
||||||
#[structopt(flatten)]
|
|
||||||
pub(crate) overrides: FileArgs,
|
|
||||||
|
|
||||||
#[structopt(
|
#[structopt(
|
||||||
long,
|
long,
|
||||||
possible_values(&Format::variants()),
|
possible_values(&Format::variants()),
|
||||||
|
@ -177,12 +174,15 @@ impl FileArgs {
|
||||||
pub(crate) struct ConfigArgs {
|
pub(crate) struct ConfigArgs {
|
||||||
#[structopt(flatten)]
|
#[structopt(flatten)]
|
||||||
walk: WalkArgs,
|
walk: WalkArgs,
|
||||||
|
#[structopt(flatten)]
|
||||||
|
overrides: FileArgs,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ConfigArgs {
|
impl ConfigArgs {
|
||||||
pub fn to_config(&self) -> config::Config {
|
pub fn to_config(&self) -> config::Config {
|
||||||
config::Config {
|
config::Config {
|
||||||
files: self.walk.to_config(),
|
files: self.walk.to_config(),
|
||||||
|
overrides: Some(self.overrides.to_config()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,8 @@ use std::collections::HashMap;
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub files: Walk,
|
pub files: Walk,
|
||||||
pub default: EngineConfig,
|
pub default: EngineConfig,
|
||||||
|
#[serde(skip)]
|
||||||
|
pub overrides: Option<EngineConfig>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
|
@ -34,6 +36,7 @@ impl Config {
|
||||||
Self {
|
Self {
|
||||||
files: Walk::from_defaults(),
|
files: Walk::from_defaults(),
|
||||||
default: EngineConfig::from_defaults(),
|
default: EngineConfig::from_defaults(),
|
||||||
|
overrides: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
21
src/main.rs
21
src/main.rs
|
@ -58,14 +58,17 @@ fn run_dump_config(args: &args::Args, output_path: &std::path::Path) -> proc_exi
|
||||||
};
|
};
|
||||||
|
|
||||||
let storage = typos_cli::policy::ConfigStorage::new();
|
let storage = typos_cli::policy::ConfigStorage::new();
|
||||||
let mut overrides = config::EngineConfig::default();
|
|
||||||
overrides.update(&args.overrides.to_config());
|
|
||||||
let mut engine = typos_cli::policy::ConfigEngine::new(&storage);
|
let mut engine = typos_cli::policy::ConfigEngine::new(&storage);
|
||||||
engine.set_isolated(args.isolated).set_overrides(overrides);
|
engine.set_isolated(args.isolated);
|
||||||
|
|
||||||
|
let mut overrides = config::Config::default();
|
||||||
if let Some(path) = args.custom_config.as_ref() {
|
if let Some(path) = args.custom_config.as_ref() {
|
||||||
let custom = config::Config::from_file(path).with_code(proc_exit::Code::CONFIG_ERR)?;
|
let custom = config::Config::from_file(path).with_code(proc_exit::Code::CONFIG_ERR)?;
|
||||||
engine.set_custom_config(custom);
|
overrides.update(&custom);
|
||||||
}
|
}
|
||||||
|
overrides.update(&args.config.to_config());
|
||||||
|
engine.set_overrides(overrides);
|
||||||
|
|
||||||
let config = engine
|
let config = engine
|
||||||
.load_config(cwd)
|
.load_config(cwd)
|
||||||
.with_code(proc_exit::Code::CONFIG_ERR)?;
|
.with_code(proc_exit::Code::CONFIG_ERR)?;
|
||||||
|
@ -86,14 +89,16 @@ fn run_checks(args: &args::Args) -> proc_exit::ExitResult {
|
||||||
let global_cwd = std::env::current_dir()?;
|
let global_cwd = std::env::current_dir()?;
|
||||||
|
|
||||||
let storage = typos_cli::policy::ConfigStorage::new();
|
let storage = typos_cli::policy::ConfigStorage::new();
|
||||||
let mut overrides = config::EngineConfig::default();
|
|
||||||
overrides.update(&args.overrides.to_config());
|
|
||||||
let mut engine = typos_cli::policy::ConfigEngine::new(&storage);
|
let mut engine = typos_cli::policy::ConfigEngine::new(&storage);
|
||||||
engine.set_isolated(args.isolated).set_overrides(overrides);
|
engine.set_isolated(args.isolated);
|
||||||
|
|
||||||
|
let mut overrides = config::Config::default();
|
||||||
if let Some(path) = args.custom_config.as_ref() {
|
if let Some(path) = args.custom_config.as_ref() {
|
||||||
let custom = config::Config::from_file(path).with_code(proc_exit::Code::CONFIG_ERR)?;
|
let custom = config::Config::from_file(path).with_code(proc_exit::Code::CONFIG_ERR)?;
|
||||||
engine.set_custom_config(custom);
|
overrides.update(&custom);
|
||||||
}
|
}
|
||||||
|
overrides.update(&args.config.to_config());
|
||||||
|
engine.set_overrides(overrides);
|
||||||
|
|
||||||
let mut typos_found = false;
|
let mut typos_found = false;
|
||||||
let mut errors_found = false;
|
let mut errors_found = false;
|
||||||
|
|
|
@ -35,8 +35,7 @@ impl Default for ConfigStorage {
|
||||||
pub struct ConfigEngine<'s> {
|
pub struct ConfigEngine<'s> {
|
||||||
storage: &'s ConfigStorage,
|
storage: &'s ConfigStorage,
|
||||||
|
|
||||||
overrides: Option<crate::config::EngineConfig>,
|
overrides: Option<crate::config::Config>,
|
||||||
custom: Option<crate::config::Config>,
|
|
||||||
isolated: bool,
|
isolated: bool,
|
||||||
|
|
||||||
configs: std::collections::HashMap<std::path::PathBuf, DirConfig>,
|
configs: std::collections::HashMap<std::path::PathBuf, DirConfig>,
|
||||||
|
@ -50,7 +49,6 @@ impl<'s> ConfigEngine<'s> {
|
||||||
Self {
|
Self {
|
||||||
storage,
|
storage,
|
||||||
overrides: Default::default(),
|
overrides: Default::default(),
|
||||||
custom: Default::default(),
|
|
||||||
configs: Default::default(),
|
configs: Default::default(),
|
||||||
isolated: false,
|
isolated: false,
|
||||||
walk: Default::default(),
|
walk: Default::default(),
|
||||||
|
@ -59,16 +57,11 @@ impl<'s> ConfigEngine<'s> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_overrides(&mut self, overrides: crate::config::EngineConfig) -> &mut Self {
|
pub fn set_overrides(&mut self, overrides: crate::config::Config) -> &mut Self {
|
||||||
self.overrides = Some(overrides);
|
self.overrides = Some(overrides);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_custom_config(&mut self, custom: crate::config::Config) -> &mut Self {
|
|
||||||
self.custom = Some(custom);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_isolated(&mut self, isolated: bool) -> &mut Self {
|
pub fn set_isolated(&mut self, isolated: bool) -> &mut Self {
|
||||||
self.isolated = isolated;
|
self.isolated = isolated;
|
||||||
self
|
self
|
||||||
|
@ -125,11 +118,8 @@ impl<'s> ConfigEngine<'s> {
|
||||||
config.update(&derived);
|
config.update(&derived);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(custom) = self.custom.as_ref() {
|
|
||||||
config.update(custom);
|
|
||||||
}
|
|
||||||
if let Some(overrides) = self.overrides.as_ref() {
|
if let Some(overrides) = self.overrides.as_ref() {
|
||||||
config.default.update(overrides);
|
config.update(overrides);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(config)
|
Ok(config)
|
||||||
|
@ -141,7 +131,14 @@ impl<'s> ConfigEngine<'s> {
|
||||||
}
|
}
|
||||||
|
|
||||||
let config = self.load_config(cwd)?;
|
let config = self.load_config(cwd)?;
|
||||||
let crate::config::Config { files, default } = config;
|
let crate::config::Config {
|
||||||
|
files,
|
||||||
|
mut default,
|
||||||
|
overrides,
|
||||||
|
} = config;
|
||||||
|
if let Some(overrides) = overrides {
|
||||||
|
default.update(&overrides);
|
||||||
|
}
|
||||||
|
|
||||||
let walk = self.walk.intern(files);
|
let walk = self.walk.intern(files);
|
||||||
let default = self.init_file_config(default)?;
|
let default = self.init_file_config(default)?;
|
||||||
|
|
Loading…
Reference in a new issue