in rules/terraform_count_index_usage.go [72:110]
func (r *TerraformCountIndexUsageRule) visitExp(runner tflint.Runner, exp hclsyntax.Expression) error {
file, _ := runner.GetFile(exp.Range().Filename)
tokens, diags := hclsyntax.LexExpression(exp.Range().SliceBytes(file.Bytes),
exp.Range().Filename,
exp.StartRange().Start)
if diags.HasErrors() {
return diags
}
var err error
depth := 0
for i, token := range tokens {
switch token.Type {
case hclsyntax.TokenOBrack:
depth++
case hclsyntax.TokenCBrack:
depth--
case hclsyntax.TokenIdent:
if depth == 0 || i+2 >= len(tokens) {
continue
}
first, second, third := string(token.Bytes), string(tokens[i+1].Bytes), string(tokens[i+2].Bytes)
if first == "count" && second == "." && third == "index" {
subErr := runner.EmitIssue(
r,
"`count.index` is not recommended to be used as the subscript of list/map, use for_each instead",
hcl.Range{
Filename: token.Range.Filename,
Start: token.Range.Start,
End: tokens[i+2].Range.End,
},
)
if subErr != nil {
err = multierror.Append(err, subErr)
}
}
}
}
return err
}