| package configs |
| |
| import "github.com/hashicorp/hcl/v2" |
| |
| // ProviderMeta represents a "provider_meta" block inside a "terraform" block |
| // in a module or file. |
| type ProviderMeta struct { |
| Provider string |
| Config hcl.Body |
| |
| ProviderRange hcl.Range |
| DeclRange hcl.Range |
| } |
| |
| func decodeProviderMetaBlock(block *hcl.Block) (*ProviderMeta, hcl.Diagnostics) { |
| // provider_meta must be a static map. We can verify this by attempting to |
| // evaluate the values. |
| attrs, diags := block.Body.JustAttributes() |
| if diags.HasErrors() { |
| return nil, diags |
| } |
| |
| for _, attr := range attrs { |
| _, d := attr.Expr.Value(nil) |
| diags = append(diags, d...) |
| } |
| |
| // verify that the local name is already localized or produce an error. |
| diags = append(diags, checkProviderNameNormalized(block.Labels[0], block.DefRange)...) |
| |
| return &ProviderMeta{ |
| Provider: block.Labels[0], |
| ProviderRange: block.LabelRanges[0], |
| Config: block.Body, |
| DeclRange: block.DefRange, |
| }, diags |
| } |