package common
import "github.com/google/cel-go/common"
Package common defines types and utilities common to expression parsing, checking, and interpretation
Index ¶
- Constants
- Variables
- func MultilineDescription(lines ...string) string
- func ParseDescription(doc string) string
- func ParseDescriptions(doc string) []string
- type Doc
- func NewExampleDoc(ex string) *Doc
- func NewFunctionDoc(name, description string, overloads ...*Doc) *Doc
- func NewMacroDoc(name, description string, examples ...*Doc) *Doc
- func NewOverloadDoc(id, signature string, examples ...*Doc) *Doc
- func NewVariableDoc(name, celType, description string) *Doc
- type DocKind
- type Documentor
- type Error
- func NewError(id int64, message string, location Location) *Error
- func (e *Error) ToDisplayString(source Source) string
- type Errors
- func NewErrors(source Source) *Errors
- func (e *Errors) Append(errs []*Error) *Errors
- func (e *Errors) GetErrors() []*Error
- func (e *Errors) ReportError(l Location, format string, args ...any)
- func (e *Errors) ReportErrorAtID(id int64, l Location, format string, args ...any)
- func (e *Errors) ReportErrorString(l Location, message string)
- func (e *Errors) ToDisplayString() string
- type Location
- type Source
- func NewInfoSource(info *exprpb.SourceInfo) Source
- func NewStringSource(contents string, description string) Source
- func NewTextSource(text string) Source
- type SourceLocation
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 ¶
MultilineDescription combines multiple lines into a newline separated string.
func ParseDescription ¶
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 ¶
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 ¶
NewExampleDoc creates a new Doc struct specifically for holding an example.
func NewFunctionDoc ¶
NewFunctionDoc creates a new Doc struct for documenting a function.
func NewMacroDoc ¶
NewMacroDoc creates a new Doc struct for documenting a macro.
func NewOverloadDoc ¶
NewOverloadDoc creates a new Doc struct for a function example.
func NewVariableDoc ¶
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 ¶
Error type which references an expression id, a location within source, and a message.
func NewError ¶
NewError creates an error associated with an expression id with the given message at the given location.
func (*Error) ToDisplayString ¶
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 ¶
NewErrors creates a new instance of the Errors type.
func (*Errors) Append ¶
Append creates a new Errors object with the current and input errors.
func (*Errors) GetErrors ¶
GetErrors returns the list of observed errors.
func (*Errors) ReportError ¶
ReportError records an error at a source location.
func (*Errors) ReportErrorAtID ¶
ReportErrorAtID records an error at a source location and expression id.
func (*Errors) ReportErrorString ¶
ReportErrorString records an error at a source location.
func (*Errors) ToDisplayString ¶
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 ¶
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 ¶
NewStringSource creates a new Source from the given contents and description.
func NewTextSource ¶
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 ¶
Path | Synopsis |
---|---|
common/ast | Package ast declares data structures useful for parsed and checked abstract syntax trees |
common/containers | Package containers defines types and functions for resolving qualified names within a namespace or type provided to CEL. |
common/debug | Package debug provides tools to print a parsed expression graph and adorn each expression element with additional metadata. |
common/decls | Package decls contains function and variable declaration structs and helper methods. |
common/env | Package env provides a representation of a CEL environment. |
common/functions | Package functions defines the standard builtin functions supported by the interpreter |
common/operators | Package operators defines the internal function names of operators. |
common/overloads | Package overloads defines the internal overload identifiers for function and operator overloads. |
common/runes | Package runes provides interfaces and utilities for working with runes. |
common/stdlib | Package stdlib contains all of the standard library function declarations and definitions for CEL. |
common/types | Package types contains the types, traits, and utilities common to all components of expression handling. |
common/types/pb | Package pb reflects over protocol buffer descriptors to generate objects that simplify type, enum, and field lookup. |
common/types/ref | Package ref contains the reference interfaces used throughout the types components. |
common/types/traits | Package 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.