@@ -13,12 +13,13 @@ func Test_TerraformDeprecatedIndexRule(t *testing.T) {
1313 Content string
1414 JSON bool
1515 Expected helper.Issues
16+ Fixed string
1617 }{
1718 {
1819 Name : "deprecated dot index style" ,
1920 Content : `
2021locals {
21- list = ["a"]
22+ list = ["a"]
2223 value = list.0
2324}
2425` ,
@@ -39,13 +40,19 @@ locals {
3940 },
4041 },
4142 },
43+ Fixed : `
44+ locals {
45+ list = ["a"]
46+ value = list[0]
47+ }
48+ ` ,
4249 },
4350 {
4451 Name : "deprecated dot splat index style" ,
4552 Content : `
4653locals {
47- maplist = [{a = "b"}]
48- values = maplist.*.a
54+ maplist = [{ a = "b" }]
55+ values = maplist.*.a
4956}
5057` ,
5158 Expected : helper.Issues {
@@ -56,21 +63,27 @@ locals {
5663 Filename : "config.tf" ,
5764 Start : hcl.Pos {
5865 Line : 4 ,
59- Column : 19 ,
66+ Column : 20 ,
6067 },
6168 End : hcl.Pos {
6269 Line : 4 ,
63- Column : 21 ,
70+ Column : 22 ,
6471 },
6572 },
6673 },
6774 },
75+ Fixed : `
76+ locals {
77+ maplist = [{ a = "b" }]
78+ values = maplist[*].a
79+ }
80+ ` ,
6881 },
6982 {
7083 Name : "attribute access" ,
7184 Content : `
7285locals {
73- map = {a = "b"}
86+ map = { a = "b" }
7487 value = map.a
7588}
7689` ,
@@ -90,9 +103,9 @@ locals {
90103 Content : `
91104locals {
92105 servers = <<EOF
93- %{ for ip in aws_instance.example[*].private_ip }
106+ %{for ip in aws_instance.example[*].private_ip}
94107server ${ip}
95- %{ endfor }
108+ %{endfor}
96109EOF
97110}
98111` ,
@@ -101,14 +114,14 @@ EOF
101114 {
102115 Name : "directive: invalid" ,
103116 Content : `
104- locals {
105- servers = <<EOF
106- %{ for ip in aws_instance.example.*.private_ip }
107- server ${ip}
108- %{ endfor }
109- EOF
110- }
111- ` ,
117+ locals {
118+ servers = <<EOF
119+ %{ for ip in aws_instance.example.*.private_ip}
120+ server ${ip}
121+ %{ endfor}
122+ EOF
123+ }
124+ ` ,
112125 Expected : helper.Issues {
113126 {
114127 Rule : NewTerraformDeprecatedIndexRule (),
@@ -117,22 +130,31 @@ EOF
117130 Filename : "config.tf" ,
118131 Start : hcl.Pos {
119132 Line : 4 ,
120- Column : 36 ,
133+ Column : 33 ,
121134 },
122135 End : hcl.Pos {
123136 Line : 4 ,
124- Column : 38 ,
137+ Column : 35 ,
125138 },
126139 },
127140 },
128141 },
142+ Fixed : `
143+ locals {
144+ servers = <<EOF
145+ %{for ip in aws_instance.example[*].private_ip}
146+ server ${ip}
147+ %{endfor}
148+ EOF
149+ }
150+ ` ,
129151 },
130152 {
131153 Name : "legacy splat and legacy index" ,
132154 Content : `
133155locals {
134156 nested_list = [["a"]]
135- value = nested_list.*.0
157+ value = nested_list.*.0
136158}
137159` ,
138160 Expected : helper.Issues {
@@ -143,11 +165,11 @@ locals {
143165 Filename : "config.tf" ,
144166 Start : hcl.Pos {
145167 Line : 4 ,
146- Column : 22 ,
168+ Column : 28 ,
147169 },
148170 End : hcl.Pos {
149171 Line : 4 ,
150- Column : 24 ,
172+ Column : 30 ,
151173 },
152174 },
153175 },
@@ -158,21 +180,27 @@ locals {
158180 Filename : "config.tf" ,
159181 Start : hcl.Pos {
160182 Line : 4 ,
161- Column : 24 ,
183+ Column : 30 ,
162184 },
163185 End : hcl.Pos {
164186 Line : 4 ,
165- Column : 26 ,
187+ Column : 32 ,
166188 },
167189 },
168190 },
169191 },
192+ Fixed : `
193+ locals {
194+ nested_list = [["a"]]
195+ value = nested_list[*][0]
196+ }
197+ ` ,
170198 },
171199 {
172200 Name : "complex expression" ,
173201 Content : `
174202locals {
175- create_namespace = true
203+ create_namespace = true
176204 kubernetes_namespace = local.create_namespace ? join("", kubernetes_namespace.default.*.id) : var.kubernetes_namespace
177205}
178206` ,
@@ -193,6 +221,12 @@ locals {
193221 },
194222 },
195223 },
224+ Fixed : `
225+ locals {
226+ create_namespace = true
227+ kubernetes_namespace = local.create_namespace ? join("", kubernetes_namespace.default[*].id) : var.kubernetes_namespace
228+ }
229+ ` ,
196230 },
197231 {
198232 Name : "json invalid" ,
@@ -221,6 +255,13 @@ locals {
221255 },
222256 },
223257 },
258+ Fixed : `
259+ {
260+ "locals": {
261+ "list": ["a"],
262+ "value": "${list[0]}"
263+ }
264+ }` ,
224265 },
225266 {
226267 Name : "json valid" ,
@@ -264,6 +305,11 @@ locals {
264305 }
265306
266307 helper .AssertIssues (t , tc .Expected , runner .Issues )
308+ want := map [string ]string {}
309+ if tc .Fixed != "" {
310+ want [filename ] = tc .Fixed
311+ }
312+ helper .AssertChanges (t , want , runner .Changes ())
267313 })
268314 }
269315}
0 commit comments