tfdiags: SourceRange.StartString

This helper provides a concise string showing the filename, start line and
start column for a range, for easy inclusion in error messages.
This commit is contained in:
Martin Atkins 2017-10-05 11:38:21 -07:00
parent fc20f419dd
commit ab5efb805c
1 changed files with 25 additions and 0 deletions

View File

@ -1,5 +1,11 @@
package tfdiags package tfdiags
import (
"fmt"
"os"
"path/filepath"
)
type SourceRange struct { type SourceRange struct {
Filename string Filename string
Start, End SourcePos Start, End SourcePos
@ -8,3 +14,22 @@ type SourceRange struct {
type SourcePos struct { type SourcePos struct {
Line, Column, Byte int Line, Column, Byte int
} }
// StartString returns a string representation of the start of the range,
// including the filename and the line and column numbers.
func (r SourceRange) StartString() string {
filename := r.Filename
// We'll try to relative-ize our filename here so it's less verbose
// in the common case of being in the current working directory. If not,
// we'll just show the full path.
wd, err := os.Getwd()
if err == nil {
relFn, err := filepath.Rel(wd, filename)
if err == nil {
filename = relFn
}
}
return fmt.Sprintf("%s:%d,%d", filename, r.Start.Line, r.Start.Column)
}