@@ -19,12 +19,25 @@ type Runner struct {
19
19
Files map [string ]* hcl.File
20
20
Issues Issues
21
21
22
- config * configs.Config
22
+ tfconfig * configs.Config
23
+ config Config
24
+ }
25
+
26
+ // Config is a pseudo TFLint config file object for testing from plugins.
27
+ type Config struct {
28
+ Rules []RuleConfig `hcl:"rule,block"`
29
+ }
30
+
31
+ // RuleConfig is a pseudo TFLint config file object for testing from plugins.
32
+ type RuleConfig struct {
33
+ Name string `hcl:"name,label"`
34
+ Enabled bool `hcl:"enabled"`
35
+ Body hcl.Body `hcl:",remain"`
23
36
}
24
37
25
38
// WalkResourceAttributes visits all specified attributes from Files.
26
39
func (r * Runner ) WalkResourceAttributes (resourceType , attributeName string , walker func (* hcl.Attribute ) error ) error {
27
- for _ , resource := range r .config .Module .ManagedResources {
40
+ for _ , resource := range r .tfconfig .Module .ManagedResources {
28
41
if resource .Type != resourceType {
29
42
continue
30
43
}
@@ -53,7 +66,7 @@ func (r *Runner) WalkResourceAttributes(resourceType, attributeName string, walk
53
66
54
67
// WalkResourceBlocks visits all specified blocks from Files.
55
68
func (r * Runner ) WalkResourceBlocks (resourceType , blockType string , walker func (* hcl.Block ) error ) error {
56
- for _ , resource := range r .config .Module .ManagedResources {
69
+ for _ , resource := range r .tfconfig .Module .ManagedResources {
57
70
if resource .Type != resourceType {
58
71
continue
59
72
}
@@ -82,7 +95,7 @@ func (r *Runner) WalkResourceBlocks(resourceType, blockType string, walker func(
82
95
83
96
// WalkResources visits all specified resources from Files.
84
97
func (r * Runner ) WalkResources (resourceType string , walker func (* configs.Resource ) error ) error {
85
- for _ , resource := range r .config .Module .ManagedResources {
98
+ for _ , resource := range r .tfconfig .Module .ManagedResources {
86
99
if resource .Type != resourceType {
87
100
continue
88
101
}
@@ -98,7 +111,7 @@ func (r *Runner) WalkResources(resourceType string, walker func(*configs.Resourc
98
111
99
112
// WalkModuleCalls visits all module calls from Files.
100
113
func (r * Runner ) WalkModuleCalls (walker func (* configs.ModuleCall ) error ) error {
101
- for _ , call := range r .config .Module .ModuleCalls {
114
+ for _ , call := range r .tfconfig .Module .ModuleCalls {
102
115
err := walker (call )
103
116
if err != nil {
104
117
return err
@@ -110,18 +123,32 @@ func (r *Runner) WalkModuleCalls(walker func(*configs.ModuleCall) error) error {
110
123
111
124
// Backend returns the terraform backend configuration.
112
125
func (r * Runner ) Backend () (* configs.Backend , error ) {
113
- return r .config .Module .Backend , nil
126
+ return r .tfconfig .Module .Backend , nil
114
127
}
115
128
116
129
// Config returns the Terraform configuration
117
130
func (r * Runner ) Config () (* configs.Config , error ) {
118
- return r .config , nil
131
+ return r .tfconfig , nil
119
132
}
120
133
121
134
// RootProvider returns the provider configuration.
122
135
// In the helper runner, it always returns its own provider.
123
136
func (r * Runner ) RootProvider (name string ) (* configs.Provider , error ) {
124
- return r .config .Module .ProviderConfigs [name ], nil
137
+ return r .tfconfig .Module .ProviderConfigs [name ], nil
138
+ }
139
+
140
+ // DecodeRuleConfig extracts the rule's configuration into the given value
141
+ func (r * Runner ) DecodeRuleConfig (name string , ret interface {}) error {
142
+ for _ , rule := range r .config .Rules {
143
+ if rule .Name == name {
144
+ if diags := gohcl .DecodeBody (rule .Body , nil , ret ); diags .HasErrors () {
145
+ return diags
146
+ }
147
+ return nil
148
+ }
149
+ }
150
+
151
+ return nil
125
152
}
126
153
127
154
// EvaluateExpr returns a value of the passed expression.
@@ -146,7 +173,7 @@ func (r *Runner) EvaluateExpr(expr hcl.Expression, ret interface{}) error {
146
173
}
147
174
148
175
variables := map [string ]cty.Value {}
149
- for _ , variable := range r .config .Module .Variables {
176
+ for _ , variable := range r .tfconfig .Module .Variables {
150
177
variables [variable .Name ] = variable .Default
151
178
}
152
179
rawVal , diags := expr .Value (& hcl.EvalContext {
@@ -200,7 +227,7 @@ func (r *Runner) EnsureNoError(err error, proc func() error) error {
200
227
}
201
228
202
229
func (r * Runner ) initFromFiles () error {
203
- r .config = & configs.Config {
230
+ r .tfconfig = & configs.Config {
204
231
Module : & configs.Module {
205
232
ModuleCalls : map [string ]* configs.ModuleCall {},
206
233
ManagedResources : map [string ]* configs.Resource {},
@@ -225,7 +252,7 @@ func (r *Runner) initFromFiles() error {
225
252
for _ , block := range content .Blocks {
226
253
switch block .Type {
227
254
case "backend" :
228
- r .config .Module .Backend = & configs.Backend {
255
+ r .tfconfig .Module .Backend = & configs.Backend {
229
256
Type : block .Labels [0 ],
230
257
TypeRange : block .LabelRanges [0 ],
231
258
Config : block .Body ,
@@ -246,7 +273,7 @@ func (r *Runner) initFromFiles() error {
246
273
if diags .HasErrors () {
247
274
return diags
248
275
}
249
- r .config .Module .Variables [variable .Name ] = variable
276
+ r .tfconfig .Module .Variables [variable .Name ] = variable
250
277
case "locals" :
251
278
// TODO
252
279
case "output" :
@@ -256,13 +283,13 @@ func (r *Runner) initFromFiles() error {
256
283
if diags .HasErrors () {
257
284
return diags
258
285
}
259
- r .config .Module .ModuleCalls [call .Name ] = call
286
+ r .tfconfig .Module .ModuleCalls [call .Name ] = call
260
287
case "resource" :
261
288
resource , diags := simpleDecodeResouceBlock (block )
262
289
if diags .HasErrors () {
263
290
return diags
264
291
}
265
- r .config .Module .ManagedResources [fmt .Sprintf ("%s.%s" , resource .Type , resource .Name )] = resource
292
+ r .tfconfig .Module .ManagedResources [fmt .Sprintf ("%s.%s" , resource .Type , resource .Name )] = resource
266
293
case "data" :
267
294
// TODO
268
295
default :
0 commit comments