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}
)

Functions

func MultilineDescription

func MultilineDescription(lines ...string) string

MultilineDescription combines multiple lines into a newline separated string.

func ParseDescription

func ParseDescription(doc string) string

ParseDescription takes a single string containing newline characters and splits it into a multiline description. All empty lines will be skipped.

Returns an empty string if the input string is empty.

func ParseDescriptions

func ParseDescriptions(doc string) []string

ParseDescriptions splits a documentation string into multiple multi-line description sections, using blank lines as delimiters.

Types

type Doc

type Doc struct {
	// Kind specifies the type of documentation element (e.g., Function, Variable).
	Kind DocKind

	// Name is the identifier of the documented element (e.g., function name, variable name).
	Name string

	// Type is the data type associated with the element, primarily used for variables.
	Type string

	// Signature represents the function or overload signature.
	Signature string

	// Description holds the textual description of the element, potentially spanning multiple lines.
	Description string

	// Children holds nested documentation elements, such as overloads for a function
	// or examples for a function/macro.
	Children []*Doc
}

Doc holds the documentation details for a specific program element like a variable, function, macro, or example.

func NewExampleDoc

func NewExampleDoc(ex string) *Doc

NewExampleDoc creates a new Doc struct specifically for holding an example.

func NewFunctionDoc

func NewFunctionDoc(name, description string, overloads ...*Doc) *Doc

NewFunctionDoc creates a new Doc struct for documenting a function.

func NewMacroDoc

func NewMacroDoc(name, description string, examples ...*Doc) *Doc

NewMacroDoc creates a new Doc struct for documenting a macro.

func NewOverloadDoc

func NewOverloadDoc(id, signature string, examples ...*Doc) *Doc

NewOverloadDoc creates a new Doc struct for a function example.

func NewVariableDoc

func NewVariableDoc(name, celType, description string) *Doc

NewVariableDoc creates a new Doc struct specifically for documenting a variable.

type DocKind

type DocKind int

DocKind indicates the type of documentation element.

const (
	// DocEnv represents environment variable documentation.
	DocEnv DocKind = iota + 1
	// DocFunction represents function documentation.
	DocFunction
	// DocOverload represents function overload documentation.
	DocOverload
	// DocVariable represents variable documentation.
	DocVariable
	// DocMacro represents macro documentation.
	DocMacro
	// DocExample represents example documentation.
	DocExample
)

type Documentor

type Documentor interface {
	// Documentation returns the documentation coded by the DocKind to assist
	// with text formatting.
	Documentation() *Doc
}

Documentor is an interface for types that can provide their own documentation.

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) ReportErrorString

func (e *Errors) ReportErrorString(l Location, message string)

ReportErrorString records an error at a source location.

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/envPackage env provides a representation of a CEL environment.
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.25.0 (latest)
Published
Apr 22, 2025
Platform
linux/amd64
Imports
7 packages
Last checked
1 hour ago

Tools for package owners.