Back to Terraform Provider Aws

providerlint

.ci/providerlint/README.md

6.44.03.4 KB
Original Source
<!-- Copyright IBM Corp. 2014, 2026 --> <!-- SPDX-License-Identifier: MPL-2.0 -->

providerlint

The providerlint tool is a Terraform Provider code linting tool, specifically tailored for the Terraform AWS Provider.

Lint Checks

For additional information about each check, you can run providerlint help NAME.

tfproviderlint Checks

The providerlint tool extends the tfproviderlint tool and its checks. See the tfproviderlint documentation for additional information about the checks it provides.

AWS Acceptance Test Checks

CheckDescription
AWSAT001check for resource.TestMatchResourceAttr() calls against ARN attributes
AWSAT002check for hardcoded AMI IDs
AWSAT003check for hardcoded regions
AWSAT004check for TestCheckResourceAttr() calls with hardcoded TypeSet state hashes
AWSAT005check for hardcoded AWS partitions in ARNs
AWSAT006check for hardcoded AWS partition DNS suffixes

AWS Resource Checks

CheckDescription
AWSR001check for fmt.Sprintf() calls using .amazonaws.com domain suffix
AWSR002check for d.Set() of tags attribute that should include IgnoreConfig()

AWS Validation Checks

CheckDescription
AWSV001check for validation.StringInSlice() calls using []string parameter

Development and Testing

WARNING: The vendor directory for this module is required, because the analysistest package, the testing framework for the go/analysis framework, does not support Go Modules.

This project is built on the tfproviderlint project and the go/analysis framework.

Helpful tooling for development:

  • astdump: a tool for displaying the AST form of Go file

Unit Testing

console
$ go test ./...

Adding an Analyzer

NOTE: Provider-specific analyzers should implement their own namespace outside tfproviderlint's AT### (acceptance testing), R### (resource), and S### (schema) to prevent naming collisions.

  • Create new analyzer directory in passes/. The new directory name should match the name of the new analyzer.
    • Add passes/NAME/README.md which documents at least a description of analyzer.
    • Add passes/NAME/NAME.go which implements Analyzer.
    • If analyzer is a full check:
      • Include passing and failing example code in passes/NAME/README.md.
      • Add passes/NAME/NAME_test.go which implements analysistest.TestData() and analysistest.Run().
      • Add passes/NAME/testdata/src/a directory with Go source files that implement passing and failing code based on analysistest framework.
      • Since the analysistest package does not support Go Modules currently, each analyzer that implements testing must add a symlink to the top level vendor directory in the testdata/src/a directory. e.g. ln -s ../../../../../vendor passes/NAME/testdata/src/a/vendor.
  • Add new link to new analyzer in README.md (this file).