| package tfdiags |
| |
| import ( |
| "fmt" |
| "os" |
| "path/filepath" |
| ) |
| |
| type SourceRange struct { |
| Filename string |
| Start, End SourcePos |
| } |
| |
| type SourcePos struct { |
| 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) |
| } |