fix(config): Always apply type defaults

Fixes #760
This commit is contained in:
Ed Page 2023-06-22 09:57:15 -05:00
parent 72c773aade
commit 9e293916d2
2 changed files with 95 additions and 93 deletions

View file

@ -1,5 +1,7 @@
use std::collections::HashMap; use std::collections::HashMap;
use kstring::KString;
#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)] #[serde(deny_unknown_fields)]
#[serde(default)] #[serde(default)]
@ -148,40 +150,25 @@ impl Walk {
#[serde(default)] #[serde(default)]
#[serde(transparent)] #[serde(transparent)]
pub struct TypeEngineConfig { pub struct TypeEngineConfig {
pub patterns: std::collections::HashMap<kstring::KString, GlobEngineConfig>, pub patterns: std::collections::HashMap<KString, GlobEngineConfig>,
} }
impl TypeEngineConfig { impl TypeEngineConfig {
pub fn from_defaults() -> Self { pub fn from_defaults() -> Self {
let empty = Self::default(); let patterns = [
Self { (
patterns: empty.patterns().collect(), KString::from("lock"),
} GlobEngineConfig {
}
pub fn update(&mut self, source: &Self) {
for (type_name, engine) in source.patterns.iter() {
self.patterns
.entry(type_name.to_owned())
.or_insert_with(GlobEngineConfig::default)
.update(engine);
}
}
pub fn patterns(&self) -> impl Iterator<Item = (kstring::KString, GlobEngineConfig)> {
let mut patterns = self.patterns.clone();
patterns
.entry("lock".into())
.or_insert_with(|| GlobEngineConfig {
extend_glob: Vec::new(), extend_glob: Vec::new(),
engine: EngineConfig { engine: EngineConfig {
check_file: Some(false), check_file: Some(false),
..Default::default() ..Default::default()
}, },
}); },
patterns ),
.entry("vim".into()) (
.or_insert_with(|| GlobEngineConfig { KString::from("vim"),
GlobEngineConfig {
extend_glob: Vec::new(), extend_glob: Vec::new(),
engine: EngineConfig { engine: EngineConfig {
dict: Some(DictConfig { dict: Some(DictConfig {
@ -192,10 +179,11 @@ impl TypeEngineConfig {
}), }),
..Default::default() ..Default::default()
}, },
}); },
patterns ),
.entry("vimscript".into()) (
.or_insert_with(|| GlobEngineConfig { KString::from("vimscript"),
GlobEngineConfig {
extend_glob: Vec::new(), extend_glob: Vec::new(),
engine: EngineConfig { engine: EngineConfig {
dict: Some(DictConfig { dict: Some(DictConfig {
@ -206,10 +194,11 @@ impl TypeEngineConfig {
}), }),
..Default::default() ..Default::default()
}, },
}); },
patterns ),
.entry("rust".into()) (
.or_insert_with(|| GlobEngineConfig { KString::from("rust"),
GlobEngineConfig {
extend_glob: Vec::new(), extend_glob: Vec::new(),
engine: EngineConfig { engine: EngineConfig {
dict: Some(DictConfig { dict: Some(DictConfig {
@ -223,10 +212,11 @@ impl TypeEngineConfig {
}), }),
..Default::default() ..Default::default()
}, },
}); },
patterns ),
.entry("py".into()) (
.or_insert_with(|| GlobEngineConfig { KString::from("py"),
GlobEngineConfig {
extend_glob: Vec::new(), extend_glob: Vec::new(),
engine: EngineConfig { engine: EngineConfig {
dict: Some(DictConfig { dict: Some(DictConfig {
@ -237,17 +227,37 @@ impl TypeEngineConfig {
}), }),
..Default::default() ..Default::default()
}, },
}); },
patterns ),
.entry("cert".into()) (
.or_insert_with(|| GlobEngineConfig { KString::from("cert"),
GlobEngineConfig {
extend_glob: Vec::new(), extend_glob: Vec::new(),
engine: EngineConfig { engine: EngineConfig {
check_file: Some(false), check_file: Some(false),
..Default::default() ..Default::default()
}, },
}); },
patterns.into_iter() ),
]
.into_iter()
.collect();
Self { patterns }
}
pub fn update(&mut self, source: &Self) {
for (type_name, engine) in source.patterns.iter() {
self.patterns
.entry(type_name.to_owned())
.or_insert_with(GlobEngineConfig::default)
.update(engine);
}
}
pub fn patterns(&self) -> impl Iterator<Item = (kstring::KString, GlobEngineConfig)> {
let mut engine = Self::from_defaults();
engine.update(self);
engine.patterns.into_iter()
} }
} }

View file

@ -1,16 +1,8 @@
bin.name = "typos" bin.name = "typos"
args = "" args = ""
status.code = 2
stdin = ''' stdin = '''
\n\n \n\n
Destory Destory
''' '''
stdout = """ stdout = ""
error: `flate` should be `flat`
--> ./foo.rs:1:1
|
1 | flate2
| ^^^^^
|
"""
stderr = "" stderr = ""