Documentation ¶
Index ¶
- Variables
- func AddReferences(resource modconfig.HclResource, block *hcl.Block, parseCtx *ModParseContext) hcl.Diagnostics
- func ContextFunctions(workspaceDir string) map[string]function.Function
- func DecodeConnection(block *hcl.Block) (*modconfig.Connection, hcl.Diagnostics)
- func DecodeOptions(block *hcl.Block) (options.Options, hcl.Diagnostics)
- func GetMetadataForParsedResource(resourceName string, srcRange hcl.Range, fileData map[string][]byte, ...) (*modconfig.ResourceMetadata, error)
- func LoadFileData(paths ...string) (map[string][]byte, hcl.Diagnostics)
- func LoadWorkspaceProfiles(workspaceProfilePath string) (profileMap map[string]*modconfig.WorkspaceProfile, err error)
- func ModfileExists(modPath string) bool
- func ParseHclFiles(fileData map[string][]byte) (hcl.Body, hcl.Diagnostics)
- func ParseMod(modPath string, fileData map[string][]byte, ...) (*modconfig.Mod, error)
- func ParseModDefinition(modPath string) (*modconfig.Mod, error)
- func ParseModResourceNames(fileData map[string][]byte) (*modconfig.WorkspaceResources, error)
- func ParsePreparedStatementInvocation(arg string) (string, *modconfig.QueryArgs, error)
- func VariableValueMap(variables map[string]*modconfig.Variable) map[string]cty.Value
- type InstalledMod
- type ModParseContext
- func (r *ModParseContext) AddDependencies(block *hcl.Block, name string, ...) hcl.Diagnostics
- func (r *ModParseContext) AddInputVariables(inputVariables *modconfig.ModVariableMap)
- func (r *ModParseContext) AddLoadedDependentMods(mods modconfig.ModMap)
- func (r *ModParseContext) AddMod(mod *modconfig.Mod) hcl.Diagnostics
- func (r *ModParseContext) AddResource(resource modconfig.HclResource) hcl.Diagnostics
- func (r *ModParseContext) CreatePseudoResources() bool
- func (r *ModParseContext) DetermineBlockName(block *hcl.Block) string
- func (r *ModParseContext) EnsureWorkspaceLock(mod *modconfig.Mod) error
- func (r *ModParseContext) GetCachedBlockName(block *hcl.Block) (string, bool)
- func (r *ModParseContext) GetCachedBlockShortName(block *hcl.Block) (string, bool)
- func (r *ModParseContext) GetDecodedResourceForBlock(block *hcl.Block) (modconfig.HclResource, bool)
- func (r *ModParseContext) GetMod(modShortName string) *modconfig.Mod
- func (r *ModParseContext) GetResourceMaps() *modconfig.ResourceMaps
- func (r *ModParseContext) IsTopLevelBlock(block *hcl.Block) bool
- func (r *ModParseContext) PeekParent() string
- func (r *ModParseContext) PopParent() string
- func (r *ModParseContext) PushParent(parent modconfig.ModTreeItem)
- func (r *ModParseContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
- func (r *ModParseContext) SetVariablesForDependencyMod(mod *modconfig.Mod, ...)
- func (r *ModParseContext) ShouldCreateDefaultMod() bool
- type ParseContext
- func (r *ParseContext) AddDependencies(block *hcl.Block, name string, ...) hcl.Diagnostics
- func (r *ParseContext) BlocksToDecode() (hcl.Blocks, error)
- func (r *ParseContext) ClearDependencies()
- func (r *ParseContext) EvalComplete() bool
- func (r *ParseContext) FormatDependencies() string
- func (r *ParseContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
- func (r *ParseContext) ShouldIncludeBlock(block *hcl.Block) bool
- type ParseModFlag
- type ReferenceTypeValueMap
- type WorkspaceProfileParseContext
Constants ¶
This section is empty.
Variables ¶
var BenchmarkBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{Name: "children"},
{Name: "description"},
{Name: "documentation"},
{Name: "tags"},
{Name: "title"},
{Name: "width"},
{Name: "base"},
{Name: "type"},
{Name: "display"},
},
}
var ConfigBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{}, Blocks: []hcl.BlockHeaderSchema{ { Type: "connection", LabelNames: []string{"name"}, }, { Type: "options", LabelNames: []string{"type"}, }, { Type: "workspace", LabelNames: []string{"name"}, }, }, }
var ConnectionBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ { Name: "plugin", Required: true, }, { Name: "type", }, { Name: "connections", }, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "options", LabelNames: []string{"type"}, }, }, }
var DashboardBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeInput, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeParam, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeContainer, }, { Type: modconfig.BlockTypeCard, }, { Type: modconfig.BlockTypeChart, }, { Type: modconfig.BlockTypeBenchmark, }, { Type: modconfig.BlockTypeControl, }, { Type: modconfig.BlockTypeFlow, }, { Type: modconfig.BlockTypeGraph, }, { Type: modconfig.BlockTypeHierarchy, }, { Type: modconfig.BlockTypeImage, }, { Type: modconfig.BlockTypeTable, }, { Type: modconfig.BlockTypeText, }, }, }
DashboardBlockSchema is used purely to validate dashboard child blocks
var DashboardContainerBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeInput, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeParam, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeContainer, }, { Type: modconfig.BlockTypeCard, }, { Type: modconfig.BlockTypeChart, }, { Type: modconfig.BlockTypeBenchmark, }, { Type: modconfig.BlockTypeControl, }, { Type: modconfig.BlockTypeFlow, }, { Type: modconfig.BlockTypeGraph, }, { Type: modconfig.BlockTypeHierarchy, }, { Type: modconfig.BlockTypeImage, }, { Type: modconfig.BlockTypeTable, }, { Type: modconfig.BlockTypeText, }, }, }
DashboardContainerBlockSchema contains the DashboardContainer attributes which cannot be automatically decoded
var EdgeAndNodeProviderBlockSchema = &hcl.BodySchema{
Blocks: []hcl.BlockHeaderSchema{
{
Type: "param",
},
{
Type: "category",
},
},
}
EdgeAndNodeProviderBlockSchema is used to validate child blocks
var EdgeAndNodeProviderSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "param", LabelNames: []string{"name"}, }, { Type: "category", LabelNames: []string{"name"}, }, }, }
EdgeAndNodeProviderSchema is used to decode graph/hierarchy/flow (EXCEPT categories)
var ModBlockSchema = &hcl.BodySchema{ Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeRequire, }, }, }
ModBlockSchema contains schema for the mod blocks which must be manually decoded
var ParamDefBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{Name: "description"},
{Name: "default"},
},
}
var QueryProviderBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "param", LabelNames: []string{"name"}, }, }, }
QueryProviderBlockSchema schema for all blocks satisfying QueryProvider interface
var RequireBlockSchema = &hcl.BodySchema{ Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeMod, LabelNames: []string{"name"}, }, }, }
var RequireModBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{Name: "args"},
},
}
var VariableBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{
Name: "description",
},
{
Name: "default",
},
{
Name: "type",
},
{
Name: "sensitive",
},
},
Blocks: []hcl.BlockHeaderSchema{
{
Type: "validation",
},
},
}
var WorkspaceBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{}, Blocks: []hcl.BlockHeaderSchema{ { Type: string(modconfig.BlockTypeMod), LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeVariable, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeQuery, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeControl, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeBenchmark, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeDashboard, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeCard, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeChart, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeFlow, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeGraph, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeHierarchy, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeImage, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeInput, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeTable, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeText, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeLocals, }, }, }
WorkspaceBlockSchema is the top level schema for all workspace resources
var WorkspaceProfileBlockSchema = &hcl.BodySchema{ Blocks: []hcl.BlockHeaderSchema{ { Type: "options", LabelNames: []string{"type"}, }, }, }
Functions ¶
func AddReferences ¶
func AddReferences(resource modconfig.HclResource, block *hcl.Block, parseCtx *ModParseContext) hcl.Diagnostics
AddReferences populates the 'References' resource field, used for the introspection tables
func ContextFunctions ¶
ContextFunctions returns the set of functions that should be used to when evaluating expressions
func DecodeConnection ¶
func DecodeConnection(block *hcl.Block) (*modconfig.Connection, hcl.Diagnostics)
func DecodeOptions ¶
DecodeOptions decodes an options block
func LoadFileData ¶
LoadFileData builds a map of filepath to file data
func LoadWorkspaceProfiles ¶ added in v0.17.0
func LoadWorkspaceProfiles(workspaceProfilePath string) (profileMap map[string]*modconfig.WorkspaceProfile, err error)
func ModfileExists ¶
ModfileExists returns whether a mod file exists at the specified path
func ParseHclFiles ¶
ParseHclFiles parses hcl file data and returns the hcl body object
func ParseMod ¶
func ParseMod(modPath string, fileData map[string][]byte, pseudoResources []modconfig.MappableResource, parseCtx *ModParseContext) (*modconfig.Mod, error)
ParseMod parses all source hcl files for the mod path and associated resources, and returns the mod object NOTE: the mod definition has already been parsed (or a default created) and is in opts.RunCtx.RootMod
func ParseModDefinition ¶
ParseModDefinition parses the modfile only it is expected the calling code will have verified the existence of the modfile by calling ModfileExists this is called before parsing the workspace to, for example, identify dependency mods
func ParseModResourceNames ¶
func ParseModResourceNames(fileData map[string][]byte) (*modconfig.WorkspaceResources, error)
ParseModResourceNames parses all source hcl files for the mod path and associated resources, and returns the resource names
func ParsePreparedStatementInvocation ¶
ParsePreparedStatementInvocation parses a query invocation and extracts the args (if any) supported formats are:
1) positional args query.my_prepared_statement('val1','val1')
2) named args query.my_prepared_statement(my_arg1 => 'test', my_arg2 => 'test2')
Types ¶
type ModParseContext ¶ added in v0.17.0
type ModParseContext struct { ParseContext // the mod which is currently being parsed CurrentMod *modconfig.Mod // the workspace lock data WorkspaceLock *versionmap.WorkspaceLock Flags ParseModFlag ListOptions *filehelpers.ListOptions LoadedDependencyMods modconfig.ModMap // Variables is a map of the variables in the current mod // it is used to populate the variables property on the mod Variables map[string]*modconfig.Variable // DependencyVariables is a map of the variables in the dependency mods of the current mod // it is used to populate the variables property on the dependency DependencyVariables map[string]map[string]*modconfig.Variable ParentParseCtx *ModParseContext // contains filtered or unexported fields }
func NewModParseContext ¶ added in v0.17.0
func NewModParseContext(workspaceLock *versionmap.WorkspaceLock, rootEvalPath string, flags ParseModFlag, listOptions *filehelpers.ListOptions) *ModParseContext
func (*ModParseContext) AddDependencies ¶ added in v0.17.0
func (r *ModParseContext) AddDependencies(block *hcl.Block, name string, dependencies map[string]*modconfig.ResourceDependency) hcl.Diagnostics
AddDependencies :: the block could not be resolved as it has dependencies 1) store block as unresolved 2) add dependencies to our tree of dependencies
func (*ModParseContext) AddInputVariables ¶ added in v0.17.0
func (r *ModParseContext) AddInputVariables(inputVariables *modconfig.ModVariableMap)
AddInputVariables adds variables to the run context. This function is called for the root run context after loading all input variables
func (*ModParseContext) AddLoadedDependentMods ¶ added in v0.17.0
func (r *ModParseContext) AddLoadedDependentMods(mods modconfig.ModMap)
func (*ModParseContext) AddMod ¶ added in v0.17.0
func (r *ModParseContext) AddMod(mod *modconfig.Mod) hcl.Diagnostics
AddMod is used to add a mod with any pseudo resources to the eval context - in practice this will be a shell mod with just pseudo resources - other resources will be added as they are parsed
func (*ModParseContext) AddResource ¶ added in v0.17.0
func (r *ModParseContext) AddResource(resource modconfig.HclResource) hcl.Diagnostics
AddResource stores this resource as a variable to be added to the eval context. It alse
func (*ModParseContext) CreatePseudoResources ¶ added in v0.17.0
func (r *ModParseContext) CreatePseudoResources() bool
CreatePseudoResources returns whether the flag is set to create pseudo resources
func (*ModParseContext) DetermineBlockName ¶ added in v0.17.0
func (r *ModParseContext) DetermineBlockName(block *hcl.Block) string
func (*ModParseContext) EnsureWorkspaceLock ¶ added in v0.17.0
func (r *ModParseContext) EnsureWorkspaceLock(mod *modconfig.Mod) error
func (*ModParseContext) GetCachedBlockName ¶ added in v0.17.0
func (r *ModParseContext) GetCachedBlockName(block *hcl.Block) (string, bool)
func (*ModParseContext) GetCachedBlockShortName ¶ added in v0.17.0
func (r *ModParseContext) GetCachedBlockShortName(block *hcl.Block) (string, bool)
func (*ModParseContext) GetDecodedResourceForBlock ¶ added in v0.17.0
func (r *ModParseContext) GetDecodedResourceForBlock(block *hcl.Block) (modconfig.HclResource, bool)
func (*ModParseContext) GetMod ¶ added in v0.17.0
func (r *ModParseContext) GetMod(modShortName string) *modconfig.Mod
func (*ModParseContext) GetResourceMaps ¶ added in v0.17.0
func (r *ModParseContext) GetResourceMaps() *modconfig.ResourceMaps
func (*ModParseContext) IsTopLevelBlock ¶ added in v0.17.0
func (r *ModParseContext) IsTopLevelBlock(block *hcl.Block) bool
func (*ModParseContext) PeekParent ¶ added in v0.17.0
func (r *ModParseContext) PeekParent() string
func (*ModParseContext) PopParent ¶ added in v0.17.0
func (r *ModParseContext) PopParent() string
func (*ModParseContext) PushParent ¶ added in v0.17.0
func (r *ModParseContext) PushParent(parent modconfig.ModTreeItem)
func (*ModParseContext) SetDecodeContent ¶ added in v0.17.0
func (r *ModParseContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
func (*ModParseContext) SetVariablesForDependencyMod ¶ added in v0.17.0
func (r *ModParseContext) SetVariablesForDependencyMod(mod *modconfig.Mod, dependencyVariablesMap map[string]map[string]*modconfig.Variable)
SetVariablesForDependencyMod adds variables to the run context. This function is called for dependent mod run context
func (*ModParseContext) ShouldCreateDefaultMod ¶ added in v0.17.0
func (r *ModParseContext) ShouldCreateDefaultMod() bool
ShouldCreateDefaultMod returns whether the flag is set to create a default mod if no mod definition exists
type ParseContext ¶ added in v0.17.0
type ParseContext struct { UnresolvedBlocks map[string]*unresolvedBlock FileData map[string][]byte // the eval context used to decode references in HCL EvalCtx *hcl.EvalContext RootEvalPath string // if set, only decode these blocks BlockTypes []string // if set, exclude these block types BlockTypeExclusions []string // contains filtered or unexported fields }
func NewParseContext ¶ added in v0.17.0
func NewParseContext(rootEvalPath string) ParseContext
func (*ParseContext) AddDependencies ¶ added in v0.17.0
func (r *ParseContext) AddDependencies(block *hcl.Block, name string, dependencies map[string]*modconfig.ResourceDependency) hcl.Diagnostics
func (*ParseContext) BlocksToDecode ¶ added in v0.17.0
func (r *ParseContext) BlocksToDecode() (hcl.Blocks, error)
BlocksToDecode builds a list of blocks to decode, the order of which is determined by the dependency order
func (*ParseContext) ClearDependencies ¶ added in v0.17.0
func (r *ParseContext) ClearDependencies()
func (*ParseContext) EvalComplete ¶ added in v0.17.0
func (r *ParseContext) EvalComplete() bool
EvalComplete returns whether all elements in the dependency tree fully evaluated
func (*ParseContext) FormatDependencies ¶ added in v0.17.0
func (r *ParseContext) FormatDependencies() string
func (*ParseContext) SetDecodeContent ¶ added in v0.17.0
func (r *ParseContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
func (*ParseContext) ShouldIncludeBlock ¶ added in v0.17.0
func (r *ParseContext) ShouldIncludeBlock(block *hcl.Block) bool
type ParseModFlag ¶
type ParseModFlag uint32
const ( CreateDefaultMod ParseModFlag = 1 << iota CreatePseudoResources )
type ReferenceTypeValueMap ¶
ReferenceTypeValueMap is the raw data used to build the evaluation context
When resolving hcl references like : - query.q1 - var.v1 - mod1.query.my_query.sql
ReferenceTypeValueMap is keyed by resource type, then by resource name
type WorkspaceProfileParseContext ¶ added in v0.17.0
type WorkspaceProfileParseContext struct { ParseContext // contains filtered or unexported fields }
func NewWorkspaceProfileParseContext ¶ added in v0.17.0
func NewWorkspaceProfileParseContext(rootEvalPath string) *WorkspaceProfileParseContext
func (*WorkspaceProfileParseContext) AddResource ¶ added in v0.17.0
func (c *WorkspaceProfileParseContext) AddResource(workspaceProfile *modconfig.WorkspaceProfile) hcl.Diagnostics
AddResource stores this resource as a variable to be added to the eval context. It alse
Source Files ¶
- connection.go
- context_functions.go
- decode.go
- decode_args.go
- decode_children.go
- decode_mod.go
- decode_options.go
- decode_result.go
- hcl_blocks.go
- installed_mod.go
- metadata.go
- mod_parse_context.go
- mod_parse_context_blocks.go
- parse_context.go
- parser.go
- prepared_statement.go
- references.go
- schema.go
- unresolved_block.go
- workspace_profile.go
- workspace_profile_parse_context.go