package parser
import "github.com/moby/buildkit/frontend/dockerfile/parser"
The parser package implements a parser that transforms a raw byte-stream into a low-level Abstract Syntax Tree.
Index ¶
- Constants
- func ChompHeredocContent(src string) string
- func WithLocation(err error, location []Range) error
- type Directive
- type DirectiveParser
- func (d *DirectiveParser) ParseAll(data []byte) ([]*Directive, error)
- func (d *DirectiveParser) ParseLine(line []byte) (*Directive, error)
- type ErrorLocation
- type Heredoc
- type Node
- func (node *Node) AddChild(child *Node, startLine, endLine int)
- func (node *Node) Dump() string
- func (node *Node) Location() []Range
- type Position
- type Range
- type Result
- type Warning
Constants ¶
const DefaultEscapeToken = '\\'
DefaultEscapeToken is the default escape token
Functions ¶
func ChompHeredocContent ¶
ChompHeredocContent chomps leading tabs from the heredoc.
func WithLocation ¶
WithLocation extends an error with a source code location
Types ¶
type Directive ¶
type DirectiveParser ¶
type DirectiveParser struct {
// contains filtered or unexported fields
}
DirectiveParser is a parser for Dockerfile directives that enforces the quirks of the directive parser.
func (*DirectiveParser) ParseAll ¶
func (d *DirectiveParser) ParseAll(data []byte) ([]*Directive, error)
func (*DirectiveParser) ParseLine ¶
func (d *DirectiveParser) ParseLine(line []byte) (*Directive, error)
type ErrorLocation ¶
type ErrorLocation struct { Location []Range // contains filtered or unexported fields }
ErrorLocation gives a location in source code that caused the error
func (*ErrorLocation) Unwrap ¶
func (e *ErrorLocation) Unwrap() error
Unwrap unwraps to the next error
type Heredoc ¶
func MustParseHeredoc ¶
MustParseHeredoc is a variant of ParseHeredoc that discards the error, if there was one present.
func ParseHeredoc ¶
ParseHeredoc parses a heredoc word from a target string, returning the components from the doc.
type Node ¶
type Node struct { Value string // actual content Next *Node // the next item in the current sexp Children []*Node // the children of this sexp Heredocs []Heredoc // extra heredoc content attachments Attributes map[string]bool // special attributes for this node Original string // original line used before parsing Flags []string // only top Node should have this set StartLine int // the line in the original dockerfile where the node begins EndLine int // the line in the original dockerfile where the node ends PrevComment []string }
Node is a structure used to represent a parse tree.
In the node there are three fields, Value, Next, and Children. Value is the current token's string value. Next is always the next non-child token, and children contains all the children. Here's an example:
(value next (child child-next child-next-next) next-next)
This data structure is frankly pretty lousy for handling complex languages, but lucky for us the Dockerfile isn't very complicated. This structure works a little more effectively than a "proper" parse tree for our needs.
func (*Node) AddChild ¶
AddChild adds a new child node, and updates line information
func (*Node) Dump ¶
Dump dumps the AST defined by `node` as a list of sexps. Returns a string suitable for printing.
func (*Node) Location ¶
Location return the location of node in source code
type Position ¶
Position is a point in source code
type Range ¶
Range is a code section between two positions
func DetectSyntax ¶
DetectSyntax returns the syntax of provided input.
The traditional dockerfile directives '# syntax = ...' are used by default, however, the function will also fallback to c-style directives '// syntax = ...' and json-encoded directives '{ "syntax": "..." }'. Finally, starting lines with '#!' are treated as shebangs and ignored.
This allows for a flexible range of input formats, and appropriate syntax selection.
type Result ¶
Result contains the bundled outputs from parsing a Dockerfile.
func Parse ¶
Parse consumes lines from a provided Reader, parses each line into an AST and returns the results of doing so.
func (*Result) PrintWarnings ¶
PrintWarnings to the writer
type Warning ¶
Warning contains information to identify and locate a warning generated during parsing.
Source Files ¶
directives.go errors.go line_parsers.go parser.go split_command.go
Directories ¶
Path | Synopsis |
---|---|
frontend/dockerfile/parser/dumper |
- Version
- v0.11.2
- Published
- Jan 26, 2023
- Platform
- js/wasm
- Imports
- 14 packages
- Last checked
- 12 hours ago –
Tools for package owners.