github.com/muratcelep/terraform@v1.1.0-beta2-not-internal-4/not-internal/lang/scope.go (about) 1 package lang 2 3 import ( 4 "sync" 5 6 "github.com/zclconf/go-cty/cty/function" 7 8 "github.com/muratcelep/terraform/not-internal/addrs" 9 "github.com/muratcelep/terraform/not-internal/experiments" 10 ) 11 12 // Scope is the main type in this package, allowing dynamic evaluation of 13 // blocks and expressions based on some contextual information that informs 14 // which variables and functions will be available. 15 type Scope struct { 16 // Data is used to resolve references in expressions. 17 Data Data 18 19 // SelfAddr is the address that the "self" object should be an alias of, 20 // or nil if the "self" object should not be available at all. 21 SelfAddr addrs.Referenceable 22 23 // BaseDir is the base directory used by any interpolation functions that 24 // accept filesystem paths as arguments. 25 BaseDir string 26 27 // PureOnly can be set to true to request that any non-pure functions 28 // produce unknown value results rather than actually executing. This is 29 // important during a plan phase to avoid generating results that could 30 // then differ during apply. 31 PureOnly bool 32 33 funcs map[string]function.Function 34 funcsLock sync.Mutex 35 36 // activeExperiments is an optional set of experiments that should be 37 // considered as active in the module that this scope will be used for. 38 // Callers can populate it by calling the SetActiveExperiments method. 39 activeExperiments experiments.Set 40 41 // ConsoleMode can be set to true to request any console-only functions are 42 // included in this scope. 43 ConsoleMode bool 44 } 45 46 // SetActiveExperiments allows a caller to declare that a set of experiments 47 // is active for the module that the receiving Scope belongs to, which might 48 // then cause the scope to activate some additional experimental behaviors. 49 func (s *Scope) SetActiveExperiments(active experiments.Set) { 50 s.activeExperiments = active 51 }