Skip to content

Commit 25bbc1f

Browse files
authored
json: add fixed, fixable (#2355)
1 parent 45e293b commit 25bbc1f

File tree

58 files changed

+531
-159
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+531
-159
lines changed

formatter/formatter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,14 @@ Reference: https://github.com
117117
f.PrintErrorParallel(errors.New("an error occurred"), map[string][]byte{})
118118
f.PrintErrorParallel(errors.New("failed"), map[string][]byte{})
119119
},
120-
stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":4}},"callers":[]}],"errors":[{"message":"an error occurred","severity":"error"},{"message":"failed","severity":"error"}]}`,
120+
stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":4}},"callers":[],"fixable":false,"fixed":false}],"errors":[{"message":"an error occurred","severity":"error"},{"message":"failed","severity":"error"}]}`,
121121
error: true,
122122
},
123123
{
124124
name: "JSON without errors",
125125
format: "json",
126126
before: func(f *Formatter) {},
127-
stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":4}},"callers":[]}],"errors":[]}`,
127+
stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":4}},"callers":[],"fixable":false,"fixed":false}],"errors":[]}`,
128128
},
129129
}
130130

formatter/json.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ type JSONIssue struct {
1616
Message string `json:"message"`
1717
Range JSONRange `json:"range"`
1818
Callers []JSONRange `json:"callers"`
19+
Fixable bool `json:"fixable"`
20+
Fixed bool `json:"fixed"`
1921
}
2022

2123
// JSONRule is a temporary structure for converting TFLint rules to JSON.
@@ -69,6 +71,8 @@ func (f *Formatter) jsonPrint(issues tflint.Issues, appErr error) {
6971
End: JSONPos{Line: issue.Range.End.Line, Column: issue.Range.End.Column},
7072
},
7173
Callers: make([]JSONRange, len(issue.Callers)),
74+
Fixable: issue.Fixable,
75+
Fixed: issue.Fixable && f.Fix,
7276
}
7377
for i, caller := range issue.Callers {
7478
ret.Issues[idx].Callers[i] = JSONRange{

formatter/json_test.go

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,65 @@ func Test_jsonPrint(t *testing.T) {
1515
Name string
1616
Issues tflint.Issues
1717
Error error
18+
Fix bool
1819
Stdout string
1920
}{
2021
{
2122
Name: "no issues",
2223
Issues: tflint.Issues{},
2324
Stdout: `{"issues":[],"errors":[]}`,
2425
},
26+
{
27+
Name: "fixable issue without fix",
28+
Issues: tflint.Issues{
29+
{
30+
Rule: &testRule{},
31+
Message: "test message",
32+
Range: hcl.Range{
33+
Filename: "test.tf",
34+
Start: hcl.Pos{Line: 1, Column: 1},
35+
End: hcl.Pos{Line: 1, Column: 5},
36+
},
37+
Fixable: true,
38+
},
39+
},
40+
Fix: false,
41+
Stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test message","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":5}},"callers":[],"fixable":true,"fixed":false}],"errors":[]}`,
42+
},
43+
{
44+
Name: "fixable issue with fix",
45+
Issues: tflint.Issues{
46+
{
47+
Rule: &testRule{},
48+
Message: "test message",
49+
Range: hcl.Range{
50+
Filename: "test.tf",
51+
Start: hcl.Pos{Line: 1, Column: 1},
52+
End: hcl.Pos{Line: 1, Column: 5},
53+
},
54+
Fixable: true,
55+
},
56+
},
57+
Fix: true,
58+
Stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test message","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":5}},"callers":[],"fixable":true,"fixed":true}],"errors":[]}`,
59+
},
60+
{
61+
Name: "non-fixable issue",
62+
Issues: tflint.Issues{
63+
{
64+
Rule: &testRule{},
65+
Message: "test message",
66+
Range: hcl.Range{
67+
Filename: "test.tf",
68+
Start: hcl.Pos{Line: 1, Column: 1},
69+
End: hcl.Pos{Line: 1, Column: 5},
70+
},
71+
Fixable: false,
72+
},
73+
},
74+
Fix: false,
75+
Stdout: `{"issues":[{"rule":{"name":"test_rule","severity":"error","link":"https://github.com"},"message":"test message","range":{"filename":"test.tf","start":{"line":1,"column":1},"end":{"line":1,"column":5}},"callers":[],"fixable":false,"fixed":false}],"errors":[]}`,
76+
},
2577
{
2678
Name: "error",
2779
Error: fmt.Errorf("Failed to work; %w", errors.New("I don't feel like working")),
@@ -71,7 +123,7 @@ func Test_jsonPrint(t *testing.T) {
71123
for _, tc := range cases {
72124
stdout := &bytes.Buffer{}
73125
stderr := &bytes.Buffer{}
74-
formatter := &Formatter{Stdout: stdout, Stderr: stderr, Format: "json"}
126+
formatter := &Formatter{Stdout: stdout, Stderr: stderr, Format: "json", Fix: tc.Fix}
75127

76128
formatter.Print(tc.Issues, tc.Error, map[string][]byte{})
77129

integrationtest/autofix/chdir/result.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 1
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
}
2325
],
2426
"errors": []

integrationtest/autofix/chdir/result_windows.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 1
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
}
2325
],
2426
"errors": []

integrationtest/autofix/chdir_with_conflict/result.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 1
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
},
2325
{
2426
"rule": {
@@ -38,7 +40,9 @@
3840
"column": 33
3941
}
4042
},
41-
"callers": []
43+
"callers": [],
44+
"fixable": false,
45+
"fixed": false
4246
},
4347
{
4448
"rule": {
@@ -58,7 +62,9 @@
5862
"column": 33
5963
}
6064
},
61-
"callers": []
65+
"callers": [],
66+
"fixable": true,
67+
"fixed": true
6268
},
6369
{
6470
"rule": {
@@ -78,7 +84,9 @@
7884
"column": 1
7985
}
8086
},
81-
"callers": []
87+
"callers": [],
88+
"fixable": true,
89+
"fixed": true
8290
}
8391
],
8492
"errors": []

integrationtest/autofix/chdir_with_conflict/result_windows.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 1
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
},
2325
{
2426
"rule": {
@@ -38,7 +40,9 @@
3840
"column": 33
3941
}
4042
},
41-
"callers": []
43+
"callers": [],
44+
"fixable": false,
45+
"fixed": false
4246
},
4347
{
4448
"rule": {
@@ -58,7 +62,9 @@
5862
"column": 33
5963
}
6064
},
61-
"callers": []
65+
"callers": [],
66+
"fixable": true,
67+
"fixed": true
6268
},
6369
{
6470
"rule": {
@@ -78,7 +84,9 @@
7884
"column": 1
7985
}
8086
},
81-
"callers": []
87+
"callers": [],
88+
"fixable": true,
89+
"fixed": true
8290
}
8391
],
8492
"errors": []

integrationtest/autofix/conflict_fix/result.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 1
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
},
2325
{
2426
"rule": {
@@ -38,7 +40,9 @@
3840
"column": 33
3941
}
4042
},
41-
"callers": []
43+
"callers": [],
44+
"fixable": false,
45+
"fixed": false
4246
},
4347
{
4448
"rule": {
@@ -58,7 +62,9 @@
5862
"column": 33
5963
}
6064
},
61-
"callers": []
65+
"callers": [],
66+
"fixable": true,
67+
"fixed": true
6268
},
6369
{
6470
"rule": {
@@ -78,7 +84,9 @@
7884
"column": 1
7985
}
8086
},
81-
"callers": []
87+
"callers": [],
88+
"fixable": true,
89+
"fixed": true
8290
}
8391
],
8492
"errors": []

integrationtest/autofix/filter/result.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 1
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
}
2325
],
2426
"errors": []

integrationtest/autofix/fix_by_multiple_rules/result.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
"column": 22
1919
}
2020
},
21-
"callers": []
21+
"callers": [],
22+
"fixable": true,
23+
"fixed": true
2224
},
2325
{
2426
"rule": {
@@ -38,7 +40,9 @@
3840
"column": 1
3941
}
4042
},
41-
"callers": []
43+
"callers": [],
44+
"fixable": true,
45+
"fixed": true
4246
}
4347
],
4448
"errors": []

0 commit comments

Comments
 (0)