in rules/terraform_required_version_declaration.go [69:104]
func (r *TerraformRequiredVersionDeclarationRule) checkBlock(runner tflint.Runner, block *hclsyntax.Block) error {
msg := "The `required_version` field should be declared at the beginning of `terraform` block"
versionAttr, defined := block.Body.Attributes["required_version"]
if !defined {
return runner.EmitIssue(
r,
msg,
block.DefRange(),
)
}
comparePos := func(pos1 hcl.Pos, pos2 hcl.Pos) bool {
if pos1.Line != pos2.Line {
return pos1.Line < pos2.Line
}
return pos1.Column < pos2.Column
}
for _, attr := range block.Body.Attributes {
if attr.Name != "required_version" && comparePos(attr.Range().Start, versionAttr.Range().Start) {
return runner.EmitIssue(
r,
msg,
versionAttr.NameRange,
)
}
}
for _, nestedBlock := range block.Body.Blocks {
if comparePos(nestedBlock.Range().Start, versionAttr.Range().Start) {
return runner.EmitIssue(
r,
msg,
versionAttr.NameRange,
)
}
}
return nil
}