From ceea9075eae2f9856f22ee16ac620571500d3366 Mon Sep 17 00:00:00 2001 From: kevin zhao Date: Wed, 12 Nov 2025 18:51:32 -0500 Subject: [PATCH] docstrings and other cleanup --- codex-rs/execpolicy2/src/parser.rs | 5 ++--- codex-rs/execpolicy2/src/policy.rs | 14 ++++++++++---- codex-rs/execpolicy2/src/rule.rs | 1 + codex-rs/execpolicy2/tests/basic.rs | 1 - 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/codex-rs/execpolicy2/src/parser.rs b/codex-rs/execpolicy2/src/parser.rs index ad7390ace1..2a9540edd6 100644 --- a/codex-rs/execpolicy2/src/parser.rs +++ b/codex-rs/execpolicy2/src/parser.rs @@ -207,12 +207,11 @@ fn policy_builtins(builder: &mut GlobalsBuilder) { let rules: Vec = first_token .alternatives() .iter() - .zip(std::iter::repeat(rest.clone())) - .map(|(head, rest)| { + .map(|head| { Rule::Prefix(PrefixRule { pattern: PrefixPattern { first: Arc::from(head.as_str()), - rest, + rest: rest.clone(), }, decision, }) diff --git a/codex-rs/execpolicy2/src/policy.rs b/codex-rs/execpolicy2/src/policy.rs index cd234f5b0f..54d6942214 100644 --- a/codex-rs/execpolicy2/src/policy.rs +++ b/codex-rs/execpolicy2/src/policy.rs @@ -59,6 +59,7 @@ impl Evaluation { } } +/// Count how many rules match each provided example and error if any example is unmatched. pub(crate) fn validate_match_examples(rules: &[Rule], matches: &[Vec]) -> Result<()> { let match_counts = rules.iter().fold(vec![0; matches.len()], |counts, rule| { counts @@ -71,10 +72,15 @@ pub(crate) fn validate_match_examples(rules: &[Rule], matches: &[Vec]) - let unmatched_examples: Vec = matches .iter() .zip(&match_counts) - .filter(|(_, count)| **count == 0) - .map(|(example, _)| { - try_join(example.iter().map(String::as_str)) - .unwrap_or_else(|_| "unable to render example".to_string()) + .filter_map(|(example, count)| { + if *count == 0 { + Some( + try_join(example.iter().map(String::as_str)) + .unwrap_or_else(|_| "unable to render example".to_string()), + ) + } else { + None + } }) .collect(); diff --git a/codex-rs/execpolicy2/src/rule.rs b/codex-rs/execpolicy2/src/rule.rs index 5fb4bcf1ad..165e0a960e 100644 --- a/codex-rs/execpolicy2/src/rule.rs +++ b/codex-rs/execpolicy2/src/rule.rs @@ -139,6 +139,7 @@ impl Rule { } } + /// Return a boolean for each example indicating whether this rule matches it. pub fn validate_matches(&self, matches: &[Vec]) -> Vec { match self { Self::Prefix(rule) => rule.validate_matches(matches), diff --git a/codex-rs/execpolicy2/tests/basic.rs b/codex-rs/execpolicy2/tests/basic.rs index ab9f78ab46..af1ae048f2 100644 --- a/codex-rs/execpolicy2/tests/basic.rs +++ b/codex-rs/execpolicy2/tests/basic.rs @@ -1,7 +1,6 @@ use std::sync::Arc; use codex_execpolicy2::Decision; -use codex_execpolicy2::Error; use codex_execpolicy2::Evaluation; use codex_execpolicy2::PolicyParser; use codex_execpolicy2::Rule;