@@ -12,10 +12,10 @@ import (
1212 "github.com/coder/preview/types"
1313)
1414
15- func ParameterFromBlock (block * terraform.Block ) (types.Parameter , hcl.Diagnostics ) {
15+ func ParameterFromBlock (block * terraform.Block ) (* types.Parameter , hcl.Diagnostics ) {
1616 diags := required (block , "name" , "type" )
1717 if diags .HasErrors () {
18- return types. Parameter {} , diags
18+ return nil , diags
1919 }
2020
2121 pType , typDiag := requiredString ("type" , block )
@@ -28,17 +28,13 @@ func ParameterFromBlock(block *terraform.Block) (types.Parameter, hcl.Diagnostic
2828 diags = diags .Append (nameDiag )
2929 }
3030
31- pVal , valDiags := richParameterValue (block )
32- diags = diags .Extend (valDiags )
33-
3431 if diags .HasErrors () {
35- return types. Parameter {} , diags
32+ return nil , diags
3633 }
3734
35+ pVal := richParameterValue (block )
3836 p := types.Parameter {
39- Value : types.ParameterValue {
40- Value : pVal ,
41- },
37+ Value : pVal ,
4238 RichParameter : types.RichParameter {
4339 Name : pName ,
4440 Description : optionalString (block , "description" ),
@@ -54,7 +50,6 @@ func ParameterFromBlock(block *terraform.Block) (types.Parameter, hcl.Diagnostic
5450 DisplayName : optionalString (block , "display_name" ),
5551 Order : optionalInteger (block , "order" ),
5652 Ephemeral : optionalBoolean (block , "ephemeral" ),
57- BlockName : block .NameLabel (),
5853 },
5954 }
6055
@@ -80,7 +75,10 @@ func ParameterFromBlock(block *terraform.Block) (types.Parameter, hcl.Diagnostic
8075 p .Validations = append (p .Validations , & valid )
8176 }
8277
83- return p , diags
78+ // Diagnostics are scoped to the parameter
79+ p .Diagnostics = diags
80+
81+ return & p , nil
8482}
8583
8684func ParameterValidationFromBlock (block * terraform.Block ) (types.ParameterValidation , hcl.Diagnostics ) {
@@ -243,25 +241,19 @@ func required(block *terraform.Block, keys ...string) hcl.Diagnostics {
243241 return diags
244242}
245243
246- func richParameterValue (block * terraform.Block ) ( string , hcl. Diagnostics ) {
244+ func richParameterValue (block * terraform.Block ) types. HCLString {
247245 // Find the value of the parameter from the context.
248246 paramPath := append ([]string {"data" }, block .Labels ()... )
247+ path := strings .Join (paramPath , "." )
248+
249249 valueRef := hclext .ScopeTraversalExpr (append (paramPath , "value" )... )
250250 val , diags := valueRef .Value (block .Context ().Inner ())
251- if diags .HasErrors () {
252- return "" , diags
253- }
254-
255- if ! val .Type ().Equals (cty .String ) {
256- return "" , hcl.Diagnostics {
257- {
258- Severity : hcl .DiagError ,
259- Summary : "Invalid parameter value" ,
260- Detail : fmt .Sprintf ("Expected a string, got %q" , val .Type ().FriendlyName ()),
261- },
262- }
251+ return types.HCLString {
252+ Value : val ,
253+ ValueDiags : diags ,
254+ ValueExpr : & valueRef ,
255+ Source : & path ,
263256 }
264- return val .AsString (), nil
265257}
266258
267259func ParameterCtyType (typ string ) (cty.Type , error ) {
0 commit comments