func()

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
}