| // 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 |
| } |