From e51178cb27918bced7486d34147c22ca13d51673 Mon Sep 17 00:00:00 2001 From: kevin zhao Date: Wed, 12 Nov 2025 17:53:15 -0500 Subject: [PATCH] consolidate new() and parse() in PolicyParser --- codex-rs/execpolicy2/src/main.rs | 3 +-- codex-rs/execpolicy2/src/parser.rs | 17 ++++------------- codex-rs/execpolicy2/tests/basic.rs | 16 +++++----------- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/codex-rs/execpolicy2/src/main.rs b/codex-rs/execpolicy2/src/main.rs index 18fa746a97..9924152daf 100644 --- a/codex-rs/execpolicy2/src/main.rs +++ b/codex-rs/execpolicy2/src/main.rs @@ -47,6 +47,5 @@ fn load_policy(policy_path: &Path) -> Result { let content = fs::read_to_string(policy_path) .with_context(|| format!("failed to read policy at {}", policy_path.display()))?; let policy_source = policy_path.to_string_lossy(); - let parser = PolicyParser::new(policy_source.as_ref(), &content); - Ok(parser.parse()?) + Ok(PolicyParser::parse(policy_source.as_ref(), &content)?) } diff --git a/codex-rs/execpolicy2/src/parser.rs b/codex-rs/execpolicy2/src/parser.rs index eb5899a061..f61002560f 100644 --- a/codex-rs/execpolicy2/src/parser.rs +++ b/codex-rs/execpolicy2/src/parser.rs @@ -22,23 +22,14 @@ use crate::rule::PrefixPattern; use crate::rule::PrefixRule; use crate::rule::Rule; -pub struct PolicyParser { - policy_source: String, - unparsed_policy: String, -} +// todo: support parsing multiple policies +pub struct PolicyParser; impl PolicyParser { - pub fn new(policy_source: &str, unparsed_policy: &str) -> Self { - Self { - policy_source: policy_source.to_string(), - unparsed_policy: unparsed_policy.to_string(), - } - } - - pub fn parse(&self) -> Result { + pub fn parse(policy_source: &str, unparsed_policy: &str) -> Result { let mut dialect = Dialect::Extended.clone(); dialect.enable_f_strings = true; - let ast = AstModule::parse(&self.policy_source, self.unparsed_policy.clone(), &dialect) + let ast = AstModule::parse(policy_source, unparsed_policy.to_string(), &dialect) .map_err(|e| Error::Starlark(e.to_string()))?; let globals = GlobalsBuilder::standard().with(policy_builtins).build(); let module = Module::new(); diff --git a/codex-rs/execpolicy2/tests/basic.rs b/codex-rs/execpolicy2/tests/basic.rs index 1a4ee58884..af1ae048f2 100644 --- a/codex-rs/execpolicy2/tests/basic.rs +++ b/codex-rs/execpolicy2/tests/basic.rs @@ -21,9 +21,7 @@ prefix_rule( pattern = ["git", "status"], ) "#; - let policy = PolicyParser::new("test.codexpolicy", policy_src) - .parse() - .expect("parse policy"); + let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy"); let cmd = tokens(&["git", "status"]); let evaluation = policy.check(&cmd); assert_eq!( @@ -45,8 +43,7 @@ prefix_rule( pattern = [["bash", "sh"], ["-c", "-l"]], ) "#; - let parser = PolicyParser::new("test.codexpolicy", policy_src); - let policy = parser.parse().expect("parse policy"); + let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy"); let bash_rules = policy.rules().get_vec("bash").expect("bash rules"); let sh_rules = policy.rules().get_vec("sh").expect("sh rules"); @@ -103,8 +100,7 @@ prefix_rule( pattern = ["npm", ["i", "install"], ["--legacy-peer-deps", "--no-save"]], ) "#; - let parser = PolicyParser::new("test.codexpolicy", policy_src); - let policy = parser.parse().expect("parse policy"); + let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy"); let rules = policy.rules().get_vec("npm").expect("npm rules"); assert_eq!( @@ -162,8 +158,7 @@ prefix_rule( ], ) "#; - let parser = PolicyParser::new("test.codexpolicy", policy_src); - let policy = parser.parse().expect("parse policy"); + let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy"); let match_eval = policy.check(&tokens(&["git", "status"])); assert_eq!( Evaluation::Match { @@ -201,8 +196,7 @@ prefix_rule( decision = "forbidden", ) "#; - let parser = PolicyParser::new("test.codexpolicy", policy_src); - let policy = parser.parse().expect("parse policy"); + let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy"); let status = policy.check(&tokens(&["git", "status"])); assert_eq!(