@@ -10,6 +10,7 @@ import (
1010 "github.com/hashicorp/go-getter"
1111 "github.com/terraform-linters/tflint-plugin-sdk/tflint"
1212 "github.com/terraform-linters/tflint-ruleset-terraform/project"
13+ "github.com/terraform-linters/tflint-ruleset-terraform/terraform"
1314)
1415
1516// TerraformModulePinnedSourceRule checks unpinned or default version module source
@@ -53,7 +54,9 @@ func (r *TerraformModulePinnedSourceRule) Link() string {
5354
5455// Check checks if module source version is pinned
5556// Note that this rule is valid only for Git or Mercurial source
56- func (r * TerraformModulePinnedSourceRule ) Check (runner tflint.Runner ) error {
57+ func (r * TerraformModulePinnedSourceRule ) Check (rr tflint.Runner ) error {
58+ runner := rr .(* terraform.Runner )
59+
5760 path , err := runner .GetModulePath ()
5861 if err != nil {
5962 return err
@@ -69,27 +72,22 @@ func (r *TerraformModulePinnedSourceRule) Check(runner tflint.Runner) error {
6972 return err
7073 }
7174
72- body , err := runner .GetModuleContent ( moduleCallSchema , & tflint. GetModuleContentOption { IncludeNotCreated : true } )
73- if err != nil {
74- return err
75+ calls , diags := runner .GetModuleCalls ( )
76+ if diags . HasErrors () {
77+ return diags
7578 }
7679
77- for _ , block := range body .Blocks {
78- module , diags := decodeModuleCall (block )
79- if diags .HasErrors () {
80- return diags
81- }
82-
83- if err := r .checkModule (runner , module , config ); err != nil {
80+ for _ , call := range calls {
81+ if err := r .checkModule (runner , call , config ); err != nil {
8482 return err
8583 }
8684 }
8785
8886 return nil
8987}
9088
91- func (r * TerraformModulePinnedSourceRule ) checkModule (runner tflint.Runner , module * moduleCall , config terraformModulePinnedSourceRuleConfig ) error {
92- source , err := getter .Detect (module .source , filepath .Dir (module .defRange .Filename ), []getter.Detector {
89+ func (r * TerraformModulePinnedSourceRule ) checkModule (runner tflint.Runner , module * terraform. ModuleCall , config terraformModulePinnedSourceRuleConfig ) error {
90+ source , err := getter .Detect (module .Source , filepath .Dir (module .DefRange .Filename ), []getter.Detector {
9391 // https://github.com/hashicorp/terraform/blob/51b0aee36cc2145f45f5b04051a01eb6eb7be8bf/internal/getmodules/getter.go#L30-L52
9492 new (getter.GitHubDetector ),
9593 new (getter.GitDetector ),
@@ -127,8 +125,8 @@ func (r *TerraformModulePinnedSourceRule) checkModule(runner tflint.Runner, modu
127125 if u .Hostname () == "" {
128126 return runner .EmitIssue (
129127 r ,
130- fmt .Sprintf ("Module source %q is not a valid URL" , module .source ),
131- module .sourceAttr .Expr .Range (),
128+ fmt .Sprintf ("Module source %q is not a valid URL" , module .Source ),
129+ module .SourceAttr .Expr .Range (),
132130 )
133131 }
134132
@@ -144,21 +142,21 @@ func (r *TerraformModulePinnedSourceRule) checkModule(runner tflint.Runner, modu
144142
145143 return runner .EmitIssue (
146144 r ,
147- fmt .Sprintf (`Module source "%s" is not pinned` , module .source ),
148- module .sourceAttr .Expr .Range (),
145+ fmt .Sprintf (`Module source "%s" is not pinned` , module .Source ),
146+ module .SourceAttr .Expr .Range (),
149147 )
150148}
151149
152- func (r * TerraformModulePinnedSourceRule ) checkRevision (runner tflint.Runner , module * moduleCall , config terraformModulePinnedSourceRuleConfig , key string , value string ) error {
150+ func (r * TerraformModulePinnedSourceRule ) checkRevision (runner tflint.Runner , module * terraform. ModuleCall , config terraformModulePinnedSourceRuleConfig , key string , value string ) error {
153151 switch config .Style {
154152 // The "flexible" style requires a revision that is not a default branch
155153 case "flexible" :
156154 for _ , branch := range config .DefaultBranches {
157155 if value == branch {
158156 return runner .EmitIssue (
159157 r ,
160- fmt .Sprintf ("Module source \" %s\" uses a default branch as %s (%s)" , module .source , key , branch ),
161- module .sourceAttr .Expr .Range (),
158+ fmt .Sprintf ("Module source \" %s\" uses a default branch as %s (%s)" , module .Source , key , branch ),
159+ module .SourceAttr .Expr .Range (),
162160 )
163161 }
164162 }
@@ -168,8 +166,8 @@ func (r *TerraformModulePinnedSourceRule) checkRevision(runner tflint.Runner, mo
168166 if err != nil {
169167 return runner .EmitIssue (
170168 r ,
171- fmt .Sprintf ("Module source \" %s\" uses a %s which is not a semantic version string" , module .source , key ),
172- module .sourceAttr .Expr .Range (),
169+ fmt .Sprintf ("Module source \" %s\" uses a %s which is not a semantic version string" , module .Source , key ),
170+ module .SourceAttr .Expr .Range (),
173171 )
174172 }
175173 default :
0 commit comments