github.com/hartzell/terraform@v0.8.6-0.20180503104400-0cc9e050ecd4/tfdiags/hcl.go (about)

     1  package tfdiags
     2  
     3  import (
     4  	"github.com/hashicorp/hcl2/hcl"
     5  )
     6  
     7  // hclDiagnostic is a Diagnostic implementation that wraps a HCL Diagnostic
     8  type hclDiagnostic struct {
     9  	diag *hcl.Diagnostic
    10  }
    11  
    12  var _ Diagnostic = hclDiagnostic{}
    13  
    14  func (d hclDiagnostic) Severity() Severity {
    15  	switch d.diag.Severity {
    16  	case hcl.DiagWarning:
    17  		return Warning
    18  	default:
    19  		return Error
    20  	}
    21  }
    22  
    23  func (d hclDiagnostic) Description() Description {
    24  	return Description{
    25  		Summary: d.diag.Summary,
    26  		Detail:  d.diag.Detail,
    27  	}
    28  }
    29  
    30  func (d hclDiagnostic) Source() Source {
    31  	var ret Source
    32  	if d.diag.Subject != nil {
    33  		rng := SourceRangeFromHCL(*d.diag.Subject)
    34  		ret.Subject = &rng
    35  	}
    36  	if d.diag.Context != nil {
    37  		rng := SourceRangeFromHCL(*d.diag.Context)
    38  		ret.Context = &rng
    39  	}
    40  	return ret
    41  }
    42  
    43  // SourceRangeFromHCL constructs a SourceRange from the corresponding range
    44  // type within the HCL package.
    45  func SourceRangeFromHCL(hclRange hcl.Range) SourceRange {
    46  	return SourceRange{
    47  		Filename: hclRange.Filename,
    48  		Start: SourcePos{
    49  			Line:   hclRange.Start.Line,
    50  			Column: hclRange.Start.Column,
    51  			Byte:   hclRange.Start.Byte,
    52  		},
    53  		End: SourcePos{
    54  			Line:   hclRange.End.Line,
    55  			Column: hclRange.End.Column,
    56  			Byte:   hclRange.End.Byte,
    57  		},
    58  	}
    59  }
    60  
    61  // ToHCL constructs a HCL Range from the receiving SourceRange. This is the
    62  // opposite of SourceRangeFromHCL.
    63  func (r SourceRange) ToHCL() hcl.Range {
    64  	return hcl.Range{
    65  		Filename: r.Filename,
    66  		Start: hcl.Pos{
    67  			Line:   r.Start.Line,
    68  			Column: r.Start.Column,
    69  			Byte:   r.Start.Byte,
    70  		},
    71  		End: hcl.Pos{
    72  			Line:   r.End.Line,
    73  			Column: r.End.Column,
    74  			Byte:   r.End.Byte,
    75  		},
    76  	}
    77  }