mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
8ca1fcec51
This is an alternative to the full config loader in the "configs" package that is good for "early" use-cases like "terraform init", where we want to find out what our dependencies are without getting tripped up on any other errors that might be present.
79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package earlyconfig
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/terraform-config-inspect/tfconfig"
|
|
"github.com/hashicorp/terraform/tfdiags"
|
|
)
|
|
|
|
func wrapDiagnostics(diags tfconfig.Diagnostics) tfdiags.Diagnostics {
|
|
ret := make(tfdiags.Diagnostics, len(diags))
|
|
for i, diag := range diags {
|
|
ret[i] = wrapDiagnostic(diag)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func wrapDiagnostic(diag tfconfig.Diagnostic) tfdiags.Diagnostic {
|
|
return wrappedDiagnostic{
|
|
d: diag,
|
|
}
|
|
}
|
|
|
|
type wrappedDiagnostic struct {
|
|
d tfconfig.Diagnostic
|
|
}
|
|
|
|
func (d wrappedDiagnostic) Severity() tfdiags.Severity {
|
|
switch d.d.Severity {
|
|
case tfconfig.DiagError:
|
|
return tfdiags.Error
|
|
case tfconfig.DiagWarning:
|
|
return tfdiags.Warning
|
|
default:
|
|
// Should never happen since there are no other severities
|
|
return 0
|
|
}
|
|
}
|
|
|
|
func (d wrappedDiagnostic) Description() tfdiags.Description {
|
|
// Since the inspect library doesn't produce precise source locations,
|
|
// we include the position information as part of the error message text.
|
|
// See the comment inside method "Source" for more information.
|
|
switch {
|
|
case d.d.Pos == nil:
|
|
return tfdiags.Description{
|
|
Summary: d.d.Summary,
|
|
Detail: d.d.Detail,
|
|
}
|
|
case d.d.Detail != "":
|
|
return tfdiags.Description{
|
|
Summary: d.d.Summary,
|
|
Detail: fmt.Sprintf("On %s line %d: %s", d.d.Pos.Filename, d.d.Pos.Line, d.d.Detail),
|
|
}
|
|
default:
|
|
return tfdiags.Description{
|
|
Summary: fmt.Sprintf("%s (on %s line %d)", d.d.Summary, d.d.Pos.Filename, d.d.Pos.Line),
|
|
}
|
|
}
|
|
}
|
|
|
|
func (d wrappedDiagnostic) Source() tfdiags.Source {
|
|
// Since the inspect library is constrained by the lowest common denominator
|
|
// between legacy HCL and modern HCL, it only returns ranges at whole-line
|
|
// granularity, and that isn't sufficient to populate a tfdiags.Source
|
|
// and so we'll just omit ranges altogether and include the line number in
|
|
// the Description text.
|
|
//
|
|
// Callers that want to return nicer errors should consider reacting to
|
|
// earlyconfig errors by attempting a follow-up parse with the normal
|
|
// config loader, which can produce more precise source location
|
|
// information.
|
|
return tfdiags.Source{}
|
|
}
|
|
|
|
func (d wrappedDiagnostic) FromExpr() *tfdiags.FromExpr {
|
|
return nil
|
|
}
|