diff --git a/codex-rs/execpolicy2/src/parser.rs b/codex-rs/execpolicy2/src/parser.rs index 2d725a35d3..e70a13c2ac 100644 --- a/codex-rs/execpolicy2/src/parser.rs +++ b/codex-rs/execpolicy2/src/parser.rs @@ -92,8 +92,7 @@ fn parse_pattern<'v>(pattern: UnpackList>) -> Result fn parse_pattern_token<'v>(value: Value<'v>) -> Result { if let Some(s) = value.unpack_str() { Ok(PatternToken::Single(s.to_string())) - } - else if let Some(list) = ListRef::from_value(value) { + } else if let Some(list) = ListRef::from_value(value) { let tokens: Vec = list .content() .iter() diff --git a/codex-rs/execpolicy2/src/policy.rs b/codex-rs/execpolicy2/src/policy.rs index e06fa3855c..491c83b9d2 100644 --- a/codex-rs/execpolicy2/src/policy.rs +++ b/codex-rs/execpolicy2/src/policy.rs @@ -44,19 +44,9 @@ impl Policy { None => return Evaluation::NoMatch, }; - let mut matched_rules: Vec = Vec::new(); - let mut strictest_decision: Option = None; - for rule in rules { - if let Some(matched) = rule.matches(cmd) { - let decision = match strictest_decision { - None => matched.decision(), - Some(current) => std::cmp::max(matched.decision(), current), - }; - strictest_decision = Some(decision); - matched_rules.push(matched); - } - } - match strictest_decision { + let matched_rules: Vec = + rules.iter().filter_map(|rule| rule.matches(cmd)).collect(); + match matched_rules.iter().map(RuleMatch::decision).max() { Some(decision) => Evaluation::Match { decision, matched_rules,