package lang import ( "sync" "github.com/zclconf/go-cty/cty/function" "github.com/hashicorp/terraform/addrs" "github.com/hashicorp/terraform/internal/experiments" ) // Scope is the main type in this package, allowing dynamic evaluation of // blocks and expressions based on some contextual information that informs // which variables and functions will be available. type Scope struct { // Data is used to resolve references in expressions. Data Data // SelfAddr is the address that the "self" object should be an alias of, // or nil if the "self" object should not be available at all. SelfAddr addrs.Referenceable // BaseDir is the base directory used by any interpolation functions that // accept filesystem paths as arguments. BaseDir string // PureOnly can be set to true to request that any non-pure functions // produce unknown value results rather than actually executing. This is // important during a plan phase to avoid generating results that could // then differ during apply. PureOnly bool funcs map[string]function.Function funcsLock sync.Mutex // activeExperiments is an optional set of experiments that should be // considered as active in the module that this scope will be used for. // Callers can populate it by calling the SetActiveExperiments method. activeExperiments experiments.Set // ConsoleMode can be set to true to request any console-only functions are // included in this scope. ConsoleMode bool } // SetActiveExperiments allows a caller to declare that a set of experiments // is active for the module that the receiving Scope belongs to, which might // then cause the scope to activate some additional experimental behaviors. func (s *Scope) SetActiveExperiments(active experiments.Set) { s.activeExperiments = active }