blob: b39a1c482f7565ac6046bb82cff73a1ade826c21 [file] [log] [blame] [edit]
// Package buildifier provides a Buildifier which doesn't call os.exec.
//
// There are some programming frameworks which consider os.exec dangerous.
//
// The package is imported just for its side-effects. For example:
//
// import _ "github.com/bazelbuild/buildtools/edit/safe/buildifier"
package buildifier
import (
"github.com/bazelbuild/buildtools/build"
"github.com/bazelbuild/buildtools/edit"
)
func init() {
edit.RegisterBuildifier(&buildifier{})
}
type buildifier struct{}
// runBuildifier formats the build file f using the built-in formatter.
func (b *buildifier) Buildify(_ *edit.Options, f *build.File) ([]byte, error) {
// Current AST may be not entirely correct, e.g. it may contain Ident which
// value is a chunk of code, like "f(x)". The AST should be printed and
// re-read to parse such expressions correctly.
contents := build.Format(f)
newF, err := build.Parse(f.Path, contents)
if err != nil {
return nil, err
}
return build.Format(newF), nil
}