From 72c773aade37ab2781feddb309499ab2352392f5 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 22 Jun 2023 09:16:23 -0500 Subject: [PATCH 1/2] test(config): Verify bad merge --- .../tests/cmd/extend-builtin-dict.in/_typos.toml | 10 ++++++++++ .../tests/cmd/extend-builtin-dict.in/foo.rs | 1 + .../typos-cli/tests/cmd/extend-builtin-dict.toml | 16 ++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 crates/typos-cli/tests/cmd/extend-builtin-dict.in/_typos.toml create mode 100644 crates/typos-cli/tests/cmd/extend-builtin-dict.in/foo.rs create mode 100644 crates/typos-cli/tests/cmd/extend-builtin-dict.toml diff --git a/crates/typos-cli/tests/cmd/extend-builtin-dict.in/_typos.toml b/crates/typos-cli/tests/cmd/extend-builtin-dict.in/_typos.toml new file mode 100644 index 0000000..c82050d --- /dev/null +++ b/crates/typos-cli/tests/cmd/extend-builtin-dict.in/_typos.toml @@ -0,0 +1,10 @@ +[type.rust] +check-filename = false + +[default.extend-words] +foo = "bar" + +[files] +extend-exclude = [ + "_typos.toml" +] diff --git a/crates/typos-cli/tests/cmd/extend-builtin-dict.in/foo.rs b/crates/typos-cli/tests/cmd/extend-builtin-dict.in/foo.rs new file mode 100644 index 0000000..bcfd16d --- /dev/null +++ b/crates/typos-cli/tests/cmd/extend-builtin-dict.in/foo.rs @@ -0,0 +1 @@ +flate2 diff --git a/crates/typos-cli/tests/cmd/extend-builtin-dict.toml b/crates/typos-cli/tests/cmd/extend-builtin-dict.toml new file mode 100644 index 0000000..c2cdb00 --- /dev/null +++ b/crates/typos-cli/tests/cmd/extend-builtin-dict.toml @@ -0,0 +1,16 @@ +bin.name = "typos" +args = "" +status.code = 2 +stdin = ''' +\n\n +Destory +''' +stdout = """ +error: `flate` should be `flat` + --> ./foo.rs:1:1 + | +1 | flate2 + | ^^^^^ + | +""" +stderr = "" From 9e293916d259c4492ce694c44dd4ed415ca937c8 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 22 Jun 2023 09:57:15 -0500 Subject: [PATCH 2/2] fix(config): Always apply type defaults Fixes #760 --- crates/typos-cli/src/config.rs | 178 +++++++++--------- .../tests/cmd/extend-builtin-dict.toml | 10 +- 2 files changed, 95 insertions(+), 93 deletions(-) diff --git a/crates/typos-cli/src/config.rs b/crates/typos-cli/src/config.rs index a2a7d16..8a753b2 100644 --- a/crates/typos-cli/src/config.rs +++ b/crates/typos-cli/src/config.rs @@ -1,5 +1,7 @@ use std::collections::HashMap; +use kstring::KString; + #[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(deny_unknown_fields)] #[serde(default)] @@ -148,15 +150,99 @@ impl Walk { #[serde(default)] #[serde(transparent)] pub struct TypeEngineConfig { - pub patterns: std::collections::HashMap, + pub patterns: std::collections::HashMap, } impl TypeEngineConfig { pub fn from_defaults() -> Self { - let empty = Self::default(); - Self { - patterns: empty.patterns().collect(), - } + let patterns = [ + ( + KString::from("lock"), + GlobEngineConfig { + extend_glob: Vec::new(), + engine: EngineConfig { + check_file: Some(false), + ..Default::default() + }, + }, + ), + ( + KString::from("vim"), + GlobEngineConfig { + extend_glob: Vec::new(), + engine: EngineConfig { + dict: Some(DictConfig { + extend_identifiers: maplit::hashmap! { + "windo".into() => "windo".into(), + }, + ..Default::default() + }), + ..Default::default() + }, + }, + ), + ( + KString::from("vimscript"), + GlobEngineConfig { + extend_glob: Vec::new(), + engine: EngineConfig { + dict: Some(DictConfig { + extend_identifiers: maplit::hashmap! { + "windo".into() => "windo".into(), + }, + ..Default::default() + }), + ..Default::default() + }, + }, + ), + ( + KString::from("rust"), + GlobEngineConfig { + extend_glob: Vec::new(), + engine: EngineConfig { + dict: Some(DictConfig { + extend_identifiers: maplit::hashmap! { + "flate2".into() => "flate2".into(), + }, + extend_words: maplit::hashmap! { + "ser".into() => "ser".into(), + }, + ..Default::default() + }), + ..Default::default() + }, + }, + ), + ( + KString::from("py"), + GlobEngineConfig { + extend_glob: Vec::new(), + engine: EngineConfig { + dict: Some(DictConfig { + extend_identifiers: maplit::hashmap! { + "NDArray".into() => "NDArray".into(), + }, + ..Default::default() + }), + ..Default::default() + }, + }, + ), + ( + KString::from("cert"), + GlobEngineConfig { + extend_glob: Vec::new(), + engine: EngineConfig { + check_file: Some(false), + ..Default::default() + }, + }, + ), + ] + .into_iter() + .collect(); + Self { patterns } } pub fn update(&mut self, source: &Self) { @@ -169,85 +255,9 @@ impl TypeEngineConfig { } pub fn patterns(&self) -> impl Iterator { - let mut patterns = self.patterns.clone(); - patterns - .entry("lock".into()) - .or_insert_with(|| GlobEngineConfig { - extend_glob: Vec::new(), - engine: EngineConfig { - check_file: Some(false), - ..Default::default() - }, - }); - patterns - .entry("vim".into()) - .or_insert_with(|| GlobEngineConfig { - extend_glob: Vec::new(), - engine: EngineConfig { - dict: Some(DictConfig { - extend_identifiers: maplit::hashmap! { - "windo".into() => "windo".into(), - }, - ..Default::default() - }), - ..Default::default() - }, - }); - patterns - .entry("vimscript".into()) - .or_insert_with(|| GlobEngineConfig { - extend_glob: Vec::new(), - engine: EngineConfig { - dict: Some(DictConfig { - extend_identifiers: maplit::hashmap! { - "windo".into() => "windo".into(), - }, - ..Default::default() - }), - ..Default::default() - }, - }); - patterns - .entry("rust".into()) - .or_insert_with(|| GlobEngineConfig { - extend_glob: Vec::new(), - engine: EngineConfig { - dict: Some(DictConfig { - extend_identifiers: maplit::hashmap! { - "flate2".into() => "flate2".into(), - }, - extend_words: maplit::hashmap! { - "ser".into() => "ser".into(), - }, - ..Default::default() - }), - ..Default::default() - }, - }); - patterns - .entry("py".into()) - .or_insert_with(|| GlobEngineConfig { - extend_glob: Vec::new(), - engine: EngineConfig { - dict: Some(DictConfig { - extend_identifiers: maplit::hashmap! { - "NDArray".into() => "NDArray".into(), - }, - ..Default::default() - }), - ..Default::default() - }, - }); - patterns - .entry("cert".into()) - .or_insert_with(|| GlobEngineConfig { - extend_glob: Vec::new(), - engine: EngineConfig { - check_file: Some(false), - ..Default::default() - }, - }); - patterns.into_iter() + let mut engine = Self::from_defaults(); + engine.update(self); + engine.patterns.into_iter() } } diff --git a/crates/typos-cli/tests/cmd/extend-builtin-dict.toml b/crates/typos-cli/tests/cmd/extend-builtin-dict.toml index c2cdb00..b2c2f34 100644 --- a/crates/typos-cli/tests/cmd/extend-builtin-dict.toml +++ b/crates/typos-cli/tests/cmd/extend-builtin-dict.toml @@ -1,16 +1,8 @@ bin.name = "typos" args = "" -status.code = 2 stdin = ''' \n\n Destory ''' -stdout = """ -error: `flate` should be `flat` - --> ./foo.rs:1:1 - | -1 | flate2 - | ^^^^^ - | -""" +stdout = "" stderr = ""