Documentation ¶
Overview ¶
Package parser implements a parser and parse tree dumper for Dockerfiles.
Index ¶
Constants ¶
const DefaultEscapeToken = '\\'
DefaultEscapeToken is the default escape token
Variables ¶
This section is empty.
Functions ¶
func ChompHeredocContent ¶ added in v0.9.0
func WithLocation ¶ added in v0.8.0
WithLocation extends an error with a source code location
Types ¶
type ErrorLocation ¶ added in v0.8.0
type ErrorLocation struct { Location []Range // contains filtered or unexported fields }
ErrorLocation gives a location in source code that caused the error
func (*ErrorLocation) Unwrap ¶ added in v0.8.0
func (e *ErrorLocation) Unwrap() error
Unwrap unwraps to the next error
type Heredoc ¶ added in v0.9.0
func MustParseHeredoc ¶ added in v0.9.0
func ParseHeredoc ¶ added in v0.9.0
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.