diff --git a/rules/terraform_unused_declarations.go b/rules/terraform_unused_declarations.go index 5d1ddaf..196dacc 100644 --- a/rules/terraform_unused_declarations.go +++ b/rules/terraform_unused_declarations.go @@ -138,6 +138,19 @@ func (r *TerraformUnusedDeclarationsRule) declarations(runner *terraform.Runner) LabelNames: []string{"type", "name"}, Body: &hclext.BodySchema{}, }, + { + Type: "check", + LabelNames: []string{"name"}, + Body: &hclext.BodySchema{ + Blocks: []hclext.BlockSchema{ + { + Type: "data", + LabelNames: []string{"type", "name"}, + Body: &hclext.BodySchema{}, + }, + }, + }, + }, }, }, &tflint.GetModuleContentOption{ExpandMode: tflint.ExpandModeNone}) if err != nil { @@ -145,10 +158,18 @@ func (r *TerraformUnusedDeclarationsRule) declarations(runner *terraform.Runner) } for _, block := range body.Blocks { - if block.Type == "variable" { + switch block.Type { + case "variable": decl.Variables[block.Labels[0]] = block - } else { + case "data": decl.DataResources[fmt.Sprintf("data.%s.%s", block.Labels[0], block.Labels[1])] = block + case "check": + for _, data := range block.Body.Blocks { + // Scoped data source addresses are unique in the module + decl.DataResources[fmt.Sprintf("data.%s.%s", data.Labels[0], data.Labels[1])] = data + } + default: + panic("unreachable") } } diff --git a/rules/terraform_unused_declarations_test.go b/rules/terraform_unused_declarations_test.go index f79262e..ae7fec3 100644 --- a/rules/terraform_unused_declarations_test.go +++ b/rules/terraform_unused_declarations_test.go @@ -201,6 +201,29 @@ variable "unused" { }, }, Fixed: ` +`, + }, + { + Name: "unused scoped data source", + Content: ` +check "unused" { + data "null_data_source" "unused" {} +} +`, + Expected: helper.Issues{ + { + Rule: NewTerraformUnusedDeclarationsRule(), + Message: `data "null_data_source" "unused" is declared but not used`, + Range: hcl.Range{ + Filename: "config.tf", + Start: hcl.Pos{Line: 3, Column: 3}, + End: hcl.Pos{Line: 3, Column: 35}, + }, + }, + }, + Fixed: ` +check "unused" { +} `, }, {