parser

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2024 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KeywordIf          = "if"
	KeywordElse        = "else"
	KeywordWhile       = "while"
	KeywordBreak       = "break"
	KeywordContinue    = "continue"
	KeywordReturn      = "return"
	KeywordTrue        = "true"
	KeywordFalse       = "false"
	KeywordNil         = "nil"
	KeywordLet         = "let"
	KeywordVar         = "var"
	KeywordFun         = "fun"
	KeywordAs          = "as"
	KeywordCreate      = "create"
	KeywordDestroy     = "destroy"
	KeywordFor         = "for"
	KeywordIn          = "in"
	KeywordEmit        = "emit"
	KeywordAuth        = "auth"
	KeywordAccess      = "access"
	KeywordAll         = "all"
	KeywordSelf        = "self"
	KeywordInit        = "init"
	KeywordContract    = "contract"
	KeywordAccount     = "account"
	KeywordImport      = "import"
	KeywordFrom        = "from"
	KeywordPre         = "pre"
	KeywordPost        = "post"
	KeywordEvent       = "event"
	KeywordStruct      = "struct"
	KeywordResource    = "resource"
	KeywordInterface   = "interface"
	KeywordEntitlement = "entitlement"
	KeywordMapping     = "mapping"
	KeywordTransaction = "transaction"
	KeywordPrepare     = "prepare"
	KeywordExecute     = "execute"
	KeywordCase        = "case"
	KeywordSwitch      = "switch"
	KeywordDefault     = "default"
	KeywordEnum        = "enum"
	KeywordView        = "view"
	KeywordAttachment  = "attachment"
	KeywordAttach      = "attach"
	KeywordRemove      = "remove"
	KeywordTo          = "to"
	KeywordRequire     = "require"
	KeywordStatic      = "static"
	KeywordNative      = "native"
	KeywordPub         = "pub"
	KeywordPriv        = "priv"
	KeywordInclude     = "include"
	KeywordTry         = "try"
	KeywordCatch       = "catch"
	KeywordFinally     = "finally"
	KeywordGoto        = "goto"
	KeywordConst       = "const"
	KeywordExport      = "export"
	KeywordThrow       = "throw"
	KeywordThrows      = "throws"
	KeywordRequires    = "requires"
	KeywordWhere       = "where"
	KeywordFinal       = "final"
	KeywordInternal    = "internal"
	KeywordTypealias   = "typealias"
	KeywordType        = "type"
	KeywordRepeat      = "repeat"
	KeywordGuard       = "guard"
	KeywordIs          = "is"
)

NOTE: ensure to update allKeywords when adding a new keyword

Variables

View Source
var HardKeywords = filter(
	allKeywords,
	func(keyword string) bool {
		_, ok := softKeywordsTable.Lookup(keyword)
		return !ok
	},
)

HardKeywords are restricted from being used as identifiers in certain places. i.e: places where ambiguity can exist, such as composite declaration names, function names, etc. However, they are not restricted to be used as fields names, and many other places.

SoftKeywords are keywords that can be used as identifiers anywhere, without any restriction or ambiguity.

Functions

func IsHardKeyword added in v1.0.0

func IsHardKeyword(identifier string) bool

func Parse added in v0.25.0

func Parse[T any](
	memoryGauge common.MemoryGauge,
	input []byte,
	parse func(*parser) (T, error),
	config Config,
) (result T, errors []error)

Parse creates a lexer to scan the given input string, and uses the given `parse` function to parse tokens into a result.

It can be composed with different parse functions to parse the input string into different results. See "ParseExpression", "ParseStatements" as examples.

func ParseArgumentList added in v0.25.0

func ParseArgumentList(
	memoryGauge common.MemoryGauge,
	input []byte,
	config Config,
) (
	arguments ast.Arguments,
	errs []error,
)

func ParseDeclarations added in v0.25.0

func ParseDeclarations(
	memoryGauge common.MemoryGauge,
	input []byte,
	config Config,
) (
	declarations []ast.Declaration,
	errs []error,
)

func ParseDocstringPragmaArguments added in v0.25.0

func ParseDocstringPragmaArguments(docString string) []string

ParseDocstringPragmaArguments parses the docstring and returns the values of all pragma arguments declarations.

A pragma arguments declaration has the form `pragma arguments <argument-list>`, where <argument-list> is a Cadence argument list.

The validity of the argument list is NOT checked by this function.

func ParseDocstringPragmaSigners added in v0.25.0

func ParseDocstringPragmaSigners(docString string) []string

ParseDocstringPragmaSigners parses the docstring and returns the values of all pragma signers declarations.

A pragma signers declaration has the form `pragma signers <signers-list>`, where <signers-list> is a list of strings.

The validity of the argument list is NOT checked by this function.

func ParseExpression

func ParseExpression(
	memoryGauge common.MemoryGauge,
	input []byte,
	config Config,
) (
	expression ast.Expression,
	errs []error,
)

func ParseProgram

func ParseProgram(memoryGauge common.MemoryGauge, code []byte, config Config) (program *ast.Program, err error)

func ParseProgramFromFile

func ParseProgramFromFile(
	memoryGauge common.MemoryGauge,
	filename string,
	config Config,
) (
	program *ast.Program,
	code []byte,
	err error,
)

func ParseProgramFromTokenStream added in v0.25.0

func ParseProgramFromTokenStream(
	memoryGauge common.MemoryGauge,
	input lexer.TokenStream,
	config Config,
) (
	program *ast.Program,
	err error,
)

func ParseStatements added in v0.25.0

func ParseStatements(
	memoryGauge common.MemoryGauge,
	input []byte,
	config Config,
) (
	statements []ast.Statement,
	errs []error,
)

func ParseStatementsFromTokenStream added in v0.39.0

func ParseStatementsFromTokenStream(
	memoryGauge common.MemoryGauge,
	tokens lexer.TokenStream,
	config Config,
) (
	statements []ast.Statement,
	errs []error,
)

func ParseTokenStream added in v0.25.0

func ParseTokenStream[T any](
	memoryGauge common.MemoryGauge,
	tokens lexer.TokenStream,
	parse func(*parser) (T, error),
	config Config,
) (
	result T,
	errs []error,
)

func ParseType added in v0.25.0

func ParseType(memoryGauge common.MemoryGauge, input []byte, config Config) (ty ast.Type, errs []error)

Types

type Config added in v0.30.0

type Config struct {
	// StaticModifierEnabled determines if the static modifier is enabled
	StaticModifierEnabled bool
	// NativeModifierEnabled determines if the native modifier is enabled
	NativeModifierEnabled bool
	// Deprecated: IgnoreLeadingIdentifierEnabled determines
	// if leading identifiers are ignored.
	//
	// Pre-Stable Cadence, identifiers preceding keywords were (incorrectly) ignored,
	// instead of being reported as invalid, e.g. `foo let bar: Int` was valid.
	// The new default behaviour is to report an error, e.g. for `foo` in the example above.
	//
	// This option exists so the old behaviour can be enabled to allow developers to update their code.
	IgnoreLeadingIdentifierEnabled bool
	// TypeParametersEnabled determines if type parameters are enabled
	TypeParametersEnabled bool
}

type CustomDestructorError added in v1.0.0

type CustomDestructorError struct {
	Pos ast.Position
}

func (*CustomDestructorError) EndPosition added in v1.0.0

func (*CustomDestructorError) Error added in v1.0.0

func (e *CustomDestructorError) Error() string

func (*CustomDestructorError) IsUserError added in v1.0.0

func (*CustomDestructorError) IsUserError()

func (*CustomDestructorError) SecondaryError added in v1.0.0

func (e *CustomDestructorError) SecondaryError() string

func (*CustomDestructorError) StartPosition added in v1.0.0

func (e *CustomDestructorError) StartPosition() ast.Position

type Error

type Error struct {
	Code   []byte
	Errors []error
}

func (Error) ChildErrors

func (e Error) ChildErrors() []error

func (Error) Error

func (e Error) Error() string

func (Error) Unwrap added in v0.42.8

func (e Error) Unwrap() []error

type ExpressionDepthLimitReachedError added in v0.25.0

type ExpressionDepthLimitReachedError struct {
	Pos ast.Position
}

ExpressionDepthLimitReachedError is reported when the expression depth limit was reached

func (ExpressionDepthLimitReachedError) EndPosition added in v0.25.0

func (ExpressionDepthLimitReachedError) Error added in v0.25.0

func (ExpressionDepthLimitReachedError) IsUserError added in v0.25.0

func (ExpressionDepthLimitReachedError) IsUserError()

func (ExpressionDepthLimitReachedError) StartPosition added in v0.25.0

func (e ExpressionDepthLimitReachedError) StartPosition() ast.Position

type InvalidIntegerLiteralError

type InvalidIntegerLiteralError struct {
	Literal                   string
	IntegerLiteralKind        common.IntegerLiteralKind
	InvalidIntegerLiteralKind InvalidNumberLiteralKind
	ast.Range
}

func (*InvalidIntegerLiteralError) Error

func (*InvalidIntegerLiteralError) IsUserError added in v0.25.0

func (*InvalidIntegerLiteralError) IsUserError()

func (*InvalidIntegerLiteralError) SecondaryError

func (e *InvalidIntegerLiteralError) SecondaryError() string

type InvalidNumberLiteralKind

type InvalidNumberLiteralKind uint
const (
	InvalidNumberLiteralKindUnknown InvalidNumberLiteralKind = iota
	InvalidNumberLiteralKindLeadingUnderscore
	InvalidNumberLiteralKindTrailingUnderscore
	InvalidNumberLiteralKindUnknownPrefix
	InvalidNumberLiteralKindMissingDigits
)

func (InvalidNumberLiteralKind) Description

func (k InvalidNumberLiteralKind) Description() string

func (InvalidNumberLiteralKind) String

func (i InvalidNumberLiteralKind) String() string

type JuxtaposedUnaryOperatorsError

type JuxtaposedUnaryOperatorsError struct {
	Pos ast.Position
}

func (*JuxtaposedUnaryOperatorsError) EndPosition

func (*JuxtaposedUnaryOperatorsError) Error

func (*JuxtaposedUnaryOperatorsError) IsUserError added in v0.25.0

func (*JuxtaposedUnaryOperatorsError) IsUserError()

func (*JuxtaposedUnaryOperatorsError) StartPosition

func (e *JuxtaposedUnaryOperatorsError) StartPosition() ast.Position

type MissingCommaInParameterListError added in v0.25.0

type MissingCommaInParameterListError struct {
	Pos ast.Position
}

func (*MissingCommaInParameterListError) EndPosition added in v0.25.0

func (*MissingCommaInParameterListError) Error added in v0.25.0

func (*MissingCommaInParameterListError) IsUserError added in v0.25.0

func (*MissingCommaInParameterListError) IsUserError()

func (*MissingCommaInParameterListError) StartPosition added in v0.25.0

func (e *MissingCommaInParameterListError) StartPosition() ast.Position

type ParseError

type ParseError interface {
	errors.UserError
	ast.HasPosition
	// contains filtered or unexported methods
}

type RestrictedTypeError added in v1.0.0

type RestrictedTypeError struct {
	ast.Range
}

func (*RestrictedTypeError) Error added in v1.0.0

func (e *RestrictedTypeError) Error() string

func (*RestrictedTypeError) IsUserError added in v1.0.0

func (*RestrictedTypeError) IsUserError()

type SyntaxError

type SyntaxError struct {
	Message string
	Pos     ast.Position
}

func NewSyntaxError added in v0.25.0

func NewSyntaxError(pos ast.Position, message string, params ...any) *SyntaxError

func (*SyntaxError) EndPosition

func (e *SyntaxError) EndPosition(_ common.MemoryGauge) ast.Position

func (*SyntaxError) Error

func (e *SyntaxError) Error() string

func (*SyntaxError) IsUserError added in v0.25.0

func (*SyntaxError) IsUserError()

func (*SyntaxError) StartPosition

func (e *SyntaxError) StartPosition() ast.Position

type SyntaxErrorWithSuggestedReplacement added in v1.0.0

type SyntaxErrorWithSuggestedReplacement struct {
	Message      string
	SuggestedFix string
	ast.Range
}

func NewSyntaxErrorWithSuggestedReplacement added in v1.0.0

func NewSyntaxErrorWithSuggestedReplacement(r ast.Range, message string, suggestedFix string) *SyntaxErrorWithSuggestedReplacement

func (*SyntaxErrorWithSuggestedReplacement) Error added in v1.0.0

func (*SyntaxErrorWithSuggestedReplacement) IsUserError added in v1.0.0

func (*SyntaxErrorWithSuggestedReplacement) IsUserError()

func (*SyntaxErrorWithSuggestedReplacement) SuggestFixes added in v1.0.0

type TypeDepthLimitReachedError added in v0.25.0

type TypeDepthLimitReachedError struct {
	Pos ast.Position
}

func (TypeDepthLimitReachedError) EndPosition added in v0.25.0

func (TypeDepthLimitReachedError) Error added in v0.25.0

func (TypeDepthLimitReachedError) IsUserError added in v0.25.0

func (TypeDepthLimitReachedError) IsUserError()

func (TypeDepthLimitReachedError) StartPosition added in v0.25.0

func (e TypeDepthLimitReachedError) StartPosition() ast.Position

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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