diff --git a/policy/tester.go b/policy/tester.go index 4baae4cb2..9c2937e54 100644 --- a/policy/tester.go +++ b/policy/tester.go @@ -7,7 +7,6 @@ import ( "io/fs" "maps" "path/filepath" - "slices" "sort" "strings" @@ -212,20 +211,7 @@ func loadPolicyModules(root fs.StatFS, filename string) (map[string]*ast.Module, } func compilePolicyModules(modules map[string]*ast.Module, p *Policy, fsProvider func() (fs.StatFS, func() error, error)) (*ast.Compiler, func() error, error) { - caps := &ast.Capabilities{ - Builtins: builtins(), - Features: slices.Clone(ast.Features), - } - comp := ast.NewCompiler().WithCapabilities(caps).WithKeepModules(true) - - builtinDefs := make(map[string]*ast.Builtin) - for _, f := range p.funcs { - builtinDefs[f.decl.Name] = &ast.Builtin{ - Name: f.decl.Name, - Decl: f.decl.Decl, - } - } - comp = comp.WithBuiltins(builtinDefs) + comp := ast.NewCompiler().WithCapabilities(p.capabilities()).WithKeepModules(true) loader, closeLoader := newPolicyModuleLoader(fsProvider) comp = comp.WithModuleLoader(loader) diff --git a/policy/validate.go b/policy/validate.go index 0f8a7bfac..5bd41be4a 100644 --- a/policy/validate.go +++ b/policy/validate.go @@ -130,25 +130,26 @@ func (p *Policy) IsPolicyError(err error) bool { return false } -func (p *Policy) regoBaseOpts() ([]func(*rego.Rego), func(), error) { +func (p *Policy) capabilities() *ast.Capabilities { caps := &ast.Capabilities{ Builtins: builtins(), Features: slices.Clone(ast.Features), } - comp := ast.NewCompiler().WithCapabilities(caps).WithKeepModules(true) + for _, f := range p.funcs { + caps.Builtins = append(caps.Builtins, &ast.Builtin{ + Name: f.decl.Name, + Decl: f.decl.Decl, + }) + } + return caps +} + +func (p *Policy) regoBaseOpts() ([]func(*rego.Rego), func(), error) { + comp := ast.NewCompiler().WithCapabilities(p.capabilities()).WithKeepModules(true) if p.opt.Log != nil { comp = comp.WithEnablePrintStatements(true) } - builtins := make(map[string]*ast.Builtin) - for _, f := range p.funcs { - builtins[f.decl.Name] = &ast.Builtin{ - Name: f.decl.Name, - Decl: f.decl.Decl, - } - } - comp = comp.WithBuiltins(builtins) - var root fs.StatFS var closeFS func() error closeRoot := func() {