Skip to content

Commit 4362a6e

Browse files
authored
Merge pull request #882 from epage/regex
fix(config): Propagate validation errors
2 parents 8dec26e + 1b92c01 commit 4362a6e

File tree

7 files changed

+47
-40
lines changed

7 files changed

+47
-40
lines changed

crates/typos-cli/src/bin/typos-cli/args.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,14 @@ impl FileArgs {
146146
binary: self.binary(),
147147
check_filename: self.check_filename(),
148148
check_file: self.check_file(),
149-
tokenizer: Some(config::TokenizerConfig {
149+
tokenizer: config::TokenizerConfig {
150150
unicode: self.unicode(),
151151
..Default::default()
152-
}),
153-
dict: Some(config::DictConfig {
152+
},
153+
dict: config::DictConfig {
154154
locale: self.locale,
155155
..Default::default()
156-
}),
156+
},
157157
extend_ignore_re: Default::default(),
158158
}
159159
}

crates/typos-cli/src/config.rs

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ impl TypeEngineConfig {
213213
GlobEngineConfig {
214214
extend_glob: Vec::new(),
215215
engine: EngineConfig {
216-
dict: Some(DictConfig {
216+
dict: DictConfig {
217217
extend_identifiers: dict_config
218218
.ignore_idents
219219
.iter()
@@ -225,7 +225,7 @@ impl TypeEngineConfig {
225225
.map(|key| ((*key).into(), (*key).into()))
226226
.collect(),
227227
..Default::default()
228-
}),
228+
},
229229
..Default::default()
230230
},
231231
},
@@ -280,9 +280,9 @@ pub struct EngineConfig {
280280
/// Verifying spelling in files.
281281
pub check_file: Option<bool>,
282282
#[serde(flatten)]
283-
pub tokenizer: Option<TokenizerConfig>,
283+
pub tokenizer: TokenizerConfig,
284284
#[serde(flatten)]
285-
pub dict: Option<DictConfig>,
285+
pub dict: DictConfig,
286286
#[serde(with = "serde_regex")]
287287
pub extend_ignore_re: Vec<regex::Regex>,
288288
}
@@ -294,12 +294,8 @@ impl EngineConfig {
294294
binary: Some(empty.binary()),
295295
check_filename: Some(empty.check_filename()),
296296
check_file: Some(empty.check_file()),
297-
tokenizer: Some(
298-
empty
299-
.tokenizer
300-
.unwrap_or_else(TokenizerConfig::from_defaults),
301-
),
302-
dict: Some(empty.dict.unwrap_or_else(DictConfig::from_defaults)),
297+
tokenizer: TokenizerConfig::from_defaults(),
298+
dict: DictConfig::from_defaults(),
303299
extend_ignore_re: Default::default(),
304300
}
305301
}
@@ -314,22 +310,8 @@ impl EngineConfig {
314310
if let Some(source) = source.check_file {
315311
self.check_file = Some(source);
316312
}
317-
if let Some(source) = source.tokenizer.as_ref() {
318-
let mut tokenizer = None;
319-
std::mem::swap(&mut tokenizer, &mut self.tokenizer);
320-
let mut tokenizer = tokenizer.unwrap_or_default();
321-
tokenizer.update(source);
322-
let mut tokenizer = Some(tokenizer);
323-
std::mem::swap(&mut tokenizer, &mut self.tokenizer);
324-
}
325-
if let Some(source) = source.dict.as_ref() {
326-
let mut dict = None;
327-
std::mem::swap(&mut dict, &mut self.dict);
328-
let mut dict = dict.unwrap_or_default();
329-
dict.update(source);
330-
let mut dict = Some(dict);
331-
std::mem::swap(&mut dict, &mut self.dict);
332-
}
313+
self.tokenizer.update(&source.tokenizer);
314+
self.dict.update(&source.dict);
333315
self.extend_ignore_re
334316
.extend(source.extend_ignore_re.iter().cloned());
335317
}
@@ -659,8 +641,8 @@ check-file = true
659641
GlobEngineConfig {
660642
extend_glob: vec!["*.po".into()],
661643
engine: EngineConfig {
662-
tokenizer: Some(TokenizerConfig::default()),
663-
dict: Some(DictConfig::default()),
644+
tokenizer: TokenizerConfig::default(),
645+
dict: DictConfig::default(),
664646
check_file: Some(true),
665647
..Default::default()
666648
},
@@ -687,13 +669,13 @@ inout = "inout"
687669
GlobEngineConfig {
688670
extend_glob: vec!["*.shader".into(), "*.cginc".into()],
689671
engine: EngineConfig {
690-
tokenizer: Some(TokenizerConfig::default()),
691-
dict: Some(DictConfig {
672+
tokenizer: TokenizerConfig::default(),
673+
dict: DictConfig {
692674
extend_words: maplit::hashmap! {
693675
"inout".into() => "inout".into(),
694676
},
695677
..Default::default()
696-
}),
678+
},
697679
..Default::default()
698680
},
699681
},

crates/typos-cli/src/policy.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,14 +227,13 @@ impl<'s> ConfigEngine<'s> {
227227
let check_filename = engine.check_filename();
228228
let check_file = engine.check_file();
229229
let crate::config::EngineConfig {
230-
tokenizer,
231-
dict,
230+
tokenizer: mut tokenizer_config,
231+
dict: mut dict_config,
232232
extend_ignore_re,
233233
..
234234
} = engine;
235-
let tokenizer_config =
236-
tokenizer.unwrap_or_else(crate::config::TokenizerConfig::from_defaults);
237-
let dict_config = dict.unwrap_or_else(crate::config::DictConfig::from_defaults);
235+
tokenizer_config.update(&crate::config::TokenizerConfig::from_defaults());
236+
dict_config.update(&crate::config::DictConfig::from_defaults());
238237

239238
if !tokenizer_config.ignore_hex() {
240239
log::warn!("`ignore-hex` is deprecated");
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[default.extend-identifiers]
2+
hello = "goodbye"
3+
4+
[type.fail]
5+
extend-glob = ["*.fail"]
6+
7+
[type.ignore]
8+
extend-glob = ["*.ignore"]
9+
extend-ignore-identifiers-re = ["(he.*"]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hello
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hello
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
bin.name = "typos"
2+
status.code = 78
3+
stdin = ""
4+
stdout = ""
5+
stderr = """
6+
TOML parse error at line 7, column 1
7+
|
8+
7 | [type.ignore]
9+
| ^[..]
10+
regex parse error:
11+
(he.*
12+
^
13+
error: unclosed group
14+
15+
"""

0 commit comments

Comments
 (0)