Skip to content

Commit a18d99a

Browse files
committed
Tweaks package structures
1 parent e03b575 commit a18d99a

23 files changed

+767
-715
lines changed

helper/runner.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"github.com/hashicorp/go-version"
77
"github.com/hashicorp/hcl/v2"
88
"github.com/hashicorp/hcl/v2/gohcl"
9-
"github.com/terraform-linters/tflint-plugin-sdk/terraform"
9+
"github.com/terraform-linters/tflint-plugin-sdk/terraform/addrs"
1010
"github.com/terraform-linters/tflint-plugin-sdk/terraform/configs"
1111
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
1212
"github.com/zclconf/go-cty/cty/gocty"
@@ -105,7 +105,7 @@ func (r *Runner) WalkResourceBlocks(resourceType, blockType string, walker func(
105105
}
106106

107107
// WalkResources visits all specified resources from Files.
108-
func (r *Runner) WalkResources(resourceType string, walker func(*terraform.Resource) error) error {
108+
func (r *Runner) WalkResources(resourceType string, walker func(*configs.Resource) error) error {
109109
for _, file := range r.Files {
110110
resources, _, diags := file.Body.PartialContent(&hcl.BodySchema{
111111
Blocks: []hcl.BlockHeaderSchema{
@@ -140,7 +140,7 @@ func (r *Runner) WalkResources(resourceType string, walker func(*terraform.Resou
140140
}
141141

142142
// WalkModuleCalls visits all module calls from Files.
143-
func (r *Runner) WalkModuleCalls(walker func(*terraform.ModuleCall) error) error {
143+
func (r *Runner) WalkModuleCalls(walker func(*configs.ModuleCall) error) error {
144144
for _, file := range r.Files {
145145
calls, _, diags := file.Body.PartialContent(&hcl.BodySchema{
146146
Blocks: []hcl.BlockHeaderSchema{
@@ -171,7 +171,7 @@ func (r *Runner) WalkModuleCalls(walker func(*terraform.ModuleCall) error) error
171171
}
172172

173173
// Backend returns the terraform backend configuration.
174-
func (r *Runner) Backend() (*terraform.Backend, error) {
174+
func (r *Runner) Backend() (*configs.Backend, error) {
175175
for _, file := range r.Files {
176176
tfcfg, _, diags := file.Body.PartialContent(&hcl.BodySchema{
177177
Blocks: []hcl.BlockHeaderSchema{
@@ -193,7 +193,7 @@ func (r *Runner) Backend() (*terraform.Backend, error) {
193193
}
194194

195195
for _, backendBlock := range backendCfg.Blocks {
196-
return &terraform.Backend{
196+
return &configs.Backend{
197197
Type: backendBlock.Labels[0],
198198
TypeRange: backendBlock.LabelRanges[0],
199199
Config: backendBlock.Body,
@@ -229,7 +229,7 @@ func (r *Runner) Config() (*configs.Config, error) {
229229
for _, block := range content.Blocks {
230230
switch block.Type {
231231
case "backend":
232-
config.Module.Backend = &terraform.Backend{
232+
config.Module.Backend = &configs.Backend{
233233
Type: block.Labels[0],
234234
TypeRange: block.LabelRanges[0],
235235
Config: block.Body,
@@ -316,7 +316,7 @@ func (r *Runner) EnsureNoError(err error, proc func() error) error {
316316
// without depending on Terraform. Some operations have been omitted for ease of implementation.
317317
// As such, it is expected to parse the minimal code needed for testing.
318318
// https://github.com/hashicorp/terraform/blob/v0.12.26/configs/resource.go#L78-L288
319-
func simpleDecodeResouceBlock(resource *hcl.Block) (*terraform.Resource, hcl.Diagnostics) {
319+
func simpleDecodeResouceBlock(resource *hcl.Block) (*configs.Resource, hcl.Diagnostics) {
320320
content, resourceRemain, diags := resource.Body.PartialContent(&hcl.BodySchema{
321321
Attributes: []hcl.AttributeSchema{
322322
{
@@ -352,15 +352,15 @@ func simpleDecodeResouceBlock(resource *hcl.Block) (*terraform.Resource, hcl.Dia
352352
forEach = attr.Expr
353353
}
354354

355-
var ref *terraform.ProviderConfigRef
355+
var ref *configs.ProviderConfigRef
356356
if attr, exists := content.Attributes["provider"]; exists {
357357
ref, diags = decodeProviderConfigRef(attr.Expr)
358358
if diags.HasErrors() {
359359
return nil, diags
360360
}
361361
}
362362

363-
managed := &terraform.ManagedResource{}
363+
managed := &configs.ManagedResource{}
364364
for _, block := range content.Blocks {
365365
switch block.Type {
366366
case "lifecycle":
@@ -399,17 +399,17 @@ func simpleDecodeResouceBlock(resource *hcl.Block) (*terraform.Resource, hcl.Dia
399399
}
400400
}
401401
case "connection":
402-
managed.Connection = &terraform.Connection{
402+
managed.Connection = &configs.Connection{
403403
Config: block.Body,
404404
DeclRange: block.DefRange,
405405
}
406406
case "provisioner":
407-
pv := &terraform.Provisioner{
407+
pv := &configs.Provisioner{
408408
Type: block.Labels[0],
409409
TypeRange: block.LabelRanges[0],
410410
DeclRange: block.DefRange,
411-
When: terraform.ProvisionerWhenCreate,
412-
OnFailure: terraform.ProvisionerOnFailureFail,
411+
When: configs.ProvisionerWhenCreate,
412+
OnFailure: configs.ProvisionerOnFailureFail,
413413
}
414414

415415
content, config, diags := block.Body.PartialContent(&hcl.BodySchema{
@@ -429,23 +429,23 @@ func simpleDecodeResouceBlock(resource *hcl.Block) (*terraform.Resource, hcl.Dia
429429
if attr, exists := content.Attributes["when"]; exists {
430430
switch hcl.ExprAsKeyword(attr.Expr) {
431431
case "create":
432-
pv.When = terraform.ProvisionerWhenCreate
432+
pv.When = configs.ProvisionerWhenCreate
433433
case "destroy":
434-
pv.When = terraform.ProvisionerWhenDestroy
434+
pv.When = configs.ProvisionerWhenDestroy
435435
}
436436
}
437437

438438
if attr, exists := content.Attributes["on_failure"]; exists {
439439
switch hcl.ExprAsKeyword(attr.Expr) {
440440
case "continue":
441-
pv.OnFailure = terraform.ProvisionerOnFailureContinue
441+
pv.OnFailure = configs.ProvisionerOnFailureContinue
442442
case "fail":
443-
pv.OnFailure = terraform.ProvisionerOnFailureFail
443+
pv.OnFailure = configs.ProvisionerOnFailureFail
444444
}
445445
}
446446

447447
for _, block := range content.Blocks {
448-
pv.Connection = &terraform.Connection{
448+
pv.Connection = &configs.Connection{
449449
Config: block.Body,
450450
DeclRange: block.DefRange,
451451
}
@@ -455,8 +455,8 @@ func simpleDecodeResouceBlock(resource *hcl.Block) (*terraform.Resource, hcl.Dia
455455
}
456456
}
457457

458-
return &terraform.Resource{
459-
Mode: terraform.ManagedResourceMode,
458+
return &configs.Resource{
459+
Mode: addrs.ManagedResourceMode,
460460
Name: resource.Labels[1],
461461
Type: resource.Labels[0],
462462
Config: resourceRemain,
@@ -472,7 +472,7 @@ func simpleDecodeResouceBlock(resource *hcl.Block) (*terraform.Resource, hcl.Dia
472472
}, nil
473473
}
474474

475-
func simpleDecodeModuleCallBlock(block *hcl.Block) (*terraform.ModuleCall, hcl.Diagnostics) {
475+
func simpleDecodeModuleCallBlock(block *hcl.Block) (*configs.ModuleCall, hcl.Diagnostics) {
476476
content, remain, diags := block.Body.PartialContent(&hcl.BodySchema{
477477
Attributes: []hcl.AttributeSchema{
478478
{Name: "source", Required: true},
@@ -493,7 +493,7 @@ func simpleDecodeModuleCallBlock(block *hcl.Block) (*terraform.ModuleCall, hcl.D
493493
sourceAddrRange = attr.Expr.Range()
494494
}
495495

496-
providers := []terraform.PassedProviderConfig{}
496+
providers := []configs.PassedProviderConfig{}
497497
if attr, exists := content.Attributes["providers"]; exists {
498498
pairs, diags := hcl.ExprMap(attr.Expr)
499499
if diags.HasErrors() {
@@ -511,7 +511,7 @@ func simpleDecodeModuleCallBlock(block *hcl.Block) (*terraform.ModuleCall, hcl.D
511511
return nil, diags
512512
}
513513

514-
providers = append(providers, terraform.PassedProviderConfig{
514+
providers = append(providers, configs.PassedProviderConfig{
515515
InChild: key,
516516
InParent: value,
517517
})
@@ -537,7 +537,7 @@ func simpleDecodeModuleCallBlock(block *hcl.Block) (*terraform.ModuleCall, hcl.D
537537
}
538538
}
539539

540-
return &terraform.ModuleCall{
540+
return &configs.ModuleCall{
541541
Name: block.Labels[0],
542542

543543
SourceAddr: sourceAddr,
@@ -546,7 +546,7 @@ func simpleDecodeModuleCallBlock(block *hcl.Block) (*terraform.ModuleCall, hcl.D
546546

547547
Config: remain,
548548

549-
Version: terraform.VersionConstraint{
549+
Version: configs.VersionConstraint{
550550
Required: versionRequired,
551551
DeclRange: versionRange,
552552
},
@@ -557,13 +557,13 @@ func simpleDecodeModuleCallBlock(block *hcl.Block) (*terraform.ModuleCall, hcl.D
557557
}, nil
558558
}
559559

560-
func decodeProviderConfigRef(expr hcl.Expression) (*terraform.ProviderConfigRef, hcl.Diagnostics) {
560+
func decodeProviderConfigRef(expr hcl.Expression) (*configs.ProviderConfigRef, hcl.Diagnostics) {
561561
traversal, diags := hcl.AbsTraversalForExpr(expr)
562562
if diags.HasErrors() {
563563
return nil, diags
564564
}
565565

566-
ref := &terraform.ProviderConfigRef{
566+
ref := &configs.ProviderConfigRef{
567567
Name: traversal.RootName(),
568568
NameRange: traversal[0].SourceRange(),
569569
}

helper/runner_test.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
"github.com/google/go-cmp/cmp/cmpopts"
88
"github.com/hashicorp/hcl/v2"
99
"github.com/hashicorp/hcl/v2/hclsyntax"
10-
"github.com/terraform-linters/tflint-plugin-sdk/terraform"
10+
"github.com/terraform-linters/tflint-plugin-sdk/terraform/addrs"
11+
"github.com/terraform-linters/tflint-plugin-sdk/terraform/configs"
1112
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
1213
)
1314

@@ -166,8 +167,8 @@ resource "aws_s3_bucket" "bar" {
166167

167168
runner := TestRunner(t, map[string]string{"main.tf": src})
168169

169-
walked := []*terraform.Resource{}
170-
walker := func(resource *terraform.Resource) error {
170+
walked := []*configs.Resource{}
171+
walker := func(resource *configs.Resource) error {
171172
walked = append(walked, resource)
172173
return nil
173174
}
@@ -176,9 +177,9 @@ resource "aws_s3_bucket" "bar" {
176177
t.Fatal(err)
177178
}
178179

179-
expected := []*terraform.Resource{
180+
expected := []*configs.Resource{
180181
{
181-
Mode: terraform.ManagedResourceMode,
182+
Mode: addrs.ManagedResourceMode,
182183
Name: "foo",
183184
Type: "aws_instance",
184185
Config: parseBody(
@@ -220,15 +221,15 @@ resource "aws_s3_bucket" "bar" {
220221
foo = "bar"
221222
}`, "main.tf", hcl.Pos{Line: 6, Column: 14}),
222223

223-
ProviderConfigRef: &terraform.ProviderConfigRef{
224+
ProviderConfigRef: &configs.ProviderConfigRef{
224225
Name: "aws",
225226
NameRange: hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 3, Column: 14}, End: hcl.Pos{Line: 3, Column: 17}},
226227
Alias: "west",
227228
AliasRange: &hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 3, Column: 17}, End: hcl.Pos{Line: 3, Column: 22}},
228229
},
229230

230-
Managed: &terraform.ManagedResource{
231-
Connection: &terraform.Connection{
231+
Managed: &configs.ManagedResource{
232+
Connection: &configs.Connection{
232233
Config: parseBody(
233234
t,
234235
`type = "ssh"`,
@@ -239,7 +240,7 @@ resource "aws_s3_bucket" "bar" {
239240
),
240241
DeclRange: hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 12, Column: 3}, End: hcl.Pos{Line: 12, Column: 13}},
241242
},
242-
Provisioners: []*terraform.Provisioner{
243+
Provisioners: []*configs.Provisioner{
243244
{
244245
Type: "local-exec",
245246
Config: parseBody(
@@ -256,7 +257,7 @@ resource "aws_s3_bucket" "bar" {
256257
hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 16, Column: 28}, End: hcl.Pos{Line: 24, Column: 4}},
257258
hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 24, Column: 4}, End: hcl.Pos{Line: 24, Column: 4}},
258259
),
259-
Connection: &terraform.Connection{
260+
Connection: &configs.Connection{
260261
Config: parseBody(
261262
t,
262263
`type = "ssh"`,
@@ -267,8 +268,8 @@ resource "aws_s3_bucket" "bar" {
267268
),
268269
DeclRange: hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 21, Column: 5}, End: hcl.Pos{Line: 21, Column: 15}},
269270
},
270-
When: terraform.ProvisionerWhenDestroy,
271-
OnFailure: terraform.ProvisionerOnFailureContinue,
271+
When: configs.ProvisionerWhenDestroy,
272+
OnFailure: configs.ProvisionerOnFailureContinue,
272273
DeclRange: hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 16, Column: 3}, End: hcl.Pos{Line: 16, Column: 27}},
273274
TypeRange: hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 16, Column: 15}, End: hcl.Pos{Line: 16, Column: 27}},
274275
},
@@ -332,7 +333,7 @@ terraform {
332333
t.Fatal(err)
333334
}
334335

335-
expected := &terraform.Backend{
336+
expected := &configs.Backend{
336337
Type: "s3",
337338
TypeRange: hcl.Range{Filename: "main.tf", Start: hcl.Pos{Line: 3, Column: 11}, End: hcl.Pos{Line: 3, Column: 15}},
338339
Config: parseBody(

terraform/addrs.go

Lines changed: 0 additions & 24 deletions
This file was deleted.

terraform/addrs/module.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
11
package addrs
22

3+
import svchost "github.com/hashicorp/terraform-svchost"
4+
35
// Module is an alternative representation of addrs.Module.
46
// https://github.com/hashicorp/terraform/blob/v0.13.1/addrs/module.go#L17
57
type Module []string
8+
9+
// Provider is an alternative representation of addrs.Provider.
10+
// https://github.com/hashicorp/terraform/blob/v0.13.1/addrs/provider.go#L16-L20
11+
type Provider struct {
12+
Type string
13+
Namespace string
14+
Hostname svchost.Hostname
15+
}
16+
17+
// ResourceMode is an alternative representation of addrs.ResourceMode.
18+
// https://github.com/hashicorp/terraform/blob/v0.13.1/addrs/resource.go#L326-L344
19+
type ResourceMode rune
20+
21+
const (
22+
// InvalidResourceMode is the zero value of ResourceMode.
23+
InvalidResourceMode ResourceMode = 0
24+
// ManagedResourceMode indicates a managed resource.
25+
ManagedResourceMode ResourceMode = 'M'
26+
// DataResourceMode indicates a data resource.
27+
DataResourceMode ResourceMode = 'D'
28+
)

0 commit comments

Comments
 (0)