Skip to content

Latest commit

 

History

History
 
 

providerlint

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Check Description
AWSAT001 check for resource.TestMatchResourceAttr() calls against ARN attributes
AWSAT002 check for hardcoded AMI IDs
AWSAT003 check for hardcoded regions
AWSAT004 check for TestCheckResourceAttr() calls with hardcoded TypeSet state hashes
AWSAT005 check for hardcoded AWS partitions in ARNs
AWSAT006 check for hardcoded AWS partition DNS suffixes

AWS Resource Checks

Check Description
AWSR001 check for fmt.Sprintf() calls using .amazonaws.com domain suffix
AWSR002 check for d.Set() of tags attribute that should include IgnoreConfig()

AWS Validation Checks

Check Description
AWSV001 check 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

$ 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).