...

Source file src/github.com/bazelbuild/buildtools/edit/default_buildifier.go

Documentation: github.com/bazelbuild/buildtools/edit

     1  package edit
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os"
     7  	"os/exec"
     8  
     9  	"github.com/bazelbuild/buildtools/build"
    10  )
    11  
    12  type defaultBuildifier struct{}
    13  
    14  // buildify formats the build file f.
    15  // Runs opts.Buildifier if it's non-empty, otherwise uses built-in formatter.
    16  // opts.Buildifier is useful to force consistency with other tools that call Buildifier.
    17  func (b *defaultBuildifier) Buildify(opts *Options, f *build.File) ([]byte, error) {
    18  	if opts.Buildifier == "" {
    19  		// Current AST may be not entirely correct, e.g. it may contain Ident which
    20  		// value is a chunk of code, like "f(x)". The AST should be printed and
    21  		// re-read to parse such expressions correctly.
    22  		contents := build.Format(f)
    23  		newF, err := build.Parse(f.Path, contents)
    24  		if err != nil {
    25  			return nil, err
    26  		}
    27  		return build.Format(newF), nil
    28  	}
    29  
    30  	cmd := exec.Command(opts.Buildifier, "--type=build")
    31  	data := build.Format(f)
    32  	cmd.Stdin = bytes.NewBuffer(data)
    33  	stdout := bytes.NewBuffer(nil)
    34  	stderr := bytes.NewBuffer(nil)
    35  	cmd.Stdout = stdout
    36  	cmd.Stderr = stderr
    37  	cmd.Env = append(
    38          	os.Environ(),
    39  	        // Custom environment variables
    40  	)
    41  	err := cmd.Run()
    42  	if stderr.Len() > 0 {
    43  		return nil, fmt.Errorf("%s", stderr.Bytes())
    44  	}
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  	return stdout.Bytes(), nil
    49  }
    50  

View as plain text