Documentation
¶
Overview ¶
This package defines source code entities - abstractions that end-user (a programmer) operates on. For convenience these structures have json tags. This is not clean architecture but it's very handy for LSP.
Index ¶
- Constants
- func IsArrayBypassIdx(idx *uint8) bool
- func IsArrayBypassPortAddr(addr *PortAddr) bool
- func MissingNodeName(index int) string
- type Build
- type Component
- type Connection
- type ConnectionReceiver
- type ConnectionSender
- type Const
- type ConstValue
- type Directive
- type EntitiesResult
- type Entity
- type EntityKind
- type File
- type IO
- type Import
- type Interface
- type InteropableComponent
- type Module
- type ModuleManifest
- type MsgLiteral
- type Node
- type Package
- type Port
- type PortAddr
- type Scope
- func (s Scope) Entity(entityRef core.EntityRef) (Entity, core.Location, error)
- func (s Scope) GetComponent(entityRef core.EntityRef) ([]Component, error)
- func (s Scope) GetConst(entityRef core.EntityRef) (Const, core.Location, error)
- func (s Scope) GetEntityKind(entityRef core.EntityRef) (EntityKind, error)
- func (s Scope) GetFirstInportName(nodes map[string]Node, portAddr PortAddr) (string, error)
- func (s Scope) GetFirstOutportName(nodes map[string]Node, portAddr PortAddr) (string, error)
- func (s Scope) GetNodeIOByPortAddr(nodes map[string]Node, portAddr PortAddr) (IO, error)
- func (s Scope) GetType(ref core.EntityRef) (ts.Def, ts.Scope, error)
- func (s Scope) IsTopType(expr ts.Expr) bool
- func (s Scope) Location() *core.Location
- func (s Scope) Relocate(location core.Location) Scope
- type TypeArgs
- type TypeParams
- type UnionLiteral
Constants ¶
const ArrayBypassIdx uint8 = 255
const MissingNodeNamePrefix = "__missing_node_name__"
Variables ¶
This section is empty.
Functions ¶
func IsArrayBypassIdx ¶
func IsArrayBypassPortAddr ¶
func MissingNodeName ¶
Types ¶
type Build ¶
type Build struct {
EntryModRef core.ModuleRef `json:"entryModRef"`
Modules map[core.ModuleRef]Module `json:"modules,omitempty"`
}
Build represents all the information in source code, that must be compiled. User usually don't interacts with this abstraction, but it's important for compiler.
type Component ¶
type Component struct {
Interface `json:"interface"`
Directives map[Directive]string `json:"directives,omitempty"`
Nodes map[string]Node `json:"nodes,omitempty"`
Net []Connection `json:"net,omitempty"`
Meta core.Meta `json:"meta"`
}
Component is unit of computation.
type Connection ¶
type Connection struct {
Senders []ConnectionSender `json:"sender,omitempty"`
Receivers []ConnectionReceiver `json:"receiver,omitempty"`
Meta core.Meta `json:"meta"`
}
type ConnectionReceiver ¶
type ConnectionReceiver struct {
PortAddr *PortAddr `json:"portAddr,omitempty"`
ChainedConnection *Connection `json:"chainedConnection,omitempty"`
Meta core.Meta `json:"meta"`
}
type ConnectionSender ¶
type ConnectionSender struct {
PortAddr *PortAddr `json:"portAddr,omitempty"`
Const *Const `json:"const,omitempty"`
StructSelector []string `json:"selector,omitempty"`
Meta core.Meta `json:"meta"`
}
func (ConnectionSender) String ¶
func (s ConnectionSender) String() string
type Const ¶
type Const struct {
TypeExpr ts.Expr `json:"typeExpr"`
Value ConstValue `json:"value"`
Meta core.Meta `json:"meta"`
}
Const represents abstraction that allow to define reusable message value.
type ConstValue ¶
type ConstValue struct {
Ref *core.EntityRef `json:"ref,omitempty"`
Message *MsgLiteral `json:"message,omitempty"`
Meta core.Meta `json:"meta"`
}
func (ConstValue) String ¶
func (c ConstValue) String() string
type EntitiesResult ¶
type Entity ¶
type Entity struct {
IsPublic bool `json:"exported,omitempty"`
Kind EntityKind `json:"kind,omitempty"`
Const Const `json:"const"`
Type ts.Def `json:"type"`
Interface Interface `json:"interface"`
Component []Component `json:"component,omitempty"` // Non-overloaded components are represented as slice of one element.
}
type EntityKind ¶
type EntityKind string
const ( ComponentEntity EntityKind = "component_entity" ConstEntity EntityKind = "const_entity" TypeEntity EntityKind = "type_entity" InterfaceEntity EntityKind = "interface_entity" )
type Interface ¶
type Interface struct {
TypeParams TypeParams `json:"typeParams"`
IO IO `json:"io"`
Meta core.Meta `json:"meta"`
}
Interface describes abstract component.
type InteropableComponent ¶
InteropableComponent describes a component that can be exported to go.
type Module ¶
type Module struct {
Manifest ModuleManifest `json:"manifest"`
Packages map[string]Package `json:"packages,omitempty"`
}
Module is unit of distribution.
type ModuleManifest ¶
type MsgLiteral ¶
type MsgLiteral struct {
Bool *bool `json:"bool,omitempty"`
Int *int `json:"int,omitempty"`
Float *float64 `json:"float,omitempty"`
Str *string `json:"str,omitempty"`
List []ConstValue `json:"vec,omitempty"`
DictOrStruct map[string]ConstValue `json:"dict,omitempty"`
Union *UnionLiteral `json:"union,omitempty"`
Meta core.Meta `json:"meta"`
}
func (MsgLiteral) String ¶
func (m MsgLiteral) String() string
type Node ¶
type Node struct {
Directives map[Directive]string `json:"directives,omitempty"`
EntityRef core.EntityRef `json:"entityRef"`
TypeArgs TypeArgs `json:"typeArgs,omitempty"`
ErrGuard bool `json:"errGuard,omitempty"` // ErrGuard explains if node is used with `?` operator.
DIArgs map[string]Node `json:"diArgs,omitempty"` // Dependency Injection.
OverloadIndex *int `json:"overloadIndex,omitempty"` // Only for overloaded components.
Meta core.Meta `json:"meta"`
}
type Package ¶
func (Package) Entities ¶
func (pkg Package) Entities() func(func(EntitiesResult) bool)
Entities iterates over all entities in the package using the range-func protocol.
func (Package) GetInteropableComponents ¶
func (pkg Package) GetInteropableComponents() []InteropableComponent
GetInteropableComponents finds all public components in the package that have exactly one inport and one outport (valid for go interop). components that don't meet this criteria are silently ignored.
type PortAddr ¶
type Scope ¶
type Scope struct {
// contains filtered or unexported fields
}
Scope is entity reference resolver
func (Scope) GetComponent ¶
TODO rename to GetComponents
func (Scope) GetEntityKind ¶
func (s Scope) GetEntityKind(entityRef core.EntityRef) (EntityKind, error)
func (Scope) GetFirstInportName ¶
func (Scope) GetFirstOutportName ¶
func (Scope) GetNodeIOByPortAddr ¶
type TypeParams ¶
TODO should we use it to typesystem package?
func (TypeParams) String ¶
func (t TypeParams) String() string