common/either.go (53 lines of code) (raw):
package common
import (
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
)
var _ tflint.Rule = new(EitherCheckRule)
type EitherCheckRule struct {
tflint.DefaultRule
primaryRule tflint.Rule
secondaryRule tflint.Rule
name string
enabled bool
severity tflint.Severity
}
func NewEitherCheckRule(name string, enabled bool, severity tflint.Severity, primaryRule tflint.Rule, secondary tflint.Rule) *EitherCheckRule {
return &EitherCheckRule{
name: name,
enabled: enabled,
severity: severity,
primaryRule: primaryRule,
secondaryRule: secondary,
}
}
func (e *EitherCheckRule) Name() string {
return e.name
}
func (e *EitherCheckRule) Enabled() bool {
return e.enabled
}
func (e *EitherCheckRule) Severity() tflint.Severity {
return e.severity
}
func (e *EitherCheckRule) Check(runner tflint.Runner) error {
runners := map[tflint.Rule]*subRunner{}
for _, r := range []tflint.Rule{e.primaryRule, e.secondaryRule} {
sr := &subRunner{
Runner: runner,
}
runners[r] = sr
if err := r.Check(sr); err != nil {
return err
}
if len(sr.issues) == 0 {
return nil
}
}
sr := runners[e.primaryRule]
for _, issue := range sr.issues {
if err := runner.EmitIssue(e.primaryRule, issue.message, issue.issueRange); err != nil {
return err
}
}
return nil
}