package common

import "github.com/google/cel-go/common"

Package common defines types and utilities common to expression parsing, checking, and interpretation

Index

Constants

const (
	// SelectAndIdentCost is the cost of an operation that accesses an identifier or performs a select.
	SelectAndIdentCost = 1

	// ConstCost is the cost of an operation that accesses a constant.
	ConstCost = 0

	// ListCreateBaseCost is the base cost of any operation that creates a new list.
	ListCreateBaseCost = 10

	// MapCreateBaseCost is the base cost of any operation that creates a new map.
	MapCreateBaseCost = 30

	// StructCreateBaseCost is the base cost of any operation that creates a new struct.
	StructCreateBaseCost = 40

	// StringTraversalCostFactor is multiplied to a length of a string when computing the cost of traversing the entire
	// string once.
	StringTraversalCostFactor = 0.1

	// RegexStringLengthCostFactor is multiplied ot the length of a regex string pattern when computing the cost of
	// applying the regex to a string of unit cost.
	RegexStringLengthCostFactor = 0.25
)

Variables

var (

	// NoLocation is a particular illegal location.
	NoLocation = &SourceLocation{-1, -1}
)

Types

type Error

type Error struct {
	Location Location
	Message  string
	ExprID   int64
}

Error type which references an expression id, a location within source, and a message.

func NewError

func NewError(id int64, message string, location Location) *Error

NewError creates an error associated with an expression id with the given message at the given location.

func (*Error) ToDisplayString

func (e *Error) ToDisplayString(source Source) string

ToDisplayString decorates the error message with the source location.

type Errors

type Errors struct {
	// contains filtered or unexported fields
}

Errors type which contains a list of errors observed during parsing.

func NewErrors

func NewErrors(source Source) *Errors

NewErrors creates a new instance of the Errors type.

func (*Errors) Append

func (e *Errors) Append(errs []*Error) *Errors

Append creates a new Errors object with the current and input errors.

func (*Errors) GetErrors

func (e *Errors) GetErrors() []*Error

GetErrors returns the list of observed errors.

func (*Errors) ReportError

func (e *Errors) ReportError(l Location, format string, args ...any)

ReportError records an error at a source location.

func (*Errors) ReportErrorAtID

func (e *Errors) ReportErrorAtID(id int64, l Location, format string, args ...any)

ReportErrorAtID records an error at a source location and expression id.

func (*Errors) ToDisplayString

func (e *Errors) ToDisplayString() string

ToDisplayString returns the error set to a newline delimited string.

type Location

type Location interface {
	Line() int   // 1-based line number within source.
	Column() int // 0-based column number within source.
}

Location interface to represent a location within Source.

func NewLocation

func NewLocation(line, column int) Location

NewLocation creates a new location.

type Source

type Source interface {
	// Content returns the source content represented as a string.
	// Examples contents are the single file contents, textbox field,
	// or url parameter.
	Content() string

	// Description gives a brief description of the source.
	// Example descriptions are a file name or ui element.
	Description() string

	// LineOffsets gives the character offsets at which lines occur.
	// The zero-th entry should refer to the break between the first
	// and second line, or EOF if there is only one line of source.
	LineOffsets() []int32

	// LocationOffset translates a Location to an offset.
	// Given the line and column of the Location returns the
	// Location's character offset in the Source, and a bool
	// indicating whether the Location was found.
	LocationOffset(location Location) (int32, bool)

	// OffsetLocation translates a character offset to a Location, or
	// false if the conversion was not feasible.
	OffsetLocation(offset int32) (Location, bool)

	// NewLocation takes an input line and column and produces a Location.
	// The default behavior is to treat the line and column as absolute,
	// but concrete derivations may use this method to convert a relative
	// line and column position into an absolute location.
	NewLocation(line, col int) Location

	// Snippet returns a line of content and whether the line was found.
	Snippet(line int) (string, bool)
}

Source interface for filter source contents.

func NewInfoSource

func NewInfoSource(info *exprpb.SourceInfo) Source

NewInfoSource creates a new Source from a SourceInfo.

func NewStringSource

func NewStringSource(contents string, description string) Source

NewStringSource creates a new Source from the given contents and description.

func NewTextSource

func NewTextSource(text string) Source

NewTextSource creates a new Source from the input text string.

type SourceLocation

type SourceLocation struct {
	// contains filtered or unexported fields
}

SourceLocation helper type to manually construct a location.

func (*SourceLocation) Column

func (l *SourceLocation) Column() int

Column returns the 0-based column number of the location.

func (*SourceLocation) Line

func (l *SourceLocation) Line() int

Line returns the 1-based line of the location.

Source Files

cost.go doc.go error.go errors.go location.go source.go

Directories

PathSynopsis
common/astPackage ast declares data structures useful for parsed and checked abstract syntax trees
common/containersPackage containers defines types and functions for resolving qualified names within a namespace or type provided to CEL.
common/debugPackage debug provides tools to print a parsed expression graph and adorn each expression element with additional metadata.
common/declsPackage decls contains function and variable declaration structs and helper methods.
common/functionsPackage functions defines the standard builtin functions supported by the interpreter
common/operatorsPackage operators defines the internal function names of operators.
common/overloadsPackage overloads defines the internal overload identifiers for function and operator overloads.
common/runesPackage runes provides interfaces and utilities for working with runes.
common/stdlibPackage stdlib contains all of the standard library function declarations and definitions for CEL.
common/typesPackage types contains the types, traits, and utilities common to all components of expression handling.
common/types/pbPackage pb reflects over protocol buffer descriptors to generate objects that simplify type, enum, and field lookup.
common/types/refPackage ref contains the reference interfaces used throughout the types components.
common/types/traitsPackage traits defines interfaces that a type may implement to participate in operator overloads and function dispatch.
Version
v0.17.6
Published
Aug 23, 2023
Platform
js/wasm
Imports
7 packages
Last checked
now

Tools for package owners.