Skip to main content

pedant_core/check_config/
pattern.rs

1use std::sync::Arc;
2
3use serde::Deserialize;
4
5use super::string_list::deserialize_arc_str_slice;
6
7/// A set of glob patterns matched against rendered AST node text.
8#[derive(Debug, Deserialize, Default, Clone)]
9#[serde(deny_unknown_fields)]
10pub struct PatternCheck {
11    /// Master switch; `false` skips all patterns.
12    #[serde(default)]
13    pub enabled: bool,
14    /// Glob patterns (e.g., `.unwrap()`, `allow(dead_code)`).
15    #[serde(default, deserialize_with = "deserialize_arc_str_slice")]
16    pub patterns: Arc<[Arc<str>]>,
17}
18
19impl PatternCheck {
20    /// Merge a path-specific override, replacing fields that are set.
21    pub fn apply_override(&mut self, ovr: &PatternOverride) {
22        if let Some(enabled) = ovr.enabled {
23            self.enabled = enabled;
24        }
25        if !ovr.patterns.is_empty() {
26            self.patterns = ovr.patterns.clone();
27        }
28    }
29}
30
31/// Path-specific overrides for a pattern check. `None` inherits from base config.
32#[derive(Debug, Deserialize, Default, Clone)]
33#[serde(deny_unknown_fields)]
34pub struct PatternOverride {
35    /// Replace the enabled state.
36    pub enabled: Option<bool>,
37    /// Replace the pattern list. Empty slice inherits from base.
38    #[serde(default, deserialize_with = "deserialize_arc_str_slice")]
39    pub patterns: Arc<[Arc<str>]>,
40}