d2ir

package
v0.6.7 Latest Latest
Warning

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

Go to latest
Published: Sep 28, 2024 License: MPL-2.0 Imports: 17 Imported by: 2

Documentation

Overview

Package d2ir implements a tree data structure to keep track of the resolved value of D2 keys.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BoardIDA added in v0.2.4

func BoardIDA(n Node) (ida []string)

BoardIDA returns the absolute path to n from the nearest board root.

func ExpandSubstitution added in v0.6.7

func ExpandSubstitution(m, resolved *Map, placeholder *Field)

func IDA

func IDA(n Node) (ida []string)

IDA returns the absolute path to n.

func IsVar added in v0.6.0

func IsVar(n Node) bool

func OverlayEdge

func OverlayEdge(be, oe *Edge)

func OverlayField

func OverlayField(bf, of *Field)

func OverlayMap

func OverlayMap(base, overlay *Map)

func ParentShape added in v0.6.1

func ParentShape(n Node) string

func RelIDA added in v0.6.0

func RelIDA(p, n Node) (ida []string)

RelIDA returns the path to n relative to p.

Types

type Array

type Array struct {
	Values []Value `json:"values"`
	// contains filtered or unexported fields
}

func (*Array) AST added in v0.6.0

func (a *Array) AST() d2ast.Node

func (*Array) Copy

func (a *Array) Copy(newParent Node) Node

func (*Array) Equal added in v0.2.2

func (a *Array) Equal(n2 Node) bool

func (*Array) LastPrimaryKey

func (n *Array) LastPrimaryKey() *d2ast.Key

func (*Array) LastPrimaryRef added in v0.6.1

func (n *Array) LastPrimaryRef() Reference

func (*Array) LastRef

func (n *Array) LastRef() Reference

func (*Array) Map

func (n *Array) Map() *Map

func (*Array) Parent

func (n *Array) Parent() Node

func (*Array) Primary

func (n *Array) Primary() *Scalar

func (*Array) String

func (n *Array) String() string

type BoardKind

type BoardKind string
const (
	BoardLayer    BoardKind = "layer"
	BoardScenario BoardKind = "scenario"
	BoardStep     BoardKind = "step"
)

func NodeBoardKind

func NodeBoardKind(n Node) BoardKind

NodeBoardKind reports whether n represents the root of a board. n should be *Field or *Map

type CompileOptions added in v0.5.0

type CompileOptions struct {
	UTF16Pos bool
	// Pass nil to disable imports.
	FS fs.FS
}

type Composite

type Composite interface {
	Node
	Value
	// contains filtered or unexported methods
}

type Edge

type Edge struct {
	ID *EdgeID `json:"edge_id"`

	Primary_ *Scalar `json:"primary,omitempty"`
	Map_     *Map    `json:"map,omitempty"`

	References []*EdgeReference `json:"references,omitempty"`
	// contains filtered or unexported fields
}

func ParentEdge

func ParentEdge(n Node) *Edge

func (*Edge) AST added in v0.6.0

func (e *Edge) AST() d2ast.Node

func (*Edge) Copy

func (e *Edge) Copy(newParent Node) Node

func (*Edge) Equal added in v0.2.2

func (e *Edge) Equal(n2 Node) bool

func (*Edge) IDString added in v0.6.1

func (e *Edge) IDString() string

func (*Edge) LastPrimaryKey

func (e *Edge) LastPrimaryKey() *d2ast.Key

func (*Edge) LastPrimaryRef added in v0.6.1

func (e *Edge) LastPrimaryRef() Reference

func (*Edge) LastRef

func (e *Edge) LastRef() Reference

func (*Edge) Map

func (n *Edge) Map() *Map

func (*Edge) Parent

func (n *Edge) Parent() Node

func (*Edge) Primary

func (n *Edge) Primary() *Scalar

func (*Edge) String

func (n *Edge) String() string

type EdgeID

type EdgeID struct {
	SrcPath  []string `json:"src_path"`
	SrcArrow bool     `json:"src_arrow"`

	DstPath  []string `json:"dst_path"`
	DstArrow bool     `json:"dst_arrow"`

	// If nil, then any EdgeID with equal src/dst/arrows matches.
	Index *int `json:"index"`
	Glob  bool `json:"glob"`
}

func NewEdgeIDs

func NewEdgeIDs(k *d2ast.Key) (eida []*EdgeID)

func (*EdgeID) Copy

func (eid *EdgeID) Copy() *EdgeID

func (*EdgeID) Match

func (eid *EdgeID) Match(eid2 *EdgeID) bool

type EdgeReference

type EdgeReference struct {
	Context_       *RefContext `json:"context"`
	DueToGlob_     bool        `json:"due_to_glob"`
	DueToLazyGlob_ bool        `json:"due_to_lazy_glob"`
}

func (*EdgeReference) AST

func (er *EdgeReference) AST() d2ast.Node

func (*EdgeReference) Context

func (r *EdgeReference) Context() *RefContext

func (*EdgeReference) DueToGlob added in v0.6.1

func (r *EdgeReference) DueToGlob() bool

func (*EdgeReference) DueToLazyGlob added in v0.6.1

func (r *EdgeReference) DueToLazyGlob() bool

func (*EdgeReference) Primary

func (er *EdgeReference) Primary() bool

Primary returns true if the Value in Context.Key.Value corresponds to the *Edge represented by Context.Edge

type Field

type Field struct {
	Name string `json:"name"`

	// Primary_ to avoid clashing with Primary(). We need to keep it exported for
	// encoding/json to marshal it so cannot prefix _ instead.
	Primary_  *Scalar   `json:"primary,omitempty"`
	Composite Composite `json:"composite,omitempty"`

	References []*FieldReference `json:"references,omitempty"`
	// contains filtered or unexported fields
}

func ParentField

func ParentField(n Node) *Field

func (*Field) AST added in v0.6.0

func (f *Field) AST() d2ast.Node

func (*Field) Copy

func (f *Field) Copy(newParent Node) Node

func (*Field) Equal added in v0.2.2

func (f *Field) Equal(n2 Node) bool

func (*Field) LastPrimaryKey

func (f *Field) LastPrimaryKey() *d2ast.Key

func (*Field) LastPrimaryRef added in v0.6.1

func (f *Field) LastPrimaryRef() Reference

func (*Field) LastRef

func (f *Field) LastRef() Reference

func (*Field) Map

func (n *Field) Map() *Map

func (*Field) Parent

func (n *Field) Parent() Node

func (*Field) Primary

func (n *Field) Primary() *Scalar

func (*Field) Root

func (f *Field) Root() bool

func (*Field) String

func (n *Field) String() string

type FieldReference

type FieldReference struct {
	String  d2ast.String   `json:"string"`
	KeyPath *d2ast.KeyPath `json:"key_path"`

	Context_       *RefContext `json:"context"`
	DueToGlob_     bool        `json:"due_to_glob"`
	DueToLazyGlob_ bool        `json:"due_to_lazy_glob"`
}

func (*FieldReference) AST

func (fr *FieldReference) AST() d2ast.Node

func (*FieldReference) Context

func (r *FieldReference) Context() *RefContext

func (*FieldReference) DueToGlob added in v0.6.1

func (r *FieldReference) DueToGlob() bool

func (*FieldReference) DueToLazyGlob added in v0.6.1

func (r *FieldReference) DueToLazyGlob() bool

func (*FieldReference) EdgeDest

func (fr *FieldReference) EdgeDest() bool

func (*FieldReference) InEdge

func (fr *FieldReference) InEdge() bool

func (*FieldReference) KeyPathIndex

func (fr *FieldReference) KeyPathIndex() int

func (*FieldReference) Primary

func (fr *FieldReference) Primary() bool

Primary returns true if the Value in Context.Key.Value corresponds to the Field represented by String.

type Map

type Map struct {
	Fields []*Field `json:"fields"`
	Edges  []*Edge  `json:"edges"`
	// contains filtered or unexported fields
}

func Compile

func Compile(ast *d2ast.Map, opts *CompileOptions) (*Map, []string, error)

func ParentMap

func ParentMap(n Node) *Map

func RootMap added in v0.4.0

func RootMap(m *Map) *Map

func (*Map) AST added in v0.6.0

func (m *Map) AST() d2ast.Node

func (*Map) Copy

func (m *Map) Copy(newParent Node) Node

func (*Map) CopyBase

func (m *Map) CopyBase(newParent Node) *Map

CopyBase copies the map m without layers/scenarios/steps.

func (*Map) CreateEdge

func (m *Map) CreateEdge(eid *EdgeID, refctx *RefContext, c *compiler) ([]*Edge, error)

func (*Map) DeleteEdge added in v0.6.0

func (m *Map) DeleteEdge(eid *EdgeID) *Edge

func (*Map) DeleteField

func (m *Map) DeleteField(ida ...string) *Field

func (*Map) EdgeCountRecursive

func (m *Map) EdgeCountRecursive() int

func (*Map) EnsureField

func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext, create bool, c *compiler) ([]*Field, error)

EnsureField is a bit of a misnomer. It's more of a Query/Ensure combination function at this point.

func (*Map) Equal added in v0.2.2

func (m *Map) Equal(n2 Node) bool

func (*Map) FieldCountRecursive

func (m *Map) FieldCountRecursive() int

func (*Map) GetClassMap added in v0.4.0

func (m *Map) GetClassMap(name string) *Map

func (*Map) GetEdges

func (m *Map) GetEdges(eid *EdgeID, refctx *RefContext, c *compiler) []*Edge

func (*Map) GetField

func (m *Map) GetField(ida ...string) *Field

func (*Map) InClass added in v0.4.2

func (m *Map) InClass(key *d2ast.Key) bool

func (*Map) IsClass added in v0.4.2

func (m *Map) IsClass() bool

func (*Map) IsContainer added in v0.6.0

func (m *Map) IsContainer() bool

func (*Map) LastPrimaryKey

func (n *Map) LastPrimaryKey() *d2ast.Key

func (*Map) LastPrimaryRef added in v0.6.1

func (n *Map) LastPrimaryRef() Reference

func (*Map) LastRef

func (n *Map) LastRef() Reference

func (*Map) Map

func (n *Map) Map() *Map

func (*Map) Parent

func (n *Map) Parent() Node

func (*Map) Primary

func (n *Map) Primary() *Scalar

func (*Map) Query

func (m *Map) Query(idStr string) (Node, error)

Query is only for tests and debugging.

func (*Map) QueryAll

func (m *Map) QueryAll(idStr string) (na []Node, _ error)

QueryAll is only for tests and debugging.

func (*Map) Root

func (m *Map) Root() bool

Root reports whether the Map is the root of the D2 tree.

func (*Map) String

func (n *Map) String() string

type Node

type Node interface {
	Copy(newParent Node) Node
	Parent() Node
	Primary() *Scalar
	Map() *Map
	Equal(n2 Node) bool

	AST() d2ast.Node
	fmt.Stringer

	LastRef() Reference
	LastPrimaryRef() Reference
	LastPrimaryKey() *d2ast.Key
	// contains filtered or unexported methods
}

Most errors returned by a node should be created with d2parser.Errorf to indicate the offending AST node.

func ParentBoard

func ParentBoard(n Node) Node

type RefContext

type RefContext struct {
	Edge     *d2ast.Edge `json:"edge"`
	Key      *d2ast.Key  `json:"key"`
	Scope    *d2ast.Map  `json:"-"`
	ScopeMap *Map        `json:"-"`
	ScopeAST *d2ast.Map  `json:"-"`
}

func (*RefContext) Copy

func (rc *RefContext) Copy() *RefContext

func (*RefContext) EdgeIndex

func (rc *RefContext) EdgeIndex() int

func (*RefContext) Equal added in v0.6.1

func (rc *RefContext) Equal(rc2 *RefContext) bool

type Reference

type Reference interface {

	// Most specific AST node for the reference.
	AST() d2ast.Node
	Primary() bool
	Context() *RefContext
	// Result of a glob in Context or from above.
	DueToGlob() bool
	DueToLazyGlob() bool
	// contains filtered or unexported methods
}

type Scalar

type Scalar struct {
	Value d2ast.Scalar `json:"value"`
	// contains filtered or unexported fields
}

func (*Scalar) AST added in v0.6.0

func (s *Scalar) AST() d2ast.Node

func (*Scalar) Copy

func (s *Scalar) Copy(newParent Node) Node

func (*Scalar) Equal

func (s *Scalar) Equal(n2 Node) bool

func (*Scalar) LastPrimaryKey

func (n *Scalar) LastPrimaryKey() *d2ast.Key

func (*Scalar) LastPrimaryRef added in v0.6.1

func (n *Scalar) LastPrimaryRef() Reference

func (*Scalar) LastRef

func (n *Scalar) LastRef() Reference

func (*Scalar) Map

func (n *Scalar) Map() *Map

func (*Scalar) Parent

func (n *Scalar) Parent() Node

func (*Scalar) Primary

func (n *Scalar) Primary() *Scalar

func (*Scalar) String

func (n *Scalar) String() string

type Value

type Value interface {
	Node
	// contains filtered or unexported methods
}

Jump to

Keyboard shortcuts

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