From 8834e4bbdc00985d2c58afef056afac5ed902a67 Mon Sep 17 00:00:00 2001 From: kevin zhao Date: Mon, 10 Nov 2025 23:37:33 -0800 Subject: [PATCH] helper function to get PolicyBuilder + only getting one builder in prefix_rule --- codex-rs/execpolicy2/src/parser.rs | 32 +++++++++++++----------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/codex-rs/execpolicy2/src/parser.rs b/codex-rs/execpolicy2/src/parser.rs index 1822f18b94..3a05c39cf6 100644 --- a/codex-rs/execpolicy2/src/parser.rs +++ b/codex-rs/execpolicy2/src/parser.rs @@ -161,6 +161,15 @@ fn parse_examples<'v>(examples: UnpackList>) -> Result .collect() } +fn policy_builder<'v, 'a>(eval: &Evaluator<'v, 'a, '_>) -> &'a PolicyBuilder { + #[expect(clippy::unwrap_used)] + eval.extra + .as_ref() + .unwrap() + .downcast_ref::() + .unwrap() +} + #[starlark_module] fn policy_builtins(builder: &mut GlobalsBuilder) { fn prefix_rule<'v>( @@ -185,29 +194,16 @@ fn policy_builtins(builder: &mut GlobalsBuilder) { .transpose()? .unwrap_or_default(); - let id = id.map(std::string::ToString::to_string).unwrap_or_else(|| { - #[expect(clippy::unwrap_used)] - let builder = eval - .extra - .as_ref() - .unwrap() - .downcast_ref::() - .unwrap(); - builder.alloc_id() - }); + let builder = policy_builder(eval); + + let id = id + .map(std::string::ToString::to_string) + .unwrap_or_else(|| builder.alloc_id()); let (first_token, remaining_tokens) = pattern_tokens .split_first() .ok_or_else(|| Error::InvalidPattern("pattern cannot be empty".to_string()))?; - #[expect(clippy::unwrap_used)] - let builder = eval - .extra - .as_ref() - .unwrap() - .downcast_ref::() - .unwrap(); - for head in first_token.alternatives() { let rule = Rule { id: id.clone(),