Skip to content

Commit 7523ed6

Browse files
authored
Fix rule template for rule generator (#329)
1 parent e83b070 commit 7523ed6

File tree

2 files changed

+62
-45
lines changed

2 files changed

+62
-45
lines changed

rules/provider.go

Lines changed: 35 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,45 @@ import (
66
"github.com/terraform-linters/tflint-ruleset-aws/rules/models"
77
)
88

9-
var rules = [][]tflint.Rule{
10-
[]tflint.Rule{
11-
NewAwsDBInstanceDefaultParameterGroupRule(),
12-
NewAwsDBInstanceInvalidEngineRule(),
13-
NewAwsDBInstanceInvalidTypeRule(),
14-
NewAwsDBInstancePreviousTypeRule(),
15-
NewAwsDynamoDBTableInvalidStreamViewTypeRule(),
16-
NewAwsElastiCacheClusterDefaultParameterGroupRule(),
17-
NewAwsElastiCacheClusterInvalidTypeRule(),
18-
NewAwsElastiCacheClusterPreviousTypeRule(),
19-
NewAwsIAMPolicyDocumentGovFriendlyArnsRule(),
20-
NewAwsIAMPolicyGovFriendlyArnsRule(),
21-
NewAwsIAMRolePolicyGovFriendlyArnsRule(),
22-
NewAwsInstancePreviousTypeRule(),
23-
NewAwsMqBrokerInvalidEngineTypeRule(),
24-
NewAwsMqConfigurationInvalidEngineTypeRule(),
25-
NewAwsResourceMissingTagsRule(),
26-
NewAwsRouteNotSpecifiedTargetRule(),
27-
NewAwsRouteSpecifiedMultipleTargetsRule(),
28-
NewAwsS3BucketInvalidACLRule(),
29-
NewAwsS3BucketInvalidRegionRule(),
30-
NewAwsS3BucketNameRule(),
31-
NewAwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule(),
32-
NewAwsAPIGatewayModelInvalidNameRule(),
33-
NewAwsElastiCacheReplicationGroupDefaultParameterGroupRule(),
34-
NewAwsElastiCacheReplicationGroupInvalidTypeRule(),
35-
NewAwsElastiCacheReplicationGroupPreviousTypeRule(),
36-
NewAwsIAMPolicySidInvalidCharactersRule(),
37-
NewAwsIAMPolicyTooLongPolicyRule(),
38-
NewAwsLambdaFunctionDeprecatedRuntimeRule(),
39-
NewAwsIAMGroupPolicyTooLongRule(),
40-
NewAwsAcmCertificateLifecycleRule(),
41-
NewAwsElasticBeanstalkEnvironmentInvalidNameFormatRule(),
42-
},
43-
models.Rules,
44-
api.Rules,
9+
var manualRules = []tflint.Rule{
10+
NewAwsDBInstanceDefaultParameterGroupRule(),
11+
NewAwsDBInstanceInvalidEngineRule(),
12+
NewAwsDBInstanceInvalidTypeRule(),
13+
NewAwsDBInstancePreviousTypeRule(),
14+
NewAwsDynamoDBTableInvalidStreamViewTypeRule(),
15+
NewAwsElastiCacheClusterDefaultParameterGroupRule(),
16+
NewAwsElastiCacheClusterInvalidTypeRule(),
17+
NewAwsElastiCacheClusterPreviousTypeRule(),
18+
NewAwsIAMPolicyDocumentGovFriendlyArnsRule(),
19+
NewAwsIAMPolicyGovFriendlyArnsRule(),
20+
NewAwsIAMRolePolicyGovFriendlyArnsRule(),
21+
NewAwsInstancePreviousTypeRule(),
22+
NewAwsMqBrokerInvalidEngineTypeRule(),
23+
NewAwsMqConfigurationInvalidEngineTypeRule(),
24+
NewAwsResourceMissingTagsRule(),
25+
NewAwsRouteNotSpecifiedTargetRule(),
26+
NewAwsRouteSpecifiedMultipleTargetsRule(),
27+
NewAwsS3BucketInvalidACLRule(),
28+
NewAwsS3BucketInvalidRegionRule(),
29+
NewAwsS3BucketNameRule(),
30+
NewAwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule(),
31+
NewAwsAPIGatewayModelInvalidNameRule(),
32+
NewAwsElastiCacheReplicationGroupDefaultParameterGroupRule(),
33+
NewAwsElastiCacheReplicationGroupInvalidTypeRule(),
34+
NewAwsElastiCacheReplicationGroupPreviousTypeRule(),
35+
NewAwsIAMPolicySidInvalidCharactersRule(),
36+
NewAwsIAMPolicyTooLongPolicyRule(),
37+
NewAwsLambdaFunctionDeprecatedRuntimeRule(),
38+
NewAwsIAMGroupPolicyTooLongRule(),
39+
NewAwsAcmCertificateLifecycleRule(),
40+
NewAwsElasticBeanstalkEnvironmentInvalidNameFormatRule(),
4541
}
4642

4743
// Rules is a list of all rules
4844
var Rules []tflint.Rule
4945

5046
func init() {
51-
for _, r := range rules {
52-
Rules = append(Rules, r...)
53-
}
47+
Rules = append(Rules, manualRules...)
48+
Rules = append(Rules, models.Rules...)
49+
Rules = append(Rules, api.Rules...)
5450
}

rules/rule.go.tmpl

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package rules
22

33
import (
4-
hcl "github.com/hashicorp/hcl/v2"
4+
"github.com/terraform-linters/tflint-plugin-sdk/hclext"
55
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
66
"github.com/terraform-linters/tflint-ruleset-aws/project"
77
)
88

99
// TODO: Write the rule's description here
1010
// {{ .RuleNameCC }}Rule checks ...
1111
type {{ .RuleNameCC }}Rule struct {
12+
tflint.DefaultRule
13+
1214
resourceType string
1315
attributeName string
1416
}
@@ -51,19 +53,38 @@ func (r *{{ .RuleNameCC }}Rule) Check(runner tflint.Runner) error {
5153
// TODO: Write the implementation here. See this documentation for what tflint.Runner can do.
5254
// https://pkg.go.dev/github.com/terraform-linters/tflint-plugin-sdk/tflint#Runner
5355

54-
return runner.WalkResourceAttributes(r.resourceType, r.attributeName, func(attribute *hcl.Attribute) error {
56+
resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
57+
Attributes: []hclext.AttributeSchema{
58+
{Name: r.attributeName},
59+
},
60+
}, nil)
61+
if err != nil {
62+
return err
63+
}
64+
65+
for _, resource := range resources.Blocks {
66+
attribute, exists := resource.Body.Attributes[r.attributeName]
67+
if !exists {
68+
continue
69+
}
70+
5571
var val string
5672
err := runner.EvaluateExpr(attribute.Expr, &val, nil)
5773

58-
return runner.EnsureNoError(err, func() error {
74+
err = runner.EnsureNoError(err, func() error {
5975
if val == "" {
60-
runner.EmitIssueOnExpr(
76+
runner.EmitIssue(
6177
r,
6278
"TODO",
63-
attribute.Expr,
79+
attribute.Expr.Range(),
6480
)
6581
}
6682
return nil
6783
})
68-
})
84+
if err != nil {
85+
return err
86+
}
87+
}
88+
89+
return nil
6990
}

0 commit comments

Comments
 (0)