v0.59.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Nov 30, 2023 License: Apache-2.0 Imports: 21 Imported by: 21



Package repl implements a Read-Eval-Print-Loop (REPL) for interacting with the policy engine.

The REPL is typically used from the command line, however, it can also be used as a library. nolint: goconst // String reuse here doesn't make sense to deduplicate.




View Source
const (
	// BadArgsErr indicates bad arguments were provided to a built-in REPL
	// command.
	BadArgsErr string = "bad arguments"


This section is empty.


This section is empty.


type Error added in v0.2.2

type Error struct {
	Code    string
	Message string

Error is the error type returned by the REPL.

func (*Error) Error added in v0.2.2

func (err *Error) Error() string

type REPL

type REPL struct {
	// contains filtered or unexported fields

REPL represents an instance of the interactive shell.

func New

func New(store storage.Store, historyPath string, output io.Writer, outputFormat string, errLimit int, banner string) *REPL

New returns a new instance of the REPL.

func (*REPL) DisableMultiLineBuffering added in v0.2.2

func (r *REPL) DisableMultiLineBuffering(yes bool) *REPL

DisableMultiLineBuffering causes the REPL to not buffer lines when a parse error occurs. Instead, the error will be returned to the caller.

func (*REPL) DisableUndefinedOutput added in v0.2.2

func (r *REPL) DisableUndefinedOutput(yes bool) *REPL

DisableUndefinedOutput causes the REPL to not print any output when the query is undefined.

func (*REPL) Loop

func (r *REPL) Loop(ctx context.Context)

Loop will run until the user enters "exit", Ctrl+C, Ctrl+D, or an unexpected error occurs.

func (*REPL) OneShot

func (r *REPL) OneShot(ctx context.Context, line string) error

OneShot evaluates the line and prints the result. If an error occurs it is returned for the caller to display.


nolint // example code

package main

import (


func main() {
	// Initialize context for the example. Normally the caller would obtain the
	// context from an input parameter or instantiate their own.
	ctx := context.Background()

	// Instantiate the policy engine's storage layer.
	store := inmem.New()

	// Create a buffer that will receive REPL output.
	var buf bytes.Buffer

	// Create a new REPL.
	r := repl.New(store, "", &buf, "json", 0, "")

	// Define a rule inside the REPL.
	r.OneShot(ctx, "p { a = [1, 2, 3, 4]; a[_] > 3 }")

	// Query the rule defined above.
	r.OneShot(ctx, "p")

	// Inspect the output. Defining rules does not produce output so we only expect
	// output from the second line of input.


  "result": [
      "expressions": [
          "value": true,
          "text": "p",
          "location": {
            "row": 1,
            "col": 1

func (*REPL) SetOPAVersionReport added in v0.20.0

func (r *REPL) SetOPAVersionReport(report [][2]string)

SetOPAVersionReport sets the information about the latest OPA release.

func (*REPL) WithCapabilities added in v0.42.0

func (r *REPL) WithCapabilities(capabilities *ast.Capabilities) *REPL

func (*REPL) WithRuntime added in v0.10.0

func (r *REPL) WithRuntime(term *ast.Term) *REPL

WithRuntime sets the runtime data to provide to the evaluation engine.

func (*REPL) WithStderrWriter added in v0.34.0

func (r *REPL) WithStderrWriter(w io.Writer) *REPL

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL