@@ -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