pulumi/pkg/diag/doc.go
joeduffy d26c1e395a Implement diag.Diagable on ast.Workspace and ast.Stack
The only two AST nodes that track any semblance of location right now
are ast.Workspace and ast.Stack.  This is simply because, using the standard
JSON and YAML parsers, we aren't given any information about the resulting
unmarshaled node locations.  To fix that, we'll need to crack open the parsers
and get our hands dirty.  In the meantime, we can crudely implement diag.Diagable
on ast.Workspace and ast.Stack, however, to simply return their diag.Documents.
2016-11-23 07:54:40 -08:00

42 lines
931 B
Go

// Copyright 2016 Marapongo, Inc. All rights reserved.
package diag
import (
"io/ioutil"
"path/filepath"
)
// Document is a file used during compilation, for which advanced diagnostics, such as line/column numbers, may be
// required. It stores the contents of the entire file so that precise errors can be given; Forget discards them.
type Document struct {
File string
Body []byte
}
var _ Diagable = &Document{} // compile-time assertion that *Document implements Diagable.
func NewDocument(file string) *Document {
return &Document{File: file}
}
func ReadDocument(file string) (*Document, error) {
body, err := ioutil.ReadFile(file)
if err != nil {
return nil, err
}
return &Document{File: file, Body: body}, nil
}
func (doc *Document) Ext() string {
return filepath.Ext(doc.File)
}
func (doc *Document) Forget() {
doc.Body = nil
}
func (doc *Document) Where() (*Document, *Location) {
return doc, nil
}