in rules/terraform_heredoc_usage.go [44:77]
func (r *TerraformHeredocUsageRule) CheckFile(runner tflint.Runner, file *hcl.File) error {
body, ok := file.Body.(*hclsyntax.Body)
if !ok {
logger.Debug("skip terraform_heredoc_usage since it's not hcl file")
return nil
}
fileName := body.Range().Filename
tokens, diags := hclsyntax.LexConfig(file.Bytes, fileName, hcl.InitialPos)
if diags.HasErrors() {
return diags
}
var err error
var hereDocStartRange hcl.Range
var heredoc string
var inHeredoc bool
for _, token := range tokens {
switch token.Type {
case hclsyntax.TokenOHeredoc:
inHeredoc = true
heredoc = ""
hereDocStartRange = token.Range
case hclsyntax.TokenCHeredoc:
inHeredoc = false
if subErr := r.checkHeredocIsJSONOrYAML(runner, heredoc, hereDocStartRange); subErr != nil {
err = multierror.Append(err, subErr)
}
case hclsyntax.TokenStringLit:
if inHeredoc {
heredoc = fmt.Sprintf("%s%s", heredoc, string(token.Bytes))
}
}
}
return err
}