parser

package
v0.10.0 Latest Latest
Warning

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

Go to latest
Published: Mar 9, 2022 License: Apache-2.0 Imports: 14 Imported by: 493

Documentation

Overview

Package parser implements a parser and parse tree dumper for Dockerfiles.

Index

Constants

View Source
const DefaultEscapeToken = '\\'

DefaultEscapeToken is the default escape token

Variables

This section is empty.

Functions

func ChompHeredocContent added in v0.9.0

func ChompHeredocContent(src string) string

func WithLocation added in v0.8.0

func WithLocation(err error, location []Range) error

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

type Heredoc struct {
	Name           string
	FileDescriptor uint
	Expand         bool
	Chomp          bool
	Content        string
}

func MustParseHeredoc added in v0.9.0

func MustParseHeredoc(src string) *Heredoc

func ParseHeredoc added in v0.9.0

func ParseHeredoc(src string) (*Heredoc, error)

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

func (node *Node) AddChild(child *Node, startLine, endLine int)

AddChild adds a new child node, and updates line information

func (*Node) Dump

func (node *Node) Dump() string

Dump dumps the AST defined by `node` as a list of sexps. Returns a string suitable for printing.

func (*Node) Location added in v0.8.0

func (node *Node) Location() []Range

Location return the location of node in source code

type Position added in v0.8.0

type Position struct {
	Line      int
	Character int
}

Position is a point in source code

type Range added in v0.8.0

type Range struct {
	Start Position
	End   Position
}

Range is a code section between two positions

type Result

type Result struct {
	AST         *Node
	EscapeToken rune
	Warnings    []Warning
}

Result is the result of parsing a Dockerfile

func Parse

func Parse(rwc io.Reader) (*Result, error)

Parse reads lines from a Reader, parses the lines into an AST and returns the AST and escape token

func (*Result) PrintWarnings

func (r *Result) PrintWarnings(out io.Writer)

PrintWarnings to the writer

type Warning added in v0.10.0

type Warning struct {
	Short    string
	Detail   [][]byte
	URL      string
	Location *Range
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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